
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.
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.
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.
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.
Les paramètres de l’indicateur de dynamique peuvent être ajustés pour s’adapter à différents environnements de marché.
La structure du code est claire, facile à comprendre et à modifier.
Le système de messagerie de transaction a été ajouté pour une utilisation en combinaison avec le système de trading automatique.
Bien que l’indicateur de masse binaire puisse réduire les faux signaux, il peut également manquer des signaux de tendance plus faibles.
Si vous ne faites que des transactions multiples, vous risquez de manquer une opportunité de trading à vide.
Une mauvaise configuration des paramètres de l’indicateur de dynamique peut entraîner des transactions trop fréquentes ou trop lentes.
Les données de détection insuffisantes peuvent entraîner une suradaptation des paramètres.
La double confirmation réduit les faux signaux, mais ne peut pas être complètement évitée.
On peut tester des combinaisons de paramètres de différentes longueurs et si le pourcentage est calculé pour trouver le paramètre optimal.
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.
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.
Le filtrage des tendances peut être combiné pour éviter de négocier dans des conditions de choc.
Il est possible d’optimiser les stratégies de stop loss et de contrôler les risques tout en maximisant les bénéfices.
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.
/*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")