MT5のエキスパートアドバイザーはどのように計算されるのか:数式、入力、必要データ
直接回答:MT5のEAにおける「計算」とはどういう意味か
MT5のエキスパートアドバイザー(EA)は、1つの固定された、プラットフォーム全体に共通する数学的な数式で「計算」されるわけではありません。代わりに、EAの挙動はEAのプログラム(あなたの戦略ロジック)をステップごとに実行することで生み出されます。各ステップでは、次のような新しい判断(たとえば注文を出すタイミング)を計算します。
- その時点でEAが利用できる市場データ(過去のバーおよび/または到来するティック)
- EAの入力パラメータ(あなたが設定する数値)
- EAの内部状態(実行の間で保持される変数)
- インジケーター、リスクロジック、注文処理のためにあなたがコードしたルール
したがって、「MT5のエキスパートアドバイザーはどのように計算されるのか?」への最適な答えは、EAは受信したデータに対してそのコードを実行し、パラメータと状態を使ってシグナルと注文リクエストを生成することで「計算」される、です。
メカニズム:EA内部の計算パイプライン
EAを繰り返しループとして考えてください。正確なループはプログラムの作り方によって異なりますが、典型的な教育用のモデルは次のようになります。
- データ取得
- ヒストリカルバー:時間の経過にわたって値を計算するために使う、OHLCVスタイルのデータ。
- ティック:イベント駆動ロジックに使う、価格更新のストリーミング。
- EAは、新しいティックに反応するのか、新しいバーに反応するのか、あるいは両方に反応するように書かれているかによって、どちらか一方または両方を処理します。
- インジケーターのような計算(使用する場合) EAがインジケーターを使うなら、移動平均、RSIのようなオシレーター、あるいはカスタム変換といった関数を計算しています。これらは、入力系列に対する数学的操作です(たとえば、直近N本の終値)。
一般形は次のとおりです。
- EAが市場データから時系列 x(t) を作る(例:x(t)=バー時刻tにおける終値)。
- その後、あるルールに基づいてインジケーター値 I(t) を計算する(例:窓(ウィンドウ)付き平均、または再帰)。
- 意思決定ロジック EAは、計算した値とパラメータを条件に組み合わせます。汎用的な例のパターンは次のとおりです。
- 条件 C(parameters, I(t), EA_state) が真なら → アクションを準備する。
- そうでなければ → 何もしない、または状態を更新する。
ここで EA_state は、EAが以前に保持している値を意味します(例:すでにポジションを持っているかどうか、連続イベントを追跡するカウンターなど)。
- 注文サイズ計算とリクエスト構築 EAが注文を送る場合、EAは取引関連の入力と制約を使って「計算」し、リクエストを作成します。これは一般に次を含みます。
- 注文サイド(買い/売り)
- ボリューム(ロットサイズ)。多くの場合、パラメータおよび/またはリスクに基づくサイズ計算ルールから導かれます
- ストップロス / テイクプロフィットの水準(コードが設定する場合)
- 許容スリッページ、または価格参照(「希望する価格」を実際の約定にどうマッピングするか)
重要なのは次を分けることです。
- EAの内部計算(パラメータとデータに基づく純粋な数学)
- ブローカー/執行結果(注文が実際の市場条件でどう約定するか)
- 約定後の状態更新 注文が受理された、または約定した(あるいは拒否された/部分約定だった)後、EAは内部変数を更新します。その状態が、後続の計算に影響します。
補足:シンプルな普遍的「数式」(概念的、製品固有ではない)
EAは異なるため、常に当てはまる単一の数値方程式はありません。しかし、どんなEA設計にも合う概念的な数式として次を使えます。
EA_output(t) = Logic(parameters, Market_data(t), EA_state(t))
ここで:
- EA_output(t) は、時刻tにEAが生成する意思決定やリクエストを表します。
- Market_data(t) は、EAが時刻tで読み取る価格系列のことです。
- EA_state(t) は、EAの現在の記憶(メモリ)です。
「どう計算されているか」を「検証」したいなら、EAコードを確認し、各変数をこれらの入力のどれに対応させるかをマッピングします。
証拠または例:実際の計算経路を追跡する(前提を明示)
以下は、EAの計算がどのように追跡できるかを示す教育用の例です。これは特定のEAではなく、テンプレートです。
前提:
- EAは新しいバーごとに動作する。
- 直近の N 本の終値の窓付き平均を計算する。
- 閾値 K を使い、現在オープンポジションがあるかどうかを保存する。
バー時刻tにおける概念的な手順の例:
- 直近N本のバーそれぞれについて x(t) = 終値を作る。
- I(t) = average(x(t−N+1) … x(t)) を計算する。
- パラメータ(N, K)と状態(hasPosition)を使って条件を計算する:
- C = (I(t) > K) AND (hasPosition == false)
- もしCが真なら:
- パラメータから導かれるボリュームVで買い注文をリクエストする。
- 必要に応じて、他のパラメータ距離からストップロス/テイクプロフィットの水準を計算する。
- 注文が約定した後、hasPosition = true に設定する。
重要な検証の考え方:同じバー履歴から同じ中間数値(たとえば平均I(t))を再現でき、そのうえでコードの条件が同じアクションを評価するかどうかを確認できる、ということです。
制限とリスク:なぜ結果が期待と異なるのか
慎重に計算していても、市場や執行条件が最終的に起こることに影響するため、結果が分岐することがあります。
重要な制限1:「計算」と「執行」の違い
EAは意図したアクションを計算しても、ブローカー/執行レイヤーが実際の約定を決めます。これにより、次のような不確実性が生まれます。
- EAが計算するときと、注文を出すときのスプレッドの違い
- スリッページ(希望した価格と約定した価格の差)
- 注文約定の挙動(全量約定か、部分約定か)
したがって、「EAが計算したもの」が常に「あなたが得たもの」と一致するとは限りません。
重要な制限2:データイベントの欠落または遅延
EAがティック駆動の更新を期待しているのにティックの流れが中断されると、EAは次のようになる可能性があります。
- 評価をスキップする
- 古い価格を使う
- 遅延したロジックをトリガーする
これは、あなたのコードの前提と、環境のイベントタイミングの不一致によって生まれる失敗パターンです。
重要な制限3:パラメータ設定とデータウィンドウの問題
誤った、または一貫しない設定は、計算チェーンを壊す可能性があります。例:
- 利用可能なヒストリカルバーより大きいNを使う(インジケーター値が未定義または初期段階で不安定になる可能性)
- 時間足の不一致(EAはあるバー系列を期待しているのに別のものを読み取る)
- 厳しすぎる条件で、めったに真にならず、EAが「稼働していない」ように見える
重要な制限4:内部ロジックと状態のバグ
EAは内部状態に依存するため、コーディングの誤りによって不正確な判断が起こり得ます。たとえば:
- ポジションクローズ時に状態がリセットされない
- ガードが欠けていて二重注文が送信される
- 部分約定の扱いが状態更新に反映されない
これらは市場レベルの問題ではなく、計算レベルの問題です。
計算を独立に検証する方法
MT5 EAが「どのように計算されるか」を検証するには、再現可能な方法を使えます。
-
入力データソースを特定する EAがティック、新しいバー、または両方を使うのか、そしてどのシンボル/時間足を読み取るのかを確認します。
-
パラメータを列挙する 各入力パラメータを書き出し、それが計算にどこで影響するかを整理します(インジケーターのウィンドウ、閾値、サイズ計算、ストップ距離など)。