La stratégie de dynamique est une stratégie de négociation basée sur la tendance des variations de prix. Elle permet de déterminer la tendance du mouvement des prix en calculant les variations de prix au cours d’une période donnée, puis de générer un signal de négociation.
La dynamique des prix est déterminée par le calcul de la variation des prix de clôture au cours d’un certain cycle. Plus précisément, il s’agit de calculer la variation des prix de clôture par rapport aux prix de clôture avant N cycles.
On calcule d’abord le premier indice de mouvement MOM0 avec la formule:
MOM0 = CLOSE - CLOSE[N]
Dans ce cas, CLOSE représente le prix de clôture du cycle actuel.[N] représente le prix de clôture avant N cycles. Ainsi, MOM0>0 représente une hausse du prix de clôture avant N cycles par rapport à la période actuelle, et MOM0 représente une baisse du prix de clôture avant N cycles par rapport à la période actuelle.
On calcule ensuite le deuxième indicateur de dynamique MOM1, avec la formule:
MOM1 = MOM0 - MOM0[1]
On calcule la valeur de MOM0 de la période actuelle en soustrayant la valeur de la période précédente. MOM1>0 signifie que MOM0 a augmenté, et MOM1 signifie que MOM0 a diminué.
On calcule en même temps le troisième indicateur de dynamique MOM2 avec la formule:
MOM2 = CLOSE - CLOSE[1]
On calcule le prix de clôture de la période actuelle en soustrayant le prix de clôture de la période précédente. MOM2>0 indique une hausse du prix de clôture, MOM2 indique une baisse du prix de clôture.
Lorsque MOM0>0 et MOM1>0, indique une augmentation continue de la dynamique, générant un signal d’achat; lorsque MOM0 et MOM2, indique une baisse continue de la dynamique, générant un signal de vente.
Le code a également ajouté la condition temporelle time_cond, qui ne génère des signaux de transaction que pendant la période de rétroaction définie. En outre, vérifiez si la condition est toujours en vigueur avant de placer une commande, afin d’éviter que la commande ne soit toujours passée après la disparition du signal.
Il est possible de réduire le risque en raccourcissant les cycles de volume, en introduisant des jugements de tendance ou en configurant des arrêts de perte. Il est également possible d’envisager d’ajouter un indicateur de volume de transaction pour le filtrage.
Les stratégies de dynamique permettent de déterminer efficacement la direction des points chauds du marché en suivant la tendance des changements de prix plutôt que le prix lui-même et de saisir les opportunités de hausse et de baisse des prix. Cependant, la dynamique est laxiste. Le choix des paramètres et l’optimisation de la combinaison sont essentiels à l’efficacité de la stratégie.
/*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")