Stratégie de cassure de l'indicateur Dual Momentum


Date de création: 2023-11-16 17:00:54 Dernière modification: 2023-12-01 14:59:44
Copier: 1 Nombre de clics: 648
1
Suivre
1617
Abonnés

Stratégie de cassure de l’indicateur Dual Momentum

Aperçu

Cette stratégie est une stratégie de rupture de deux indices dynamiques. Elle utilise deux indices dynamiques avec des paramètres différents pour générer un signal de transaction lorsque les deux indices dynamiques traversent l’axe zéro.

Principe de stratégie

Le code définit d’abord les attributs de la stratégie, tels que le mode de commande, le mode de commande, etc. Ensuite, il calcule deux indicateurs dynamiques:

// Momentum settings

i_len           = input(defval = 12, title = "Length", minval = 1) 
i_src           = input(defval = close, title = "Source")
i_percent       = input(defval = true, title = "Percent?")
i_mom           = input(defval = "MOM2", title = "MOM Choice", options = ["MOM1", "MOM2"])

// Momentum code

mom0 = momentum(i_src, i_len, i_percent) 
mom1 = momentum(mom0, 1, i_percent)
mom2 = momentum(i_src, 1, i_percent)

momX = mom1 

if i_mom == "MOM2"
    momX := mom2

mom0 est l’indicateur de dynamique de base, la longueur est i_len, la source de données est i_src, le calcul du pourcentage est déterminé par i_percent.

mom1 est une dynamique de longueur 1 avec mom0 comme source de données.

mom2 est un indicateur de dynamique de longueur 1 provenant de la base de données i_src.

L’indicateur de dynamique momX est finalement utilisé. Par défaut, mom1 est utilisé, mais vous pouvez également choisir mom2 .

Lorsque mom0 et momX sont simultanément au-dessus de l’axe 0, faire plus; lorsque mom0 et momX sont simultanément en dessous de l’axe 0, faire un placement nul.

Avantages stratégiques

  1. L’utilisation d’indicateurs de double dynamique combinés à différents paramètres permet d’améliorer la fiabilité des signaux de transaction, et la double confirmation réduit les faux signaux.

  2. Les entrées multiples et les entrées vides sont utilisées uniquement pour les positions blanches, ce qui réduit la fréquence des transactions et les coûts de transaction.

  3. Les paramètres de l’indicateur de dynamique peuvent être ajustés pour s’adapter à différents environnements de marché.

  4. La structure du code est claire, facile à comprendre et à modifier.

  5. Le système de messagerie de transaction a été ajouté pour une utilisation en combinaison avec le système de trading automatique.

Risque stratégique

  1. Bien que l’indicateur de masse binaire puisse réduire les faux signaux, il peut également manquer des signaux de tendance plus faibles.

  2. Si vous ne faites que des transactions multiples, vous risquez de manquer une opportunité de trading à vide.

  3. Une mauvaise configuration des paramètres de l’indicateur de dynamique peut entraîner des transactions trop fréquentes ou trop lentes.

  4. Les données de détection insuffisantes peuvent entraîner une suradaptation des paramètres.

  5. La double confirmation réduit les faux signaux, mais ne peut pas être complètement évitée.

Orientation de l’optimisation de la stratégie

  1. On peut tester des combinaisons de paramètres de différentes longueurs et si le pourcentage est calculé pour trouver le paramètre optimal.

  2. Vous pouvez envisager d’ajouter des signaux de trading à vide après la confirmation de la tendance afin de capturer plus d’opportunités de trading.

  3. Il est possible de tester différentes méthodes de calcul de l’indicateur de dynamique, telles que le ROC, le RSI, etc., pour obtenir de meilleurs résultats.

  4. Le filtrage des tendances peut être combiné pour éviter de négocier dans des conditions de choc.

  5. Il est possible d’optimiser les stratégies de stop loss et de contrôler les risques tout en maximisant les bénéfices.

Résumer

Cette stratégie est une stratégie typique de rupture de deux indicateurs dynamiques. Elle utilise la double confirmation pour réduire les faux signaux et ne fait que des entrées multiples pour réduire la fréquence des transactions. Les avantages de la stratégie sont simples et faciles à mettre en œuvre, avec beaucoup de place pour l’amélioration de l’optimisation des paramètres et du contrôle des risques.

Code source de la stratégie
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Long Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.long)

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
 
time_cond  =true

// Momentum settings

i_len           =       input(defval = 12,      title = "Length",       minval = 1)
i_src           =       input(defval = close,   title = "Source")
i_percent       =       input(defval = true,    title = "Percent?")
i_mom           =       input(defval = "MOM2",  title = "MOM Choice",   options = ["MOM1", "MOM2"])

// Messages for buy and sell
message_buy  = input("{{strategy.order.alert_message}}", title="Buy message")
message_sell = input("{{strategy.order.alert_message}}", title="Sell message")

// Momentum code

momentum(seria, length, percent) =>
	_mom        =       percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
	_mom

mom0        =       momentum(i_src, i_len, i_percent)
mom1        =       momentum(mom0, 1, i_percent)
mom2        =       momentum(i_src, 1, i_percent)

momX        =       mom1

if i_mom == "MOM2"
    momX    :=     mom2
    
// Strategy Alerts    

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE", alert_message = message_buy)
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomExit", strategy.short, stop = low - syminfo.mintick, comment = "MomSE", alert_message = message_sell)
else
	strategy.cancel("MomExit")
	
// Plotting

plot(0, color = #5d606b, title = "ZERO")
plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")