English Русский
preview
プライスアクション分析ツールキットの開発(第57回):MQL5による市場状態分類モジュールの開発

プライスアクション分析ツールキットの開発(第57回):MQL5による市場状態分類モジュールの開発

MetaTrader 5 |
30 2
Christian Benjamin
Christian Benjamin

内容



はじめに

価格チャートを確認する際には、今の値動きが何を示しているのかを理解したうえで、その後の展開について仮説を立てることが重要です。このようなコンテキストを把握することで、現在の状況がエントリーに適しているのか、あるいはより明確で安定した構造が形成されるまで待つべきなのかを判断できます。複数の時間足を対象に市場状態を手動で分析する場合、多くの時間と継続的な集中力が必要になります。また、この作業を一貫して繰り返すことは負担が大きく、効率的とは言えません。

連載「プライスアクション分析ツールキットの開発」の一部である本記事では、純粋なプライスアクションに基づいて現在の市場状態を分類する自動化MQL5システムを紹介します。本記事では、純粋なプライスアクションに基づいて現在の市場状態を分類する自動化MQL5システムを紹介します。以降のセクションでは、基本的な考え方、分類ロジック、および実装アプローチについて詳しく解説します。



市場状態の理解

プライスアクションのコンテキストで市場状態を検討する前に、まず馴染みのある科学的概念である「物質の状態」を導入することが有用です。物質とは質量を持ち、空間を占めるものであり、内部エネルギーおよび外部圧力に応じて異なる物理状態をとります。これらの状態は一般に、固体、液体、気体として識別されます。

固体状態では、粒子は比較的低いエネルギー状態にあります。粒子は密に詰まり、強く結合しているため、自由な運動は制限されます。エネルギーが増加すると、これらの結合は弱まり、物質は液体状態へと遷移します。液体状態では粒子は近接したままですが、もはや剛体のように固定されてはいません。さらにエネルギーが増加すると、粒子は非常に活発に動き、自由に拡散し、気体状態を形成します。

重要な原則は、物質そのものは変化しないという点です。変化するのはその「状態」のみです。水は氷でも液体でも水蒸気でも水であり続けます。変化するのは内部エネルギーであり、そのエネルギーが構造や運動としてどのように表現されるかです。この原則は市場挙動を理解するための有用な枠組みを提供します。価格そのものの性質は変わらず、ボラティリティや市場構造といった内部条件に応じて異なる振る舞いの状態として表現されます。これらの状態は、価格が「どこへ向かうか」ではなく、「どのように振る舞っているか」を記述するものです。

物理的状態から市場状態へ

以下の図は、物質の状態を市場状態のアナロジーとしてどのように用いるかを示しています。この枠組みでは、方向性のトレンドではなく、ボラティリティと構造的制約に焦点を当てています。

科学的には、気体は固体よりも圧縮性が高いとされ、このアナロジーでは直感に反するように見える場合があります。しかし本コンテキストにおける「コンプレッション(圧縮)」とは、物理的な圧縮性ではなく「制約された状態」を意味します。固体はすでに粒子が密に詰まり、運動が制限された状態であり、同様に市場のコンプレッションは価格が狭いレンジに拘束されている状態を指します。したがって、このアナロジーは機械的な圧縮性ではなく、「自由度」と「内部エネルギー」に焦点を当てています。この枠組みにおいて、市場状態は予測的シグナルではなく記述的条件として扱われます。目的は、価格が制約されているのか、緩んでいるのか、あるいは自由に動いているのかを、確定済みのローソク足データに基づいて判断することです。

本開発で用いる対応関係は以下の通りです。

  • 固体 ― コンプレッション
  • 液体 ― トランジション
  • 気体 ― エクスパンション

これらの状態は離散的に変化するのではなく、ボラティリティや構造の変化に応じて連続的に遷移します。市場は通常、ある状態から別の状態へ瞬時に移るのではなく、中間的な状態を経ながら変化していきます。

コンプレッション状態(固体)

コンプレッション状態とは、価格が構造的に制約されている状態を指します。ローソク足のレンジは収縮し、ボラティリティは低下し、価格は比較的狭い帯域内で推移します。高値と安値は重なり合い、方向性のある進展は限定的になります。

