Identification quantitative des stratégies de phase d'accumulation


Date de création: 2024-02-20 11:29:57 Dernière modification: 2024-02-20 11:29:57
Copier: 0 Nombre de clics: 589
1
Suivre
1617
Abonnés

Identification quantitative des stratégies de phase d’accumulation

Aperçu

Cette stratégie utilise une combinaison de moyennes mobiles, d’indicateurs de volume de transactions et d’indicateurs de dynamique des prix pour concevoir un ensemble de règles de quantification permettant d’identifier le moment où les actions entrent dans la phase d’accumulation.

Principe de stratégie

La stratégie utilise des moyennes mobiles simples à 50, 90 et 200 jours pour déterminer la tendance des prix. Un signal d’achat n’est généré que lorsque le prix est supérieur à la ligne de 200 jours. Cela permet de filtrer l’incertitude de la baisse de la grande tendance.

En plus de déterminer la tendance générale, la stratégie décide de la séquence de la moyenne à court terme pour confirmer la tendance. Plus précisément, elle décide que la ligne de 50 jours est supérieure à la ligne de 90 jours.

La stratégie consiste à combiner l’indicateur de volume PVT et l’indicateur de MACD pour juger des caractéristiques cumulatives sur la base de la confirmation de la tendance majeure et de la tendance à court terme par la moyenne mobile. Un signal d’achat ne peut être généré que lorsque le PVT se déplace vers le haut, la ligne MACD est supérieure à la ligne de signal et la quantité de transactions est amplifiée.

Avantages stratégiques

Par rapport à l’utilisation d’une seule moyenne mobile, cette stratégie confirme la tendance tout en examinant les caractéristiques du volume de transactions. Cela permet de déterminer avec plus de précision le moment où les actions entrent dans la phase d’accumulation, assurant ainsi un avantage en termes de prix d’entrée.

Grâce à l’analyse de plusieurs périodes, cette stratégie combine des jugements de tendances à moyen et long terme et des jugements de caractéristiques à court terme, et une correspondance de périodes permet de réduire l’incertitude causée par des erreurs de jugement sur une seule période.

Risques et solutions

Cette stratégie repose principalement sur le jugement de la courbe moyenne, qui s’éteint en cas de forte fluctuation des prix. La taille de la position doit alors être réduite ou la sortie doit être stoppée.

En outre, les jugements de la phase d’accumulation peuvent être erronés, ce qui laisse passer une occasion de revenir en arrière. Cela nécessite d’observer plus d’indicateurs caractéristiques pour confirmer les jugements.

Optimiser les idées

Cette stratégie peut introduire des algorithmes d’apprentissage automatique qui permettent de juger automatiquement les phases d’accumulation par extraction de caractéristiques et d’entraînement de modèles. Cela peut réduire les limitations causées par les seuils de réglage manuels.

En outre, la stratégie peut également essayer la fonction breakpoint, qui permet de changer automatiquement de paramètres dans différents environnements de marché, ce qui rend la stratégie plus robuste.

Résumer

Cette stratégie utilise généralement une approche qui fait correspondre le prix et le volume des transactions pour déterminer les caractéristiques d’accumulation des actions. Tout en confirmant la direction générale, explorez les opportunités d’accumulation à court terme.

Code source de la stratégie
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot

//@version=5
strategy("Accumulate", overlay = true)
lookback = input(defval = 21, title = 'Lookback')
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
//SMA Tredline
out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
//sma plot
plot(out, color=color.blue, title="MA200", offset=offset)
plot(outf, color=color.maroon, title="MA50", offset=offset)
plot(outn, color=color.orange, title="MA90", offset=offset)
plot(outt, color=color.olive, title="MA21", offset=offset)

//MarketCap Calculation
//MarketCap = 0.0
//TSO = request.financial(syminfo.tickerid, "TOTAL_SHARES_OUTSTANDING", "FQ", ignore_invalid_symbol = true)


//if str.tostring(TSO) != 'na'
//    if ta.barssince(TSO != TSO[1] and TSO > TSO[1])==0
//        MarketCap := TSO * close
//       
//    if barstate.islast and MarketCap == 0
//        runtime.error("No MarketCap is provided by the data vendor.")
//    
//momlen = 100
//msrc = MarketCap
//mom = msrc - msrc[momlen]
//plotmom = if (mom > mom[1])
//    true
//else
//   false

//OBV with sma on macd
obv = ta.cum(math.sign(ta.change(close)) * volume)
smoothingLength = 5
smoothingLine = ta.sma(obv,5)
[macdLine, signalLine, histLine] = ta.macd(ta.pvt, 12, 26, 9)
sellvolhigh = macdLine < signalLine
buyvolhigh = macdLine > signalLine
//Buy Signal
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
higheshigh = ta.rising(high, 2)
higheslow = ta.rising(low, 2 )
twohunraise = ta.rising(out, 2)
//highvol =  ta.crossover(volume, ta.sma(volume, lookback))
highvol = ta.rising(volume,2)
fourlow = ta.lowest(close, lookback)
fourhig = ta.highest(close, lookback)
change =  (((fourhig - fourlow) / fourlow) * 100) <= 30
green = close > open
allup = false
lineabove = ta.cross(close, ta.sma(close, input(defval = 21, title = 'Entry Line')))
if matwohun and mafentry and higheshigh and twohunraise and buyvolhigh
//if higheshigh and higheslow and highvol
    allup := true

plotshape(allup, style=shape.arrowup,location=location.belowbar, color=color.green, title = "Buy Signal")

barsSinceLastEntry() =>
    strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
    
//Sell Signal
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
linebreak = ta.sma(close, input(defval = 21, title = 'Exit Line')) > close
lowesthigh = ta.falling(high, 3)
lowestlow = ta.falling(low, 2 )
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
highvole =  ta.crossover(volume, ta.sma(volume, 5))
//fourlow = ta.lowest(close, lookback)
//fourhig = ta.highest(close, lookback)
changed =  (((fourhig - close) / close) * 100) >= 10
red = close < open
atr = ta.atr(14)
//atrsmalen = int(bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) )
atrsmalen = barsSinceLastEntry()
atrsma = false
atrlen = 5
if str.tostring(atrsmalen) != 'NaN' and atrsmalen > 0
    atrlen := atrsmalen

    
atrsma := atr > ta.sma(atr,50)


alldwn = false
if sellvolhigh and lowestlow and (close < close[1] and close < open)
//if higheshigh and higheslow and highvol
    alldwn := true

plotshape(alldwn, style=shape.arrowdown,location=location.abovebar, color=color.red, title = "Sell Signal")


longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (allup)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (alldwn)
    strategy.entry("My Short Entry Id", strategy.short)