ダイナミック公正価値ギャップデイトレード戦略: SMC理論に基づくマルチタイムフレームバックテストシステム

FVG SMC SL TP Risk-Reward Ratio
作成日: 2025-03-26 15:27:29 最終変更日: 2025-03-26 15:27:29
コピー: 2 クリック数: 601
2
フォロー
319
フォロワー

ダイナミック公正価値ギャップデイトレード戦略: SMC理論に基づくマルチタイムフレームバックテストシステム ダイナミック公正価値ギャップデイトレード戦略: SMC理論に基づくマルチタイムフレームバックテストシステム

概要

ダイナミック・フェア・バリュー・ギャップ (英語: Fair Value Gap,略称:FVG) は,市場構造理論に基づく量的な取引システムで,価格におけるフェア・バリュー・ギャップを特定し取引することに専念している.この戦略は,3つの線形状を使用して,価格行動における需要・供給の不均衡を検出し,価格がこれらの領域を反測する際に入場取引を行う.この戦略は,固定されたリスク・報酬比率を使用してリスク管理を行い,夜間リスクを避けるために毎日特定の時間帯の強制平準化ポジションを設定する.この方法は,スマートマネーコンセプト (英語: Smart Money Concept,略称:SMC) 理論に由来し,この理論は,金融機関の行動と市場構造の微小な変化を重視する.この戦略は,システム的にこれらの高回益率の地域を特定し取引することで,価格の波動を捕捉し,厳格なリスク管理を維持することを目的としている.

戦略原則

