Stratégie de suivi des tendances croisées à la double EMA

Auteur:ChaoZhang est là., Date: le 29 février 2024 à 11h45
Les étiquettes:

img

Résumé

La logique de la stratégie

Les indicateurs de base de cette stratégie sont deux ensembles de EMA, y compris un cycle plus long EMA1 et un cycle plus court EMA2.

Lorsque l'EMA2 du cycle plus court franchit le niveau supérieur de l'EMA1 du cycle plus long, un signal d'achat est généré. Cela indique que la tendance à court terme des prix s'est renforcée et qu'une tendance à la hausse a commencé. Lorsque l'EMA2 du cycle plus court franchit le niveau inférieur de l'EMA1 du cycle plus long, un signal de vente est généré. Cela indique que la tendance à la hausse des prix à court terme a été interrompue et qu'une tendance à la baisse a commencé.

Pour filtrer les signaux erronés, la stratégie définit deux ensembles d'indicateurs de croix dorée et de croix morte. Les signaux ne sont déclenchés que lorsque les deux ensembles d'indicateurs émettent le même signal, ce qui peut réduire efficacement les erreurs causées par les fluctuations de prix.

Analyse des avantages

  • La double structure de l'EMA peut capturer efficacement les changements des tendances à court et moyen terme pour déterminer les tendances.

  • L'utilisation de niveaux de 4 heures pour calculer les indicateurs peut faire face à des fluctuations de prix à haute fréquence.

  • La structure de la stratégie est simple et claire, facile à comprendre et à mettre en œuvre, et adaptée aux applications de négociation quantitative.

Analyse des risques

  • La double structure EMA est moins efficace pour juger des marchés de consolidation, car de longues périodes de consolidation peuvent générer de faux signaux.

  • Les indicateurs de niveau de 4 heures ne sont pas suffisamment sensibles pour répondre à des événements soudains.

  • La stratégie repose uniquement sur des indicateurs techniques sans combiner l'analyse fondamentale.

Ces risques peuvent être contrôlés par:

  1. Ajouter plus d'indicateurs EMA de cycle temporel pour établir des combinaisons de modèles.

  2. Utilisez l'analyse du sentiment du texte pour déterminer les événements soudains majeurs et ajuster dynamiquement les positions.

  3. Associer les changements dans l'environnement économique, les politiques et les fondamentaux de l'entreprise pour ajuster dynamiquement les paramètres.

Optimisation

La stratégie peut être encore optimisée:

  1. Ajouter des combinaisons de modèles: plus de combinaisons d'indicateurs avec différents paramètres peuvent être établies pour améliorer la stabilité de la stratégie.

  2. Ajoutez des mécanismes de stop-loss. Des points de stop-loss raisonnables peuvent contrôler efficacement les pertes individuelles.

  3. Optimisation dynamique des paramètres. Les paramètres EMA peuvent être optimisés automatiquement en fonction de différents environnements de marché.

  4. Incorporer des techniques d'apprentissage automatique. Des modèles tels que Tensorflow peuvent être entraînés pour catégoriser les tendances des prix en temps réel.

Conclusion

La stratégie de suivi de tendance double EMA est une stratégie de trading de tendance simple et pratique. Elle utilise des indicateurs doubles EMA pour déterminer les tendances de prix à court et à moyen terme afin de saisir les opportunités de marché directionnelles. Dans le même temps, la combinaison de deux ensembles d'indicateurs de filtrage de croix dorée et de croix morte peut réduire les transactions erronées. La stratégie a une structure simple et est facile à mettre en œuvre, ce qui la rend adaptée aux applications de trading quantitatif. Grâce à une optimisation et à une amélioration continues, elle a le potentiel d'élargir davantage les avantages de la stratégie et d'améliorer la rentabilité stable.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3


/// Component Code Startt
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

strategy(title="Ema cross strat", overlay=true)
margin = input(true, title="Margin?")
Margin = margin  ? margin : false
resCustom = input(title="EMA Timeframe", defval="240" )
source = close,
len2 = input(21, minval=1, title="EMA1")
len3 = input(10, minval=1, title="EMA2")
ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off)
ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off)


mylong = crossover(ema3, ema2)
myshort = crossunder(ema3,ema2)

last_long = na
last_short = na
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])

in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0

mylong2 = crossover(ema3, ema2)
myshort2 = crossunder(ema3, ema2)

last_long2 = na
last_short2 = na
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])

in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0

condlongx =   in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)

condshortx =  in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossover(condshortx, 1.9)




if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
    strategy.entry("Long", strategy.long, comment="Long")

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0    
    strategy.close("Long",when = not Margin)
    
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.entry("Short", strategy.short, comment="Short", when = Margin)

Plus de