
Cette stratégie est une stratégie de suivi de tendance réalisée à l’aide d’indicateurs de dynamique des prix. Elle permet de déterminer la tendance du marché en calculant les variations des prix de clôture au cours d’un certain cycle et d’effectuer des opérations de plus ou de moins correspondantes en cas de tendance à la hausse ou à la baisse persistante des prix.
L’indicateur central de cette stratégie est le momentum des prix. La formule de calcul du momentum est:
momentum = close - close[n]
où n représente la longueur du cycle de momentum. Lorsque le momentum est > 0, cela signifie que le prix a augmenté pendant le cycle actuel; lorsque le momentum est < 0, cela signifie que le prix a diminué pendant le cycle actuel.
La stratégie définit d’abord un paramètre confirmBars, qui représente le nombre de lignes K nécessaires à la décision de la tendance avant d’effectuer une transaction. Dans le cadre du repérage, une entrée supplémentaire est effectuée si le momentum > 0 est maintenu sur la ligne confirmBars root K; une entrée blanche est effectuée si le momentum < 0 est maintenu sur la ligne confirmBars root K.
La clé de la stratégie pour déterminer la tendance réside dans la statistique du nombre de lignes K dont le momentum est continuellement supérieur ou inférieur à zéro, réalisée par les variables bcount et scount. Elles retournent à zéro si la condition correspondante est satisfaite, +1, si elle n’est pas satisfaite.
Il s’agit d’une stratégie de suivi de tendances plus simple, qui présente les avantages suivants:
Cette stratégie comporte aussi des risques:
Cette stratégie peut être optimisée dans les domaines suivants:
Dans l’ensemble, la stratégie de rupture de dynamique est une stratégie de suivi de tendance simple et pratique, adaptée à la quantification des transactions. Dans le processus d’application, il faut faire attention au contrôle de la fréquence des transactions, à la prévention des transactions excessives et des coûts de transaction trop élevés. Dans le même temps, les paramètres et les règles de filtrage doivent être adaptés et optimisés en fonction de la variété réelle et de l’environnement du marché pour tirer le meilleur parti de la stratégie.
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Momentum Strategy [TS Trader]", overlay=true)
confirmBars = input(1)
momentumLength = input(14, title="Momentum Length")
price = close
momentum = close - close[momentumLength]
// === INPUT BACKTEST RANGE ===
fromYear = input.int(2019, title="Backtest Start Year")
fromMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12)
fromDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31)
toYear = input.int(2023, title="Backtest End Year")
toMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12)
toDay = input.int(31, title="Backtest End Day", minval=1, maxval=31)
startTimestamp = timestamp(fromYear, fromMonth, fromDay, 00, 00)
endTimestamp = timestamp(toYear, toMonth, toDay, 23, 59)
inBacktestRange = true
// === STRATEGY LOGIC ===
bcond = momentum > 0
bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0
if (bcount == confirmBars and inBacktestRange)
strategy.entry("Buy", strategy.long, comment="Long")
scond = momentum < 0
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0
if (scount == confirmBars and inBacktestRange)
strategy.entry("Sell", strategy.short, comment="Short")
// Plotting Momentum
plot(momentum, title="Momentum", color=color.purple)