コンプレッションは「非活動状態」と同義ではありません。価格は引き続き変動していますが、その動きは拡張されるのではなく吸収されます。この状態を識別することで、将来の方向性を仮定することなく、制約された値動きというコンテキストを確立できます。 コンプレッションは複数の時間軸にわたって長期間継続する場合があり、特に市場参加が均衡している場合や外部要因が不足している場合に顕著です。低時間足では、低時間足では、ローソク足の重なりやヒゲの多さ、差し引きの値動きの小ささとして現れることが多く、高時間足ではコンパクトな保ち合い構造として現れます。重要なのは、コンプレッションが必ずしも「弱さ」や「迷い」を意味するわけではないという点です。むしろ、それは一時的な均衡状態であり、価格の動きが拡張されずに吸収されていることを示します。この状態を認識することで、効率の低い値動きに対する期待値を適切に設定できます。

トランジション状態(液体)

トランジション状態は、構造的制約が緩み始めた状態を表します。ローソク足のレンジは不均一になり、ボラティリティは変動し、価格は直近の極値を一時的に超えることがありますが、持続的なフォローは弱くなります。構造的シグナルは混在し、価格を押さえ込む力は弱まりますが、完全には崩壊していません。

この状態は、価格の動きが一見すると不安定または流動的に見える理由を説明しますが、それはランダム性ではなく、秩序と自由度の中間状態です。トランジションは、制約と自由な値動きのどちらも支配的でない過渡的条件として機能します。

エクスパンション状態(気体)

エクスパンション状態は、高いボラティリティと広いローソク足レンジによって特徴づけられます。構造的な制約は弱まり、価格は大きく不規則な変動を伴いながら広範囲に推移します。方向性の一貫性は必須ではなく、エクスパンションは「動きの大きさ」を表すものであり、「一貫性」そのものを意味するものではありません。

エクスパンションは継続性やトレンドを直接的に意味するものではなく、内部エネルギーの増大が広範な価格変動として表現されている状態を示します。これはあくまで確定済みローソク足に基づいて評価されます。

トレンドという構造的条件

トレンドは以下のいずれかの構造が形成されることで識別されます。

  • 高値と安値が切り上がる
  • 高値と安値が切り下がる

これに加えて、終値において一貫した方向性バイアスが伴います。市場はエクスパンション状態であっても安定したトレンドを持たない場合があり、逆に比較的低ボラティリティでもトレンドを維持する場合があります。そのため、トレンドはボラティリティベースのアナロジーとは独立して評価されます。この枠組みにより、予測ではなく構造的コンテキストとして方向性を補完します。

市場状態の認識の重要性

市場状態を理解することで、価格挙動をコンテキストに基づいて解釈できるようになります。同じ構造的特徴であっても、市場がコンプレッション、トランジション、エクスパンション、トレンドのいずれにあるかによって、その意味は変化します。確定済みローソク足データに基づいて現在の状態を分類することで、分析はより一貫性のある論理構造を持つようになります。このフレームワークはエントリーや予測ではなく、観測と分類に焦点を当てており、情報解釈のための中立的な基盤を提供します。



MQL5での実装

概念的な枠組みが確立されたことで、次の段階は市場状態分類を具体的かつ信頼性の高いMQL5実装へと落とし込むことになります。本モジュールはトレードを実行しないエキスパートアドバイザー(EA)として設計されており、その目的はあくまで確定済みローソク足の価格挙動を観察し、現在の市場状態を分類し、そのコンテキストをチャート上に可視化することにあります。注文は出されず、シグナルも提示されず、将来を予測する仮定もおこなわれません。本EAは純粋に分析レイヤーとして機能します。

アーキテクチャの観点から見ると、本実装は体系的で可読性が高く、拡張しやすい構造を維持するよう設計されています。すべてのロジックを単一の実行ループに集約するのではなく、責務を明確に分離しています。実際の動作として、このEAは以下の4つのコアタスクを中心に構成されます。

  • 確定済みローソク足のサンプリングおよびゲーティング
  • スイング構造の抽出
  • 市場状態の分類
  • チャートベースの可視化

