
この戦略は,価格動態指標を利用して実現されるトレンド追跡戦略である.これは,一定の周期内の閉盘価格の変化を計算して市場の傾向を判断し,価格が継続的な上昇または下降傾向に現れたときに,相応の多額の取引または空調の操作を行う.
この戦略の核心指標は価格の動力である.動力の計算式は以下のとおりである.
momentum = close - close[n]
ここでnは動量周期の長さを表している。momentum > 0の場合,現在の周期で価格が上昇していることを示している.momentum < 0の場合,現在の周期で価格が低下していることを示している。
この戦略は,まず confirmBars パラメータを設定し,取引を実行するために何 K 線が必要かを代表する傾向判断を行う. 回測範囲内では,momentum > 0 がconfirmBars root K 線を継続した場合,多入が実行され,momentum < 0 がconfirmBars root K 線を継続した場合,空き入が実行されます.
この戦略のトレンド判断の鍵は,bcountとscountの変数によって,momentumが連続して0より大きいまたは0より小さいK線の数を統計化することにある.それらは,対応する条件が満たされたときに+1で,満たされていない場合は0に戻ります.カウンターがconfirmBarsに達したときに,対応する取引を多額または空白に実行します.
これはよりシンプルなトレンド追跡戦略で,以下の利点があります.
この戦略にはいくつかのリスクがあります.
この戦略は以下の点で最適化できます.
全体として,この動量突破策は,量化取引に適した簡単な実用的なトレンド追跡策の1つである.適用過程で,取引頻度を制御し,過度取引と取引コストを過剰に防ぐことに注意する必要がある.同時に,パラメータとフィルタリング規則は,実際の品種と市場環境に応じて調整して最適化され,戦略の最大効果を出す必要があります.
/*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)