La stratégie de dynamique est une stratégie de trading qui suit la tendance des prix basée sur le mouvement des prix. Elle génère des signaux de trading en calculant les changements de prix sur une certaine période. Lorsque la tendance haussière des prix est identifiée, elle déclenche un signal d'achat. Lorsque la tendance baissière des prix est identifiée, elle déclenche un signal de vente. Cette stratégie utilise un double croisement d'indicateurs de dynamique pour générer des signaux de trading.
Cette stratégie calcule la dynamique des prix en mesurant la variation du prix de clôture par rapport au prix de clôture il y a N périodes.
Le premier indicateur de momentum MOM0 est calculé comme suit:
MOM0 = proche - proche[N]
où CLOSE est le prix de clôture de la période en cours
Le deuxième indicateur de momentum MOM1 est calculé comme suit:
MOM1 = MOM0 - MOM0 [1]
Il calcule la différence entre le MOM0 actuel et le MOM0 de la période précédente.
Le troisième indicateur de momentum MOM2 est calculé comme suit:
MOM2 = CLOSE - CLOSE [1]
Il calcule la différence entre le cours de clôture actuel et le prix de clôture de la période précédente.
Lorsque MOM0 > 0 et MOM1 > 0, il indique que la dynamique est en hausse constante et déclenche un signal d'achat. Lorsque MOM0 < 0 et MOM2 < 0, il indique que la dynamique est en baisse constante et déclenche un signal de vente.
Le code inclut également une condition de temps time_cond pour ne générer des signaux que pendant la plage de temps de backtesting spécifiée.
Les risques peuvent être réduits en raccourcissant les périodes de dynamique, en ajoutant la détermination de la tendance ou en configurant un stop loss.
La stratégie de dynamique suit les tendances de changement de prix au lieu des niveaux de prix, identifiant efficacement les directions de dynamique du marché pour capturer les mouvements de prix à la hausse et à la baisse. Cependant, la dynamique a des caractéristiques de retard et la sélection de paramètres et l'optimisation des combinaisons sont cruciales pour la performance de la stratégie. Cette stratégie utilise un double croisement d'indicateurs de dynamique comme base, filtrant un peu de bruit. La performance peut être encore améliorée et les risques contrôlés par une optimisation continue des paramètres, l'intégration de nouveaux indicateurs techniques et l'utilisation de techniques d'apprentissage automatique.
/*backtest start: 2022-09-25 00:00:00 end: 2023-02-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Momentum 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) // 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 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(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 if (mom0 > 0 and momX > 0 and time_cond) strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE") else strategy.cancel("MomLE") if (mom0 < 0 and momX < 0 and time_cond) strategy.entry("MomSE", strategy.short, stop = low - syminfo.mintick, comment = "MomSE") else strategy.cancel("MomSE") plot(mom0, color = #00bcd4, title = "MOM") plot(mom1, color = #00FF00, title = "MOM1", display = display.none) plot(mom2, color = #00FF00, title = "MOM2")