このアーキテクチャ上の分離は意図的なものです。特徴量抽出、分類ロジック、可視化処理を分離することで、実装は検証、デバッグ、拡張が容易になります。可視表現の変更は分析結果に影響を与えず、分類ルールの調整も実行フローを変更することなくおこなうことができます。この構造は、圧縮性よりも明確性と再現性を優先するプロフェッショナルな分析システム設計を反映しています。責務の分離により、分析上の判断は表示層から独立し、分類器そのものを純粋に評価できる状態が保たれます。

確定済みローソク足評価

まず最初に、このEAにおけるすべての計算は厳格な確定済みローソク足チェックによってゲートされます。各ティックごとに、EAはバーインデックス1のタイムスタンプを確認します。これは直近で確定したローソク足を示します。このタイムスタンプが前回ティック時点から変化していない場合、処理は即座に停止します。

新しいローソク足が完全に確定した場合のみ、EAはレンジの再計算、構造評価、市場状態の分類、およびチャートオブジェクトの更新を実行します。この設計により、非リペイント性が保証されます。また、履歴再生とライブ環境の動作が同一になります。いずれも確定済みデータのみを使用するためです。パフォーマンスの観点からも、この設計はCPU使用率を安定させます。分類器はティックごとではなくバーごとに一度のみ実行されるためです。

void OnTick()
{
   // 1. Closed-candle gating (non-repainting core)
   datetime closed=iTime(_Symbol,_Period,1);
   if(closed==0 || closed==g_lastClosedBar) return;
   g_lastClosedBar=closed;

   // 2. Feature extraction + classification
   double avgR,lastR,lastCLV,meanCLV,swingScore,recentAvg,prevAvg;
   ENUM_MARKET_STATE newState =
      ClassifyState(avgR,lastR,lastCLV,meanCLV,
                    swingScore,recentAvg,prevAvg);

   // 3. State transition handling
   DrawStateHistory(g_state,newState);
   g_prevState=g_state;
   g_state=newState;

   // 4. Visualization layer
   DrawSwingDots();
   DrawActiveLabels();
   DrawCompressionBox();
   DrawInfoLines();
}

この構造により、特徴量抽出、状態分類、およびチャート描画は、確定済みの各ローソク足ごとに正確に1回だけ実行され、決定論的かつ非リペイントの動作が維持されます。

入力と設定可能な動作

実行モデルが定義されたことで、EAは感度、閾値、および視覚的出力を制御する一連の入力パラメータを公開します。これらの入力は概念的にグループ化されており、挙動ロジックと表示設定が明確に分離されるよう設計されています。

input int    InpLookbackBars     = 60;
input int    InpTrendBars        = 20;
input int    InpCompressionBars = 16;
input int    InpSwingLeftRight  = 3;

input double InpRangeShrinkRatio = 0.70;
input double InpExpansionMult   = 1.80;
input double InpCLVStrong       = 0.60;

ルックバックおよび感度入力

これらのパラメータは、どれだけの過去データが分類器の計測に寄与するかを制御します。

  • InpLookbackBarsは、平均ローソク足レンジを計算するための基準ウィンドウを定義します。
  • InpTrendBarsは、トレンド検出に用いられる平均CLVバイアスの計算に寄与する確定済みローソク足の本数を指定します。
  • InpCompressionBarsは、最近のレンジ収縮を比較するためのウィンドウ長を決定します。
  • InpSwingLeftRightは、スイングハイおよびスイングローの検出の厳密さを制御します。

閾値入力

閾値は、分類器が各市場状態をどの程度積極的に識別するかを決定します。

  • InpRangeShrinkRatioは、コンプレッションと判定するために、最近の平均レンジが前ウィンドウと比較してどの程度縮小している必要があるかを定義します。
  • InpExpansionMultは、エクスパンションと判定するために、直近ローソク足のレンジが基準平均と比較してどの程度大きい必要があるかを指定します。
  • InpCLVStrongは、広いレンジを持つローソク足のうち、終値の方向性が明確なもののみをエクスパンションとして認識するためのフィルタです。
  • InpTrendBiasCLVおよびInpTrendMinSwingScoreは、トレンド状態として認識するために必要な最小方向バイアス(終値ベース)および構造的一貫性を定義します。

