グラフ理論「深さ優先探索(DFS)」をFXに活用:MQL5による客観的な相場構造分析ガイド

グラフ理論「深さ優先探索(DFS)」をFXに活用:MQL5による客観的な相場構造分析ガイド
PR

当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

グラフ理論における「深さ優先探索(DFS)」を相場構造の分析に応用し、主観的なプライスアクションを客観的な数値へと変換するEA(エキスパートアドバイザー)の構築手法を解説する。スイングハイやスイングローをグラフの「ノード」として捉え、トレンドの継続性を探索アルゴリズムによって判定することで、曖昧なトレンド判断を排除する仕組みだ。本記事では、MQL5を用いた具体的な実装コードからバックテストの結果まで、中級以上のトレーダーに向けた実戦的な内容を提示する。

グラフ理論「深さ優先探索(DFS)」のFXへの応用

グラフ理論「深さ優先探索(DFS)」のFXへの応用

相場がどのように動くかを解明する試みの中で、元記事の著者はグラフ理論の「深さ優先探索(DFS)」アルゴリズムをプライスアクションの構造に適用した。FXにおけるプライスアクションのアルゴリズム化における大きな課題は、スイングハイ、スイングロー、市場の継続といった概念が、通常は厳密なルールではなく定性的に記述される点にある。

この課題に対処するため、市場構造をグラフとして定式化する。具体的には、確定した各スイングを「ノード(節点)」とし、スイング間の遷移をそれらを結ぶ「エッジ(辺)」として定義する。価格が新しいキャンドルを形成し、新たなスイングが確認されるたびに、このグラフは動的に進化し、市場が時間の経過とともにどのように進行するかを構造的に表現する。

このフレームワーク内において、DFSはシステムが1つの構造的分岐を深く追跡することを可能にする。例えば、代替的な構造の可能性を検討する前に、スイングローから高値更新・安値切り上げへと続く一連の進行を深く追いかける。アルゴリズムは、構造的条件が有効である限りこのパスにコミットし、パスの深さや主要な構造レベル、ターゲットの許容範囲といった客観的な基準を通じてその強度を測定する。

構造的なパスが壊れた場合、例えば重要なスイングレベルが無効化されたとき、アルゴリズムは決定論的に前のノードに「バックトラック(後退)」し、他の潜在的なパスを探索する。これにより、価格スイングのシーケンスを市場構造内の横断可能なルートとして扱い、主観的なプライスアクション分析を、システムトレードや自動売買に適した規律あるプロセスへと変換できるのである。

DFSアルゴリズムによるトレンド分析の仕組み

DFSアルゴリズムによるトレンド分析の仕組み

グラフ理論におけるDFSは、ある分岐を選択し、他の選択肢を検討する前にその分岐を可能な限り深く探索することで機能する。これを市場構造に適用すると、アルゴリズムは連続するスイングポイントを通じて価格の単一の構造的進行を追跡することを意味する。各スイングハイまたはスイングローは、グラフ内のノードとして扱われる。

例えば、価格が確定したスイングロー(ノードA)から始まり、スイングハイ(ノードB)へ移動し、リトレースメントしてノードCを形成、その後高値をブレイクしてノードDへ、最終的にノードEへと拡大する場合を考える。DFSの用語では、構造的条件が有効である限り、システムは「A -> B -> C -> D -> E」というシーケンスに従うことになる。

トレードを実行する前に、アルゴリズムは最小限の「構造的な深さ(MinDepth)」を取得しなければならない。これは、方向性の進行を明確に示す確定スイングのシーケンスを指す。強気条件であれば「高値更新・安値切り上げ・構造のブレイク」、弱気条件であれば「安値更新・高値切り下げ・継続」といった流れだ。この構造的チェーンが検出され検証されたときにのみ、システムは方向性のバイアスを確立することを検討する。

強気バイアスは、DFSパスが有効な安値切り上げのシーケンスを特定したときに確認され、最新の安値切り上げが重要な無効化レベルとして機能する。逆に、弱気バイアスは安値更新と高値切り下げのパスが生成されたときに確認される。この深さが基準を満たせば、流動性プールや需給ゾーンなどの目標値に到達可能かを評価し、条件が満たされればトレードが実行される。価格が無効化レベルを突破した場合はパスの失敗と見なし、バックトラッキングを行って代替方向の探索を開始する。

MQL5によるEA実装の主要コンポーネント

MQL5によるEA実装の主要コンポーネント

EAの基礎を構築するにあたり、まずトレーディング機能のインポートと、システムの挙動を制御するコアパラメータの定義を行う。MQL5では `Trade.mqh` ライブラリを使用して取引関数にアクセスし、`CTrade` クラスを用いて注文を実行する。入力パラメータには、スイング検出の感度(SwingPeriod)や、分析に必要な最小の構造的深さ(MinDepth)などが含まれる。

スイングノードの構造体定義

市場構造をモデル化するための基本単位として `SwingNode` 構造体を導入する。各ノードは検出されたスイングハイまたはスイングローを表し、時間、価格、タイプ(高値/安値)、インデックス、およびDFS探索で使用される訪問済みフラグを保持する。以下は、その基本的なデータ構造である。

struct SwingNode
{
   datetime time;    // バーの時間
   double price;     // スイング価格
   int type;         // 1 = 高値, -1 = 安値
   int index;        // ノードのインデックス
   bool visited;     // DFS用フラグ
};

グローバル変数セクションでは、検出されたスイングポイントのコレクションを保存する `nodes[]` 配列や、現在のDFS探索状態を保持する `currentPath[]` 配列などを宣言する。これにより、EAは実行中に市場構造の内部状態を維持できる。また、ExnessやXMなどの海外FX業者で運用する場合、高いレバレッジを活かすためのリスク管理設定(RiskPercent)も重要となる。

