価格モメンタムインジケーターを使用したトレンドフォロー戦略


作成日: 2024-01-17 13:58:19 最終変更日: 2024-01-17 13:58:19
コピー: 1 クリック数: 540
1
フォロー
1617
フォロワー

価格モメンタムインジケーターを使用したトレンドフォロー戦略

概要

この戦略は,価格動態指標を利用して実現されるトレンド追跡戦略である.これは,一定の周期内の閉盘価格の変化を計算して市場の傾向を判断し,価格が継続的な上昇または下降傾向に現れたときに,相応の多額の取引または空調の操作を行う.

戦略原則

この戦略の核心指標は価格の動力である.動力の計算式は以下のとおりである.

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. シンプルで理解しやすい
  2. 動量指標は価格の変化に敏感で,トレンドを素早く捉える
  3. 判定感度を調整する設定可能なパラメータ
  4. 複数の市場環境で利用可能

戦略リスク

この戦略にはいくつかのリスクがあります.

  1. 多重なトラウマや過剰な取引が起こりやすい
  2. パラメータ,特に confirmBars フィルタリングの振動を合理的に配置する必要があります.
  3. 市場突発の衝撃に効果的に対応できない
  4. 回測は,リールディスクとの差異があり,データを復元し,パラメータを補完する最適化が必要である.

戦略最適化の方向性

この戦略は以下の点で最適化できます.

  1. ストップ・ロジックを増やし,単一取引のリスクを制御する
  2. 価格の揺れによる偽信号を回避するために,突破フィルターを追加します.
  3. 異なる品種と市場環境に応じてconfirmBarsなどのパラメータを調整する
  4. 多要素判断の追加,他の指標と組み合わせて入学確認
  5. 機械学習によるパラメータとフィルタリング規則の自己適応

要約する

全体として,この動量突破策は,量化取引に適した簡単な実用的なトレンド追跡策の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)