可視化トグル

各種の可視要素(スイングドット、アクティブ構造ラベル、コンプレッションボックス、状態履歴ブロック、スタック型情報パネルなど)は個別に有効と無効を切り替えることができます。これにより、分析エンジン自体のロジックは固定したまま、チャート上の表示を異なるレイアウト要件に適応させることが可能になります。

分類器で使用されるプライスアクション特徴量

分類器の中心には、確定済みローソク足のみから計算されるシンプルな価格派生特徴量の集合があります。これらの指標は意図的に単純かつ透明性が高く設計されており、ロジックの監査および解釈を容易にします。

ローソク足レンジ

ローソク足レンジは、各確定済みローソク足の高値と安値の差として計算されます。関連する2種類のレンジ指標が維持されます。

  • 基準平均レンジ(InpLookbackBars期間で計算)
  • コンプレッション比較用レンジ(最近の平均レンジと同じ長さの直前ウィンドウを比較)
double CandleRange(int shift)
{
   return iHigh(_Symbol, _Period, shift)
        - iLow (_Symbol, _Period, shift);
}

double AvgRange(int start, int count)
{
   double sum = 0;
   int n = 0;

   for(int i = start; i < start + count && i < Bars(_Symbol, _Period); i++)
   {
      double r = CandleRange(i);
      if(r > 0)
      {
         sum += r;
         n++;
      }
   }
   return (n > 0 ? sum / n : 0);
}

この二重アプローチにより、EAは固定ポイントやピップスの閾値に依存することなく、相対的な収縮と異常な拡大の両方を検出できます。

終値位置値(CLV)

終値位置値(CLV)は、ローソク足の終値がそのレンジ内のどの位置にあるかを測定する指標であり、以下のように計算されます。

CLV = (2 × 終値 − 高値 − 安値) / (高値 − 安値)

double CandleCLV(int shift)
{
   double h = iHigh (_Symbol, _Period, shift);
   double l = iLow  (_Symbol, _Period, shift);
   double c = iClose(_Symbol, _Period, shift);

   if(h <= l)
      return 0.0;

   return (2.0 * c - h - l) / (h - l);
}

この実装において、CLVは2つの記述的役割を担います。第一に、直近の確定ローソク足の絶対CLVはエクスパンションの強度フィルターとして機能し、レンジの広いローソク足であっても終値が中間付近にある場合に誤分類されることを防ぎます。第二に、短期ウィンドウにおける平均CLVは、トレンド構造を評価する際に用いられる方向性バイアスの指標として機能します。CLVはあくまで構造的記述子として扱われます。

スイング構造と構造スコアリング

スイングハイおよびスイングローは、InpSwingLeftRightによって制御される左右対称の比較ロジックを用いて検出されます。EAは制約されたスキャンウィンドウ内で、直近2つのスイングハイおよび直近2つのスイングローを特定します。

bool IsSwingHigh(int shift, int lr)
{
   double mid = iHigh(_Symbol, _Period, shift);

   for(int i = 1; i <= lr; i++)
      if(mid <= iHigh(_Symbol, _Period, shift + i) ||
         mid <= iHigh(_Symbol, _Period, shift - i))
         return false;

   return true;
}

bool IsSwingLow(int shift, int lr)
{
   double mid = iLow(_Symbol, _Period, shift);

   for(int i = 1; i <= lr; i++)
      if(mid >= iLow(_Symbol, _Period, shift + i) ||
         mid >= iLow(_Symbol, _Period, shift - i))
         return false;

   return true;
}

これら4つのポイントから、コンパクトなスイングスコアが導出されます。これは、高値および安値の両方について、直近のスイングとその一つ前のスイングを比較することで計算されます。構造が上方向に段階的に進行している場合にはスコアが増加し、下方向に進行している場合にはスコアが減少します。このスコアは、変動の大きさやモメンタムを推定するためのものではなく、構造が一貫して同一方向に整合しているかどうかを判断するためだけに使用されます。

int Sign(double v)
{
   if(v > 0) return 1;
   if(v < 0) return -1;
   return 0;
}