再帰的なDFS探索ロジックの実装

DFSの核心となるのは、ノードを再帰的に探索して最も深いパスを見つけ出すプロセスだ。強気パスを探す場合はスイングローから開始し、高値更新と安値切り上げの連続をスキャンする。弱気パスの場合はスイングハイから開始し、安値更新と高値切り下げを追跡する。以下に、強気パスを探索する関数の概念を示す。

int DFS_Bullish(int nodeIdx, double lastLow, double lastHigh, int &path[])
{
   nodes[nodeIdx].visited = true;
   ArrayResize(path, 1);
   path[0] = nodeIdx;
   int maxDepth = 1;

   for(int i = nodeIdx+1; i < nodeCount; i++)
   {
      if(nodes[i].type == 1 && !nodes[i].visited) // 高値を探す
      {
         if(lastHigh == -1e9 || nodes[i].price > lastHigh)
         {
            for(int j = i+1; j < nodeCount; j++)
            {
               if(nodes[j].type == -1 && !nodes[j].visited) // 次の安値を探す
               {
                  if(nodes[j].price > lastLow)
                  {
                     // 再帰的に深さを探索
                  }
               }
            }
         }
      }
   }
   nodes[nodeIdx].visited = false;
   return maxDepth;
}

このアルゴリズムは、構造的なルールが維持されている限り、グラフの枝を深く掘り進む。最も深いパスが特定され、その深さが `MinDepth` を超えたとき、EAは現在のトレンドに強力な方向性バイアスがあると判断する。このアプローチにより、単なる2点間の比較ではなく、市場の多段階的な進行を考慮した高度なトレンド分析が可能になる。

トレード実行とリスク管理の自動化

トレード実行とリスク管理の自動化

有効な構造的パスが特定された後、システムは実際のトレード実行フェーズに移る。ここでは、単に方向性が一致しているだけでなく、ターゲットとなる価格水準(流動性や直近の高値・安値)までの十分な距離があるかどうかも検証される。ターゲットへの到達可能性は `IsTargetReached` 関数によって判定される。

注文実行プロセスの詳細

`ExecuteTrade` 関数は、DFSの条件が満たされた際にポジションを構築する。この際、固定ロット(FixedLotSize)または口座残高に基づいたリスク率(RiskPercent)を選択できる。海外FX業者は最大レバレッジが数百倍から数千倍に設定されていることが多いため、ボラティリティに応じた適切なストップロス(StopLossPoints)の設定は不可欠である。

注文を送信する前には、ブローカーの制約に従ったストップレベルの検証が行われ、重複したポジションを持たないためのチェックも実施される。注文が正常に執行されると、EAはチケット番号を記録し、その後のポジション管理へと移行する。また、価格が構造的な無効化レベルを突破した場合には、即座にパスの状態をリセットし、逆方向への探索に備える仕組みが組み込まれている。

チャート上での可視化機能

アルゴリズムの動作を視覚的に理解するため、EAにはスイングノードとアクティブなパスをチャート上に描画する機能が搭載されている。スイングハイは青い矢印、スイングローは赤い矢印で表示され、それらを結ぶエッジによって市場構造のグラフが形成される。さらに、DFSによって選択された「最深のパス」は太いトレンドライン(強気は緑、弱気はオレンジ)で強調される。

この可視化により、トレーダーはアルゴリズムがどのスイングを重要視し、どのような構造的根拠に基づいてトレードを判断しているかをリアルタイムで監視できる。TitanFXやAxioryといった低スプレッドを提供する業者を利用する場合、こうした精密な構造分析と迅速な執行の組み合わせは、スキャルピングからデイトレードにおいて強力な武器となるだろう。

バックテスト結果と実戦での有効性

バックテスト結果と実戦での有効性

このシステムの主な目的は、主観的なプライスアクション構造を、決定論的でルールに基づいたスイングの探索へと変換することであった。検証のため、ゴールド(XAUUSD)の15分足(M15)チャートを使用し、2025年12月1日から2026年1月30日までの2ヶ月間でバックテストが実施された。

テスト結果によれば、DFSアプローチはエントリー前に確認済みの構造的シーケンスを要求するため、無駄なトレードを効果的にフィルタリングできることが示された。デフォルト設定での検証において、システムは十分な深さに達したパスのみを選択し、方向性のバイアスが確認されたポイントで安定したパフォーマンスを発揮した。

結論として、DFSをトレーディングに統合することで、生の価格データを構造化されナビゲート可能な探索空間へと変貌させることができる。市場構造をグラフとしてモデル化し、スイングレベル間の潜在的な移動経路を追跡することで、方向性のバイアスがいつ確認され、いつ無効化されるかを客観的に判断できる。このフレームワークは、主観的なチャート解釈を検証可能な探索問題へと変換し、より高度なアルゴリズム戦略の開発を可能にするものである。

この記事のポイント

  • グラフ理論の深さ優先探索(DFS)をFXのスイング分析に応用し、トレンド判断を客観化。
  • スイングハイ・ローを「ノード」とし、価格の推移を「エッジ」とするグラフ構造を構築。
  • MQL5での実装により、特定の「深さ(MinDepth)」に達したトレンドのみを抽出してトレード。
  • 構造が無効化された際のバックトラッキング機能を備え、動的な相場変化に対応。
  • XAUUSD(ゴールド)の15分足での検証により、構造的フィルタリングの有効性を確認。

出典

  • MQL5「Graph Theory: Traversal Depth-First Search (DFS) Applied in Trading」
共有:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)