ダイナミックギャップフィリング平均回帰戦略:トレンドフィルターとボリュームフィルター

EMA ATR RSI MEAN REVERSION GAP FILL Trend Filter VOLUME FILTER Trailing Stop
作成日: 2025-05-16 16:08:41 最終変更日: 2025-05-16 16:10:56
コピー: 0 クリック数: 329
2
フォロー
319
フォロワー

ダイナミックギャップフィリング平均回帰戦略:トレンドフィルターとボリュームフィルター ダイナミックギャップフィリング平均回帰戦略:トレンドフィルターとボリュームフィルター

概要

ダイナミック・ギャップ・フィッシング・平均値回帰戦略は,日中のギャップ・フィッシングの現象に特化した量的な取引システムである.この戦略は,市場が顕著なギャップが発生した後にこれらのギャップを埋めることに回帰する自然な傾向に基づいている.この戦略は,3分間の時間枠で動作し,特定の価格パターン,トレンド方向,取引量の確認を使用して高確率の取引機会をフィルターする.このシステムは,平均値回帰原理を採用し,EMAトレンドフィルター,取引量の確認,RSIオーバーバイのフィルターを含む複数のフィルターによって取引の成功率を向上させる.

戦略原則

この戦略の核心的な論理は,ギャップ検出と埋め合わせを中心に展開されています.

  1. ギャップ検出メカニズム戦略は,まず,日中の0.5%以上の価格のギャップを識別する. 前日の取引日の閉店価格と当日の開店価格を比較することによって,上方ギャップか下方ギャップかを決定する.

  2. トレンド確認:50周期と200周期の指数移動平均 ((EMA) を使って,現在の市場動向を決定する.EMA50がEMA200より大きい場合にのみ多額の考慮;EMA50がEMA200より小さい場合にのみ空白の考慮.

  3. 三反転モード: 戦略は3つの連続したが反転モードを形成することを要求します.[2] < close[1] close[1] > close の下落モード。

  4. 取引量フィルター: 選択可能な取引量フィルターは,取引量が20サイクル平均より高い場合にのみ取引を保証し,信号の信頼性を高めます.

  5. RSI フィルター:空白取引には,RSI > 60の条件が追加され,相対的な過買状態にあることを保証し,空白信号の質を向上させる.

入学条件は上記の要素をすべて含む:

  • ダウンギャップ + 三の上昇パターン + 取引量確認 + 上昇傾向
  • 空白: 上方ギャップ + 三下方パターン + 取引量確認 + 下方傾向 + RSI オーバーバイ

戦略的優位性

  1. 市場異常を明確に認識するこの戦略は,統計的に有意な市場現象である市場内の特定の異常価格のギャップに焦点を当て,予測の利点を提供します.

  2. 複数の認証メカニズムこの戦略は,ギャップ,トレンドフィルター,取引量確認,価格モデルの組み合わせにより,偽信号の可能性を大幅に削減します.

  3. リスクの管理:ATRを使用して,停止と利益の目標を設定し,市場の変動に適応するリスク管理を確保します. 最大のドル停止額を設定し,各取引のリスクを効果的に制御します.

  4. ダイナミック・フォロー・ストップ: 取引が2×ATRの利潤レベルに達すると,尾行停止を有効にすることができます.これは,利潤の一部を保持しながら,利潤の取引を継続できるようにします.

  5. フレキシブルなパラメータ設定策略は,トレーダーのリスク好みや市場条件に応じて最適化できる複数の調整可能なパラメータ (ギャップサイズ,ATR倍数,最大ストップ金額など) を提供します.

  6. 時間制限保護: 最大保有時間 ((50柱) を設定することで,長期にわたって取引が損失状態にあることを防ぐことで,資金使用効率を最適化します.

  7. 市場微細構造に適合する戦略の設計は市場の微細構造と一致し,一日の取引に焦点を当てて,夜間のリスクを避ける.

戦略リスク

  1. 平均的な勝利率戦略:約46%の勝率は,損する取引の数が,儲かる取引の数よりわずかに多いことを意味する.全体的に儲かるが,負債の連続を乗り切るには,良き心理的耐性が必要になるかもしれない.

  2. 市場依存性策略は,NASDAQ ((US100) の3分グラフのみに適用され,他の資産または時間枠でテストまたは最適化されていないと明示されている.これは,策略の適用範囲を制限している.

  3. パラメータ感度:ほとんどの量化策略と同様に,性能はパラメータ選択に非常に敏感である可能性があります.過度の最適化は,フィットネスで良好なパフォーマンスをもたらす可能性がありますが,実盤取引では不良です.

  4. 取引頻度は制限されています.“日”回の取引だけで,利益の潜在的可能性を制限し,特に波動が低い日,他の機会を逃す可能性があります.

  5. ギャップの発生頻度リスク戦略は特定の規模のギャップの発生に依存し,市場が静かである間は長期にわたって取引信号がない可能性があります.

  6. 戦略的な衰退のリスク: より多くのトレーダーが同様の戦略を使用するにつれて,ギャップフィッシングの効果は弱まり,戦略の効率が低下する可能性があります.

緩和策として

  • 厳格な資金管理を実施し,取引ごとに口座の1-2%を超えないリスク金
  • 定期的な再検証と最適化
  • 異なる市場条件に応じてギャップの値の調整を検討する
  • リアルタイム取引に十分な時間を確保し,戦略のパフォーマンスを監視します.

戦略最適化の方向性

  1. トレンドフィルターを強化する:現在の戦略は,シンプルなEMA交差をトレンド指標として使用する. フィルタリングの質を向上させるために,より複雑なトレンド識別方法,例えばADX ((平均方向指数) または複数の時間枠のトレンド分析を統合することを考えることができる.

  2. 入学タイミングを最適化:現在の三逆転モデルはあまりにも単純すぎるかもしれない. 入場タイミングを最適化するために,図形状,サポート/レジスタンスレベル,または価格行動分析などの技術確認を追加することを検討してください.

  3. ダイナミックなストップ・ローズと収益目標: 固定ATR倍数を使用することは合理的ですが,市場の変動や日中の時間に基づいて動的な調整を可能にします.例えば,高変動期にATR倍数を増加させたり,取引時間に応じてリスクパラメータを調整したりします.

  4. 機械学習の強化戦略の性能をさらに向上させる可能性のある,機械学習モデルによる歴史の穴の埋める成功率の特性を分析する (穴のサイズ,市場条件,時間など).

  5. 取引の頻度を増やすこと:同じ取引日中に複数の取引を許可するための戦略の変更を検討する.特に,現在の取引が終了し,新しい有効信号が表示された場合.これは,全体的な収益を増加させる可能性があるが,過剰な取引が導入されないことを確認するために慎重にテストする必要があります.

  6. 関連市場信号の統合: 関連市場の統合 (例えば,先物,ETF,または関連業界の指数) のシグナルを確認として考慮する.これは,特に,空白が埋められるかどうかを判断する点で,追加の情報提供の利点を提供する可能性がある.

  7. タイムフィルター: 市場が異なる時間帯で異なるように振る舞う可能性がある. 取引時間に基づくフィルターを追加することで,市場開盤と閉盤の高波動期間の回避など,戦略のパフォーマンスを高めることができる.

要約する

ダイナミック・ギャップ・フィッシング・メジャー・リターン・ストラテジー (DMPR) は,市場ギャップ・リターンを利用する統計的傾向に焦点を当てた,精巧に設計された日内取引システムである.このストラテジーには,ギャップ検出,トレンド確認,取引量フィルタリング,価格パターンの識別が組み込まれ,多層の取引意思決定の枠組みが作成されている.

戦略の核心的な優位性は,明確に定義された入場ルール,ATRベースのリスク管理,および複数の確認メカニズムにある.勝率は中程度の (約46%),しかし,正確なリスク・リターン設定 (リスク・リターン比率の2:1) によって,戦略は,反測でポジティブな収益を生み出すことができる.

この戦略は,特定の市場の異常を活用しようとするトレーダー,特にNASDAQの日内取引に興味のある投資家に特に適しています.しかし,潜在的なユーザーは,市場の依存性とパラメータの感受性を含む戦略の限界に注意する必要があります.

推奨された最適化措置,特にトレンドフィルターの強化とエントリータイミングの変更を実施することで,この戦略の性能と安定性をさらに向上させることができます. 市場条件の変化に合わせて,パラメータを定期的に再評価して調整することは,長期的な成功の鍵となります.

最終的には,この戦略は,技術的分析と統計的概念を組み合わせた,市場における特定の行動パターンを体系的に捉えるバランスのとれた量的な取引方法を表しています.

ストラテジーソースコード
/*backtest
start: 2025-04-15 00:00:00
end: 2025-05-14 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Gap Fill Mean Reversion Strategy – NASDAQ 3-Minute", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// === INPUTS ===
gapPct        = input.float(0.5, title="Minimum Gap (%)") / 100
useVolume     = input.bool(true, title="Use Volume Filter")
atrMultTP     = input.float(2.0, title="TP Multiplier (ATR)")
atrMultSL     = input.float(1.0, title="SL Multiplier (ATR)")
trailStartATR = input.float(2.0, title="Trailing Trigger (ATR)")
trailOffsetATR = input.float(1.0, title="Trailing Offset (ATR)")
maxSLusd      = input.float(100, title="Max Stop Loss (USD)")
maxBars       = input.int(50, title="Max Bars in Trade")

// === INDICATORS ===
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
trendUp = ema50 > ema200
trendDown = ema50 < ema200

rsi = ta.rsi(close, 14)
rsiShortCond = rsi > 60

// === GAP DETECTION ===
prevClose = request.security(syminfo.tickerid, "D", close[1])
todayOpen = request.security(syminfo.tickerid, "D", open)
gapUp     = todayOpen > prevClose * (1 + gapPct)
gapDown   = todayOpen < prevClose * (1 - gapPct)

// === VOLUME FILTER ===
volumeOK = not useVolume or (volume > ta.sma(volume, 20))

// === 3-CANDLE REVERSAL CONFIRMATION ===
threeDown = close[2] > close[1] and close[1] > close
threeUp   = close[2] < close[1] and close[1] < close

// === ENTRY CONDITIONS ===
longCond  = gapDown and threeUp and volumeOK and trendUp
shortCond = gapUp and threeDown and volumeOK and trendDown and rsiShortCond

// === ATR AND CALCULATIONS ===
atr = ta.atr(14)
entryPrice = strategy.opentrades > 0 ? strategy.opentrades.entry_price(0) : na
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0

// === TRAILING STOP CONDITIONS ===
trailTrigger = atr * trailStartATR
trailOffset = atr * trailOffsetATR

longTrailCond = inLong and close > entryPrice + trailTrigger
shortTrailCond = inShort and close < entryPrice - trailTrigger

// === STOP LOSS DISTANCE (fixed USD limit applied) ===
slDistance = math.min(atr * atrMultSL, maxSLusd / syminfo.pointvalue)

// === ENTRIES ===
if (longCond)
    strategy.entry("Gap Long", strategy.long)

if (shortCond)
    strategy.entry("Gap Short", strategy.short)

// === EXITS ===
// LONG
if (longTrailCond)
    strategy.exit("Trail Long", from_entry="Gap Long", trail_points=trailOffset, trail_offset=trailOffset)
else if (inLong)
    strategy.exit("SL/TP Long", from_entry="Gap Long", stop=entryPrice - slDistance, limit=entryPrice + atr * atrMultTP)

// SHORT
if (shortTrailCond)
    strategy.exit("Trail Short", from_entry="Gap Short", trail_points=trailOffset, trail_offset=trailOffset)
else if (inShort)
    strategy.exit("SL/TP Short", from_entry="Gap Short", stop=entryPrice + slDistance, limit=entryPrice - atr * atrMultTP)

// === MAXIMUM TRADE DURATION CONTROL ===
strategy.close("Gap Long", when=inLong and (bar_index - strategy.opentrades.entry_bar_index(0)) >= maxBars)
strategy.close("Gap Short", when=inShort and (bar_index - strategy.opentrades.entry_bar_index(0)) >= maxBars)

// === VISUALS ===
plotshape(longCond, title="Long Signal", location=location.belowbar, style=shape.triangleup, color=color.green)
plotshape(shortCond, title="Short Signal", location=location.abovebar, style=shape.triangledown, color=color.red)
plot(ema50, color=color.orange, title="EMA 50")
plot(ema200, color=color.blue, title="EMA 200")