double ComputeSwingScore(int prevHigh, int lastHigh,
                         int prevLow,  int lastLow)
{
   double score = 0;
   score += Sign(iHigh(_Symbol, _Period, lastHigh)
               - iHigh(_Symbol, _Period, prevHigh));
   score += Sign(iLow (_Symbol, _Period, lastLow)
               - iLow (_Symbol, _Period, prevLow));
   return score;
}

状態モデルと分類階層

基礎となる特徴量が計算された後、EAは列挙型を用いて市場状態を評価します。この列挙には以下の4つの値が定義されています。

  • トレンド
  • コンプレッション
  • エクスパンション
  • トランジション

分類ロジックは、曖昧な重複を避けるために意図的に階層構造として設計されています。評価は以下の順序で実行されます。

  1. エクスパンション
  2. コンプレッション
  3. トレンド
  4. トランジション

ENUM_MARKET_STATE ClassifyState(double avgRange,
                                double lastRange,
                                double lastCLV,
                                double recentAvg,
                                double prevAvg,
                                double meanCLV,
                                double swingScore)
{
   // Expansion: abnormal range with decisive close
   if(lastRange >= avgRange * InpExpansionMult &&
      MathAbs(lastCLV) >= InpCLVStrong)
      return STATE_EXPANSION;

   // Compression: relative contraction in recent volatility
   if(prevAvg > 0 &&
      recentAvg <= prevAvg * InpRangeShrinkRatio)
      return STATE_COMPRESSION;

   // Trend: agreement between structure and directional close bias
   if(MathAbs(meanCLV) >= InpTrendBiasCLV &&
      MathAbs(swingScore) >= InpTrendMinSwingScore)
      return STATE_TREND;

   // Transition: mixed or intermediate behavior
   return STATE_TRANSITION;
}

この順序は、値動きの自由度という実務的な重要性を反映しています。突発的なエクスパンションは即座に認識されるべきであり、一方でトレンドは、コンプレッションやエクスパンションが支配的でない場合にのみ評価されます。

エクスパンション条件

エクスパンションは、直近の確定ローソク足が異常なレンジと明確な終値挙動の両方を示す場合に識別されます。

  • 直近ローソク足のレンジが、基準平均レンジをInpExpansionMult倍以上上回る
  • そのローソク足の絶対CLVがInpCLVStrong以上を満たす

この組み合わせにより、単にレンジが広いだけで方向性のないローソク足ではなく、「実質的な運動エネルギーの解放」としてのエクスパンションが保証されます。

コンプレッション条件

コンプレッションは、直近のボラティリティがその前のウィンドウと比較して収縮している場合に識別されます。

recentAvg ≤ prevAvg × InpRangeShrinkRatio

この比較は相対的であるため、特定の値幅やピップスに依存せず、シンボルや時間足を問わず市場の直近挙動に対して自然に適応します。

トレンド条件

トレンドはボラティリティ状態とは独立して評価され、構造と終値挙動の一致を必要とします。

  • 平均CLVの絶対値がInpTrendBiasCLV以上である
  • スイング構造スコアの絶対値がInpTrendMinSwingScore以上である

この条件により、単なる価格変動のみからトレンドを推定することを防ぎ、基礎構造に方向的一貫性が存在する場合のみトレンドとして認識されます。

トランジション条件

上記いずれの条件にも該当しない場合、分類器はトランジションを返します。トランジションは混合的または中間的な市場挙動を表すものであり、エラーや不確実性ではなく、独立した有効な状態として扱われます。

チャート可視化レイヤー

分類が完了すると、EAは一連のオプション的な可視要素を通じてチャート上にコンテキストを描画します。これらのビジュアルは、新しいローソク足が完全に確定した後に、OnTick()ハンドラ内で順次呼び出されます。このアプローチにより実行フローは明示的に保たれ、分析に不要な追加抽象レイヤーの導入を回避できます。

各可視化ルーチンは対応する入力フラグによって制御されており、個別のコンポーネントを有効化または無効化しても、基礎となる分類ロジックには影響しません。

  • スイングドットは検出されたスイングハイおよびローを示します。
  • アクティブ構造ラベルは、直近スイングにおけるHH/HLまたはLH/LLの関係を表示します。
  • コンプレッションボックスは、最近のコンプレッションウィンドウで占有された価格領域を可視化します。
  • 状態履歴ブロックは、状態遷移のタイムラインを薄い背景として表示します。
  • スタック型情報パネルは、状態、構造、ボラティリティ指標を縦方向に整理して読みやすく提示します。

