Stratégie d'arrêt de la moyenne mobile

Auteur:ChaoZhang est là., Date: le 19 septembre 2023 à 21h33h48
Les étiquettes:

Résumé

Cette stratégie génère des signaux d'achat lorsque la ligne d'achat rapide de l'EMA traverse la ligne d'achat lente de la SMA et utilise l'arrêt de suivi dynamique ATR pour contrôler les risques.

La logique de la stratégie

  1. Calculer les lignes d'achat EMA rapide et SMA lente, générer un signal d'achat lorsque la ligne rapide traverse la ligne lente avec une certaine force d'achat.

  2. Calculer les lignes de vente rapide EMA et lente SMA, générer un signal de vente lorsque la ligne rapide traverse en dessous de la ligne lente.

  3. Utiliser la moyenne ATR de N jours multipliée par le coefficient d'arrêt dynamique pour le contrôle des risques.

  4. Commencez la stratégie dans la période de backtest pour l'exécution des achats et des ventes.

  5. Optimiser les paramètres pour chaque stock pour trouver les meilleures valeurs.

La stratégie combine les avantages du croisement MA pour les signaux et de l'arrêt ATR pour le contrôle des risques. L'optimisation des paramètres s'adapte aux caractéristiques de chaque produit, visant des rendements excédentaires par rapport à l'achat et à la détention avec des transactions précises.

Analyse des avantages

  1. Les croisements rapides de la EMA et de la SMA identifient les tendances et génèrent des signaux.

  2. ATR arrête les ajustements en fonction de la volatilité du marché, contrôlant ainsi efficacement les risques.

  3. L'optimisation pour chaque action améliore la rentabilité.

  4. Une logique et des règles simples, faciles à mettre en œuvre et à vérifier.

  5. Complétez la fonctionnalité de backtest pour valider la stratégie.

  6. Cherche une surperformance constante par rapport à l'achat et à la détention.

Analyse des risques

  1. Les paramètres optimisés peuvent ne pas fonctionner à l'avenir, une réoptimisation périodique peut être nécessaire.

  2. Les croisements EMA et SMA peuvent générer des signaux incorrects ou retardés.

  3. L'arrêt ATR peut être trop agressif, peut assouplir la plage d'arrêt.

  4. La faible fréquence des échanges peut manquer de bonnes opportunités.

  5. Il faut tenir compte de l'impact des coûts commerciaux.

Directions d'optimisation

  1. Continuez à tester différentes combinaisons de paramètres pour obtenir des valeurs optimales.

  2. Essayez d'introduire d'autres indicateurs pour filtrer le signal.

  3. Optimiser la période ATR pour équilibrer la sensibilité au stop loss.

  4. Évaluer l'effet du décalage de la plage de stop loss.

  5. Considérez l'apprentissage automatique pour l'optimisation automatisée des paramètres.

  6. Effet de l'étude de la fréquence croissante des échanges.

Résumé

Cette stratégie de trailing stop de moyenne mobile combine les atouts des croisements MA pour les signaux et des arrêts ATR pour le contrôle des risques. L'optimisation des paramètres l'adapte aux caractéristiques de chaque stock. Bien que les paramètres optimisés n'aient aucune garantie, la logique globale est simple et pratique pour surperformer les achats et les détentions. D'autres améliorations et vérifications en valent la peine, car la stratégie a une bonne valeur d'inspiration.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//created by XPloRR 04-03-2018

strategy("XPloRR MA-Trailing-Stop Strategy",overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity,default_qty_value=100)

testStartYear = input(2005, "Start Year")
testStartMonth = input(1, "Start Month")
testStartDay = input(1, "Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2050, "Stop Year")
testStopMonth = input(12, "Stop Month")
testStopDay = input(31, "Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriodBackground = input(title="Background", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

ema1Period = input(12, "Fast EMA Buy")
sma1Period = input(54, "Slow SMA Buy")
strength1 = input(52, "Minimum Buy Strength")

ema2Period = input(18, "Fast EMA Sell")
sma2Period = input(55, "Slow SMA Sell")
strength2 = input(100, "Minimum Sell Strength")

delta = input(8, "Trailing Stop (#ATR)")

testPeriod() => true

ema1val=ema(close,ema1Period)
sma1val=sma(close,sma1Period)
ema1strength=10000*(ema1val-ema1val[1])/ema1val[1]

ema2val=ema(close,ema2Period)
sma2val=sma(close,sma2Period)
ema2strength=10000*(ema2val-ema2val[1])/ema2val[1]

plot(ema1val,color=blue,linewidth=1)
plot(sma1val,color=orange,linewidth=1)
plot(ema2val,color=navy,linewidth=1)
plot(sma2val,color=red,linewidth=1)

long=crossover(ema1val,sma1val) and (ema1strength > strength1) 
short=crossunder(ema2val,sma2val) and (ema2strength < -strength2)

stopval=ema(close,6)
atr=sma((high-low),15)

inlong=0
buy=0
stop=0
if testPeriod()
    if (inlong[1])
        inlong:=inlong[1]
        buy:=close
        stop:=iff((stopval>(stop[1]+delta*atr)),stopval-delta*atr,stop[1])
    if (long) and (not inlong[1])
        strategy.entry("buy",strategy.long)
        inlong:=close
        buy:=close
        stop:=stopval-delta*atr
plot(buy,color=iff(close<inlong,red,lime),style=columns,transp=90,linewidth=1)
plot(stop,color=iff((short or (stopval<stop)) and (close<inlong),red,lime),style=columns,transp=60,linewidth=1)
if testPeriod()
    if (short or (stopval<stop)) and (inlong[1])
        strategy.close("buy")
        inlong:=0
        stop:=0
        buy:=0



Plus de