公正価値ギャップの取引戦略の核心原則は,価格が急速に動いているときに残される”未取引領域”または”ギャップ”に基づいています. これらの領域は,需要と供給の深刻な不均衡を代表し,通常,将来的に”埋め”または”再テスト”されます.具体的には,戦略は以下の方法で動作します.

  1. ギャップ検出メカニズムFVGの2つのタイプを識別するために,3つの線モデルを使用します.

    • 参照FVG:現在の線の最低価格は2つの線の前の最高価格より高く,前一線の終結価格は2つの線の前の最高価格より高い.
    • 転落FVG:現在の線の最高価格は2つの線の前の最低価格より低く,前一線の閉盘価格は2つの線の前の最低価格より低い.
  2. 入場論理を反射するFVGは,FVGが形成されたときにすぐに入場するのではなく,価格がこれらの領域に反応するのを待っています.

    • FVG:価格がFVG領域の上の境界 (高点) に戻ったとき,多信号をトリガーします.
    • 落下FVG:価格がFVG領域の下辺 ((低点) に反発すると,空調信号を発動する.
  3. リスク管理

    • ストップ・ロスは,対応するFVGの境界で設定されます (下落FVGの低点または下落FVGの高点).
    • 利潤目標は1:2のリスク・リターン比率で,入場価格± ((入場価格-ストップ損失) ×2の計算法で計算される.
  4. 終盤は平らだった戦略: 毎日の午後3時15分 (インド標準時) に,すべての持株を自動的に平仓し,すべてのFVG配列をクリアし,次の取引日のために準備する.

  5. トランザクションを重ね合わせる戦略は最大5回の重複取引を許容する (ピラミダイング),つまり同じ方向に複数のポジションを保持することができ,それによって強いトレンド市場での利益を拡大する.

この方法は,市場構造における不連続性と価格行動理論を利用し,これらの不均衡な領域を埋める際に価格の予測可能な行動を捉えようとしています.

戦略的優位性

この戦略は,コードを深く分析した結果,いくつかの利点が明らかになりました.

  1. 客観的な取引基準策略:FVGとエントリーポイントを識別するために明確に定義された数学的条件を使用し,主観的な判断を排除し,取引の規律と一致性を向上させる.

  2. 市場構造に基づく取引公平価値のギャップを取引することによって,戦略は,価格行動に遅れがちな従来の指標の信号に依存するのではなく,市場の真の需要と供給の不均衡の領域に焦点を当てます.

  3. リスク管理

    • 預算のストップ・ロスは,取引ごとに最大リスクが明記されています.
    • 固定リスクのリターンは,長期的な利益を確保するために必要な勝利率より合理的です.
    • 強制的な終日平成は,夜間のリスクを排除する.
  4. 複合収益の可能性ストップ・ロストによって各ポジションのリスクをコントロールしながら,強烈なトレンド市場において,戦略は収益を大幅に増加させることができます.

  5. 適応力戦略は固定価格レベルに依存するのではなく,現在の市場条件の下の重要な領域を動的に識別し,異なる市場環境とツールの中で適応できるようにします.

  6. プログラミング効率: コードは,FVG情報をアセットで保存し,複数の潜在的な取引機会を効果的に管理し,システムが複数の価格レベルを追跡し,応答できるようにします.

  7. ビジュアルアシスタント戦略:FVG領域をグラフに直感的に表示する (緑は看板FVG,赤は下落FVG),トレーダーがシステムの意思決定プロセスを理解するのを助ける.

戦略リスク

この戦略は理論上は堅実で,多くの利点がありますが,いくつかのリスク要因があります.

  1. 偽の突破の危険性: 整合市場では,価格がFVGの境界に何度も触れて,継続的なトレンドを形成せず,複数のストップ・ロスの出口を引き起こす可能性があります. 解決策には,追加の市場環境フィルターまたはトレンド確認指標の追加が含まれます.

  2. トランザクションリスクの重複: 最大5つの同方向ポジションを許可することは,特にトレンドが突然逆転したときに,間違った方向に過剰に曝露することにつながる可能性があります. すべてのポジションの最大リスクが特定のアカウントのパーセントを超えないように,全体的なリスク制限を実施することを推奨します.

  3. 固定リスク報酬率の限界: 固定の1:2リスク/リターン比率を使用することは,すべての市場条件に適していない可能性があります. 波動性が低い市場では,そのような目標を達成することは困難である可能性があります. 波動性が高い市場では,利益のある取引を早めに退出することがあります. 市場波動性に基づいて収益の目標の調整を考慮してください.

  4. 市場環境のフィルタリングの欠如:戦略は,全体的なトレンドや波動状態を考慮せずに,すべての市場条件でシグナルを生成する. 強いトレンドの環境で取引逆転FVGは,連続的な損失を引き起こす可能性があります. トレンドフィルターを追加すると,パフォーマンスを大幅に向上させることができます.

  5. 取引量確認の欠如: 策略は価格行動のみに基づいて,取引量確認を考慮しない.これは,取引量の低い領域で偽の信号を生成する可能性がある.取引量分析を統合することで,信号の質を向上させることができる.

  6. 固定時間退出の潜在的な問題: 特定の時間帯での退出は,有利な位置で早退したり,不利な位置でより良い退出の機会を逃す可能性があります. 価格行動に基づく退出条件を組み合わせて考慮してください.

  7. 歴史の追溯仮説に 依存する戦略的仮定: 将来のFVGの行動は,過去に観察されたパターンに似ています. 市場の動態が変化し,これらのモデルの有効性を弱める可能性があります. 定期的にパラメータを再最適化して仮定を検証することは非常に重要です.

戦略最適化の方向性

このコードの詳細な分析に基づいて,以下はいくつかの可能な最適化方向です.

  1. 市場構造のフィルター

    • より高度なトレンド識別システムを実現し,トレンド方向のみで取引FVG。
    • 簡単な移動平均方向フィルターまたはより複雑な市場構造分析を追加できます.
    • このフィルターは,逆転取引による損失を大幅に減らすことができます.
  2. 波動性調整

    • 固定されたリスク/リターン比率ではなく,現在の市場の波動性に基づくダイナミックなストップ・ローズとリターンの目標を達成します.
    • 高変動環境で目標を拡大し,低変動環境で目標を緊縮する.
    • ATR (平均実範囲) または類似の指標を使用して変動性を量化することができます.
  3. 取引量確認

    • 取引量条件を追加し,FVGの形成と再測定時に十分な取引量サポートを確保する.
    • 低流動性の環境では,偽信号を減らすことができます.
  4. ポジションの規模を調整する

    • 歴史的勝率,現在の波動性,特定のFVGの特徴に基づいて動的なポジションの規模を実現します.
    • より”クリーン”なFVG ((三根線パターンがより明確) または強いトレンドで形成されたFVGには,ポジションの規模を増加させることができます.
  5. 多時間枠分析

    • より高い時間枠のFVG分析を統合し,より高い時間枠のFVGと一致する信号を優先する.
    • この方法により,信号の質と全体的な成功率が向上します.
  6. スマート・スプレッド取引

    • トレンドの強さや以前の取引の成功に基づいて,重叠取引の論理を修正する.
    • 利潤の取引後に重複取引の可能性を増加させ,損失の取引後に減少させることができる.
  7. 機械学習の強化

    • 機械学習アルゴリズムを導入し,FVGの特性を最も成功する可能性のあるものとして識別する.
    • これは,FVGの大きさ,形成の速度,市場環境などの要因を分析する.
  8. 統計回帰の枠組み

    • 市場環境における戦略的パフォーマンスを評価するためのより包括的な反省の枠組みを開発する.
    • モンテカルロ模擬を用いて,異なるパラメータの組み合わせと市場条件の下での予想結果の評価.

要約する

ダイナミック・フェア・バリュー・ギャップ・インデイトレーディング・ストラテジーは,市場における需要・供給の不均衡地域を識別し,取引するための体系的な方法を提供する.三線FVGモデルと明瞭な反転入場ルールを活用することで,このストラテジーは理論的に健全であり,実用的に操作可能である.その強力なリスク管理フレームワークは,既定のストップ・損失,固定リスク・リターン・比率,日終止ポジションメカニズムを含む,取引の規律のための堅固な基盤を提供する.

この戦略の主要な優点は,その客観性と市場構造に基づく方法によって,異なる市場環境において関連性を保つのである.しかしながら,戦略の効果は,推奨された最適化方向の実施によって,特に,市場環境フィルター,波動性に基づく調整,取引量確認の追加によって,著しく強化される可能性がある.

注目すべきは,どんな取引戦略も,どんなに完璧であっても,成功を保証するものではないということです. 成功した取引には,健全な戦略だけでなく,厳格な執行規律,適切な資金管理,市場に関する深い理解が必要です. ダイナミックなFair Value Gap戦略は,トレーダーが自身のリスク承受能力と市場の見解に基づいてさらにカスタマイズし,最適化できる良い出発点を提供します.

ストラテジーソースコード
/*backtest
start: 2024-03-26 00:00:00
end: 2025-03-25 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Intraday FVG", overlay=true, pyramiding=5, max_bars_back=500, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent)

// 2. FVG Detection (Three-Candle Pattern)
var bullFVGHigh = array.new_float()
var bullFVGLow = array.new_float()
var bullFVGIndex = array.new_int()
var bearFVGHigh = array.new_float()
var bearFVGLow = array.new_float()
var bearFVGIndex = array.new_int()

detectFVG() =>

    // Bullish FVG: Current low > prior high AND next high < current low
    bullCondition = low > high[2] and close[1] > high[2]
    // Bearish FVG: Current high < prior low AND next low > current high
    bearCondition = high < low[2] and close[1] < low[2]


    if bullCondition 
        // log.info("bull condition met: {0} {0} {0}", high[2], close[1], low)
        array.push(bullFVGHigh, low)
        array.push(bullFVGLow, low[2])
        array.push(bullFVGIndex, bar_index)

    
    if bearCondition
        // log.info("bear condition met: {0} {0} {0}", low[2], close[1], high)
        array.push(bearFVGHigh, high[2])
        array.push(bearFVGLow, high)
        array.push(bearFVGIndex, bar_index)

detectFVG()

// 3. Retest Execution Logic
checkRetests(arrayHigh, arrayLow, barIndex, direction) =>
    // log.info("{0} : {1}", bar_index, time)
    i = array.size(arrayHigh) - 1
    
    while i >= 0

        // log.info("barIndex : {0}" , array.get(barIndex, i))
        // log.info("bar_index : {0}" , bar_index)
        
        if array.get(barIndex, i) <  bar_index
            
            fvgHigh = array.get(arrayHigh, i)
            fvgLow = array.get(arrayLow, i)
            // log.info("visting : {0} : {1} : {2} : {3} ", array.get(barIndex, i), bar_index, fvgHigh, fvgLow)
            
            if direction == "long" and low <= fvgHigh
                // log.info("entering long")
                sl = array.get(arrayLow, i)  // Previous candle's low
                entry = close
                tp = entry + (entry - sl)*2
                strategy.entry("L"+str.tostring(array.get(barIndex, i)), strategy.long)
                strategy.exit("XL"+str.tostring(array.get(barIndex, i)), "L"+str.tostring(array.get(barIndex, i)), stop=sl, limit=tp)
                array.remove(arrayHigh, i)
                array.remove(arrayLow, i)
                array.remove(barIndex, i)
            
            if direction == "short" and high >= fvgLow
                // log.info("entering short")
                sl = array.get(arrayHigh, i)   // Previous candle's low
                entry = close
                tp = entry - (sl - entry)*2
                strategy.entry("S"+str.tostring(array.get(barIndex, i)), strategy.short)
                strategy.exit("XS"+str.tostring(array.get(barIndex, i)), "S"+str.tostring(array.get(barIndex, i)), stop=sl, limit=tp)
                array.remove(arrayHigh, i)
                array.remove(arrayLow, i)
                array.remove(barIndex, i)
        
        i := i - 1


checkRetests(bullFVGHigh, bullFVGLow, bullFVGIndex, "long")
checkRetests(bearFVGHigh, bearFVGLow, bearFVGIndex,"short")

// 5. Daily Exit at 3:15 PM IST
exitTime = hour == 15 and minute >= 15
if exitTime
    strategy.close_all()
    array.clear(bullFVGHigh)
    array.clear(bullFVGLow)
    array.clear(bearFVGHigh)
    array.clear(bearFVGLow)
    array.clear(bullFVGIndex)
    array.clear(bearFVGIndex)