// Chart visualization executed after state update
DrawSwingDots();
DrawActiveLabels();
DrawCompressionBox();
DrawInfoLines();

すべての可視コンポーネントは入力パラメータによって制御されており、それぞれ独立して無効化することが可能です。

ライフサイクル動作とクリーンアップ

初期化時、EAは接頭辞ベースのクリーンアップルーチンを用いて、過去に作成されたすべてのオブジェクトを削除します。同様のクリーンアップ処理は初期化解除時にも実行され、再コンパイル後や削除後にラベルや矩形などのオブジェクトがチャート上に残留する(オーファン化する)ことを防ぎます。

void DeleteByPrefix(string prefix)
{
   for(int i = ObjectsTotal(0) - 1; i >= 0; i--)
   {
      string name = ObjectName(0, i);
      if(StringFind(name, prefix) == 0)
         ObjectDelete(0, name);
   }
}

実装上の安定性に関する注意事項

最後に、いくつかの実装上の選択により、システムの安定性と再現性が強化されています。

  • すべての計算は標準的な価格系列関数に依存しています。
  • すべてのロジックは確定済みローソク足のみを対象として動作します。
  • 注文、アラート、トレード指示は一切生成されません。
  • 本EAは、より広範なプライスアクションツールキットの中で説明的、分析的なレイヤーとして機能します。



テスト

本EAのテストは、パフォーマンス指標ではなく、挙動の一貫性に重点を置いて実施されました。アルゴリズムが過去データ上でどのように振る舞うかを検証するためにストラテジーテスターで評価し、その後、リアルタイムチャート上で観察することで、実際のローソク足形成中における視覚的安定性を確認しました。特に、状態ラベル、背景領域、情報テキストがローソク足確定後にのみ更新されることに重点を置き、ヒストリカル環境とライブ環境の間で同一の挙動が維持されるよう検証しています。Market State Classifierは、MetaTraderのストラテジーテスター(ビジュアルモード)およびライブチャート観察の両方を用いて評価されました。テストの焦点は、アルゴリズム的な正確性、非リペイント保証、および視覚的一貫性にあります。目的は、EAが体系的に動作し、ヒストリカル環境とライブ環境の両方で安定したコンテキスト情報を提示できることを確認することでした。

ストラテジーテスターにおける可視化

ストラテジーテスターのビジュアルモードでは、EAはヒストリカルデータ上でローソク足ごとに逐次再生されます。市場状態ラベル、構造アノテーション、コンプレッションボックス、およびボラティリティ指標は、各ローソク足が完全に確定した後にのみ更新されるため、すべてのロジックが確定バーに基づいていることが確認できます。

状態遷移は繰り返しテストにおいても一貫したタイムスタンプで発生しました。コンプレッションゾーンはボラティリティ低下期間と整合し、エクスパンション状態は異常なレンジ拡大と明確な終値条件が満たされた場合にのみ出現し、トランジション状態は中間条件を反映して事後修正なく遷移しました。スイングドットおよび構造ラベル(HH、HL、LH、LL)は十分な確定条件が揃った場合にのみ描画され、一度描画された後は固定されます。

ストラテジーテスターの可視化(XAUUSD H1)

この挙動は、ヒストリカル環境とライブ環境の両モードが同一の判定フローを通ることを示しており、これは非常に重要な特性です。

ライブチャートにおける動作

ライブチャートにおいても、本EAはヒストリカルテストと同一の挙動を示しました。スタック型情報パネルは各ローソク足の確定後に一度だけ更新され、現在の市場状態、構造的バイアス、およびボラティリティ指標を反映します。この更新はフリッカーやリビジョンを伴わず、安定した表示が維持されます。コンプレッションボックスはボラティリティ条件の変化に応じてリアルタイムに拡大・縮小し、状態履歴ブロックは過去の分類結果を控えめな背景表示として記録します。


ライブチャート(EURUSD M5)

