ダブルモメンタム指標ブレイクアウト戦略
概要
本戦略は、二重モメンタム指標のブレイクアウト戦略です。異なるパラメータ設定の2つのモメンタム指標を使用し、両方のモメンタム指標がゼロラインを突破したときに取引シグナルを発生させます。この戦略はロングエントリーのみを行い、ショートはポジションクローズにのみ使用します。
戦略の原理
コードはまず、委託モードや手数料モードなどの戦略プロパティを設定します。次に、2つのモメンタム指標を計算します。
pine
// Momentum settings
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 code
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
mom0は基本のモメンタム指標で、長さi_len、データソースi_src、パーセント計算の有無はi_percentで決まります。
mom1はmom0をデータソースとし、長さ1のモメンタム指標です。
mom2は元のデータi_srcをソースとし、長さ1のモメンタム指標です。
最終的に使用されるモメンタム指標momXはデフォルトでmom1ですが、mom2を選択することもできます。
mom0とmomXが同時に0軸を超えた場合にロングエントリー、mom0とmomXが同時に0軸を下回った場合にポジションクローズします。
戦略のメリット
-
異なるパラメータ設定を組み合わせた二重モメンタム指標により、取引シグナルの信頼性が向上し、二重確認により偽シグナルが低減されます。
-
ロングエントリーのみで、ショートはクローズにのみ使用するため、取引頻度と取引コストが削減されます。
-
モメンタム指標のパラメータを調整可能で、異なる市場環境に対応できます。
-
コード構造が明確で、理解と修正が容易です。
-
取引メッセージ設定が組み込まれており、自動取引システムと連携できます。
戦略のリスク
-
二重モメンタム指標は偽シグナルを減らす一方で、弱いトレンドシグナルを見逃す可能性があります。
-
ロング取引のみのため、ショートの取引機会を逃します。
-
モメンタム指標のパラメータ設定が不適切だと、取引が過剰または遅延する可能性があります。
-
バックテストデータが不十分だと、パラメータのオーバーフィッティングが発生する可能性があります。
-
二重確認により偽シグナルは減少しますが完全には回避できず、実取引ではブレイクアウトの有効性に注意が必要です。
戦略の改善方向
-
異なる長さやパーセント計算の有無など、パラメータの組み合わせをテストし、最適なパラメータを見つけることができます。
-
トレンド確認後、ショートの取引シグナルを追加することで、より多くの取引機会を捉えることができます。
-
ROC、RSIなどの異なるモメンタム指標の計算方法をテストし、より良い効果を探求できます。
-
トレンドフィルターを組み合わせて、レンジ相場での取引を回避できます。
-
利益を最大化しつつリスクを管理するために、ストップロス戦略を最適化できます。
まとめ
本戦略は典型的な二重モメンタム指標のブレイクアウト戦略です。二重確認で偽シグナルを低減し、ロングエントリーのみで取引頻度を抑えます。シンプルで明確、実装が容易であり、パラメータ最適化やリスク管理において大きな改善の余地があります。全体として、本戦略はモメンタムブレイクアウト戦略の基本フレームワークとして有効ですが、実際の市場で安定的に利益を上げるためには、特定の市場に合わせた最適化と調整が必要です。
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Momentum Long 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)
// There will be no short entries, only exits from long.- 1

