モメントブレイク戦略

作者: リン・ハーンチャオチャン, 日付: 2024-01-17 13:58:19
タグ:

img

概要

この戦略は,価格動向指標を利用したトレンドフォロー戦略である.特定の期間中の閉値変動を計算して市場のトレンドを判断し,持続的な上昇または下値トレンドがある場合に対応する長または短入りをします.

戦略の論理

この戦略の核心指標は価格の勢いです.この勢いは以下のように計算されます.

momentum = close - close[n] 

n は動力期間の長さである.動力 > 0 は,現在の期間に価格が上昇していることを意味します.動力 < 0 は,現在の期間に価格が下がっていることを意味します.

戦略はまず,トレードを実行する前にトレンド判断に必要なキャンドルスタイルの数を表すコンファームバースパラメータを設定する.バックテスト範囲内では,コンファームバースキャンドルスタイルのインパム > 0 が持続する場合は,ロングエントリが行われます.コンファームバースキャンドルスタイルのインパム < 0 が持続する場合は,ショートエントリが行われます.

戦略のトレンド判断の鍵は,モメントが0より大きくまたは小さい連続したキャンドルスタイルの数を数えることにある.これはbcountとdiscount変数を通じて達成される.対応条件が満たされると1増やされ,条件が満たされていない場合0にリセットされる.カウントがconfirmBarsに達すると,対応するロングまたはショートトレードが実行される.

戦略 の 利点

これは比較的シンプルな傾向であり,次の利点がある.

  1. 分かりやすく実行できる単純な論理
  2. モメント インディケーターは価格変化に敏感で,トレンドを迅速に把握できます
  3. 判断感度を調整できるパラメータ
  4. 様々な市場環境で使用できます

戦略リスク

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

  1. 複数の振動する取引やオーバートレードに易しい
  2. 合理的なパラメータ設定が必要で,特に振動をフィルターするための確認バー
  3. 突発的な市場動向の影響を効果的に対処できない
  4. バックテストとライブ取引の違い,データとパラメータの最適化が必要

戦略の最適化

戦略は,いくつかの側面で最適化することができます:

  1. ストップ・ロスの論理を取引リスクごとに制御に追加する
  2. 価格変動からの誤った信号を避けるためにブレイクアウトフィルターを追加します.
  3. 異なる製品と市場環境に基づいて確認バーなどパラメータを調整
  4. 記入を確認するための他の指標を組み込む
  5. パラメータとフィルターを調整するために機械学習方法を使用する

概要

総括すると,このモメンタムブレークアウト戦略は,導入量取引戦略として適したシンプルで実践的なトレンドフォロー戦略です. 適用においては,取引頻度を制御し,過剰取引を防ぐことに注意が必要です. 一方,戦略が最大限のパフォーマンスを達成するためには,パラメータとフィルターは実際の製品と市場環境に基づいて調整および最適化する必要があります.


/*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)


もっと