スイング構造ラベルは、新たに確定したスイングが形成された場合にのみ更新され、それ以前の構造ラベルが事後的に修正されることはありません。異なる銘柄および時間足においても、分類器はボラティリティ状態、構造的条件、および視覚表現を明確に分離したまま一貫して動作します。

検証結果

両方のテスト環境において、以下の特性が一貫して確認されました。

  • 市場状態分類はルールベースであり、非リペイントである
  • 一度描画された可視要素は安定して維持される
  • ヒストリカルとライブの挙動は同一である
  • 実行ロジックは一切含まれない

これらの結果は、本市場状態分類器が意図通りに機能していることを裏付けています。そのため、本モジュールは、裁量的またはシステマティックな戦略を適用する前段階として、市場状態の把握が必要となるプライスアクション分析ワークフローへの統合に適しています。



結論

本記事では、プライスアクション分析ツールキットの一部として開発されたMQL5による市場状態分類モジュールの設計および実装を提示しました。本モジュールの目的は、任意の時点において価格がどのように振る舞っているかを記述するためのフレームワークを提供することにあります。相対的なボラティリティ分析、構造的スイング評価、および階層的分類モデルを組み合わせることで、このEAはインジケーター、最適化、あるいは売買ロジックに依存することなく、コンプレッション、トランジション、エクスパンション、トレンドといった状態を識別します。 

このツールは結果としてコンテキスト層として機能し、価格が制約されているのか、流動的なのか、あるいは自由に拡張しているのか、そして方向性の構造が存在しているのかを明確化します。このように状態と方向性を分離する設計は、規律ある分析を強化し、市場環境が整っていない状況におけるプライスアクションの誤解釈を防ぐのに寄与します。他のツールキット構成要素と同様に、本モジュールは意図的に記述的であり、その価値は状況認識を向上させ、裁量的またはシステマティックな意思決定のための安定した分析基盤を提供する点にあります。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/20996

添付されたファイル |
最後のコメント | ディスカッションに移動 (2)
georgi GEORGIEV
georgi GEORGIEV | 29 1月 2026 において 09:39
賢く選ぶ
Christian Paul Anasco
Christian Paul Anasco | 30 1月 2026 において 01:09
とても興味深い記事だ。市場の状態を見つけるのに何がベストなアプローチなのか、ずっと試していた。私のボットにこれを追加する際には、またこの記事に戻るつもりだ。
EAのサンプル EAのサンプル
一般的なMACDを使ったEAを例として、MQL4開発の原則を紹介します。
MQL5取引ツール(第13回):グラフパネルと統計パネルを備えたCCanvasベースの価格ダッシュボードの実装 MQL5取引ツール(第13回):グラフパネルと統計パネルを備えたCCanvasベースの価格ダッシュボードの実装
MQL5においてCCanvasクラスを使用してインタラクティブなパネルを構築し、最近の価格グラフや口座統計を可視化する「CCanvasベースの価格ダッシュボード」を開発します。本システムは、背景画像、フォグ効果、グラデーション塗りつぶしにも対応しています。さらに、ドラッグ&リサイズ機能をマウスイベント処理で実装し、テーマ切り替え(ダーク/ライトモード)による動的な色変更、最小化/最大化コントロールも備え、チャート領域を効率的に管理できる設計となっています。
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法 エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
この記事では、MT4において複数のEAの衝突をさける方法を扱います。ターミナルの操作、MQL4の基本的な使い方がわかる人にとって、役に立つでしょう。
MQL5におけるイベント駆動型アーキテクチャ:エキスパートアドバイザーを本格的なトレードシステムに進化させる方法 MQL5におけるイベント駆動型アーキテクチャ:エキスパートアドバイザーを本格的なトレードシステムに進化させる方法
MQL5におけるイベント駆動アーキテクチャについて解説し、モノリシックなOnTickモデルから分散処理への移行を取り上げます。定義済みイベントとカスタムイベント、サービス、およびプログラム間のメッセージングについて説明するとともに、アーキテクチャ上でよく見られる典型的な誤りについても考察します。また、実践的な例を通じて、インジケータとEAの連携をどのように構成すれば、負荷を軽減し、可読性を向上させ、保守を容易にできるのかを示します。