【移植#30】経済指標後60分の値動きを測る — 初動・最大変動・戻りを同じ基準で記録¶

この記事の3行まとめ
- 経済指標後の反応は「動いた印象」ではなく、同じ時間窓と基準価格でそろえて測ります
- 発表直前のM1終値を基準に、5分後・60分後・最大上昇・最大下落・戻りを計算します
- 専用MT5で連続するM1足60本を独立照合し、6項目すべて一致することを確認しました
今回の原典は「指標別の過去統計を見る」¶
投稿日順で次に当たる2010年1月17日の記事では、経済指標ごとの過去反応をまとめたサイトを取り上げ、「指標後に動いてから戻る割合」まで研究する必要性が書かれていました。
当時紹介されていた個別サイトや集計期間を現在の判断材料として再利用するのではなく、今回は考え方を移植します。つまり、発表後の値動きを毎回同じ定義で測り、自分で比較できる形へそろえます。
「大きく動いた」「結局戻った」という表現は、人によって基準が変わります。5分後なのか60分後なのか、高値・安値を見るのか終値を見るのかを固定しなければ、複数回の結果を並べても比較できません。
5つの反応値を固定する¶
公開版インジケーターは、指定した時刻の1分前に確定したM1終値を基準価格にします。その後、次の値を計算します。
| 指標 | 定義 |
|---|---|
| 5分後終値 | 発表時刻を含む5本目のM1終値と基準価格の差 |
| 最大上昇 | 60分間の最高値と基準価格の差 |
| 最大下落 | 基準価格と60分間の最安値の差 |
| 60分後終値 | 60本目のM1終値と基準価格の差 |
| 基準価格へ戻ったか | 5分経過後のM1高値・安値が基準価格の許容帯へ触れたか |
上昇と下落は別々に記録します。たとえば、一度20pips上がったあと基準価格を割った場合でも、「最大上昇20pips」という情報を失いません。
戻り判定の初期許容幅は0.5pipsです。5分の初動を測り終えたあと、M1足の価格範囲が基準価格±0.5pipsと重なればYESにします。
時刻はチャート時間で入力する¶
InpEventTimeには、MT5チャートに表示されている発表時刻を入力します。PCのローカル時刻や日本時間を、そのまま入れるとは限りません。
MQL5の経済カレンダー機能も取引サーバー時間を使います。カレンダーから時刻を書き写す場合は、参照元のタイムゾーンを確認し、チャート時間へそろえる必要があります。
今回の公開版は経済カレンダーAPIを直接呼びません。時刻を手動入力にした理由は、次の2つです。
- どのカレンダーや記録を使ったかを利用者側で選べます。
- 過去のチャートへ同じ時刻を設定し、価格反応だけを再計算できます。
検証画像の2026.07.20 14:00は計算と表示を確かめるためのサンプル時刻で、特定の経済指標発表を示すものではありません。
M1足が60本そろわなければ計算しない¶
価格取得にはCopyRatesを使い、発表時刻から59分後までのM1足を取得します。
datetime last_bar_time = InpEventTime + (InpMeasureMinutes - 1) * 60;
int copied = CopyRates(
_Symbol,
PERIOD_M1,
InpEventTime,
last_bar_time,
event_rates
);
if(copied != InpMeasureMinutes)
return false;
本数だけでなく、先頭と末尾の時刻、隣り合う足が60秒刻みかも確認します。履歴欠損があるのに、近い足で埋めて「60分の結果」として表示しないためです。
発表時刻のM1足が存在するかはiBarShiftの完全一致モードでも確認します。時刻がずれている場合は、近いバーへ自動的に寄せず、入力を直すまで待機します。
終値と最大変動を混ぜない¶
5分後と60分後は、その時点で確定したM1終値を使います。一方、最大上昇と最大下落には、60本の高値・安値を使います。
この2種類は役割が違います。
- 終値差は、その時間を終えた時点で価格がどこに残ったかを示します。
- 最大変動は、途中でどこまで広がったかを示します。
最大上昇だけ見れば勢いが強く見えても、60分後終値が基準価格付近なら、値動きの多くを戻した可能性があります。反対に、最大変動が小さくても終値が一方向へ残る回もあります。
専用MT5での動作確認¶
売買無効の専用テストMT5で、本体インジケーターと検証EAをコンパイルしました。検証EA側でも同じM1足を独立に取得し、6つの出力バッファを照合しています。
| 項目 | 設定・結果 |
|---|---|
| 通貨ペア・表示時間足 | EURUSD・1分足 |
| サンプル時刻 | 2026年7月20日 14:00(チャート時間) |
| 取得したM1足 | 60本、1分刻みを確認 |
| 5分後終値 | +0.2pips |
| 最大上昇 | +9.6pips |
| 最大下落 | -3.0pips |
| 60分後終値 | -1.6pips |
| 5分後以降の基準価格回帰 | あり |
| 本体コンパイル | 0 errors / 0 warnings |
| 検証用コンパイル | 0 errors / 0 warnings |
| キャプチャ | 成功、エラー0 |
この1区間では、途中で基準価格から9.6pips上へ動いたものの、60分後終値は1.6pips下でした。「大きく上がった」と「1時間後に上へ残った」は同じ意味ではないことが分かります。
ただし、これは実装確認用の1サンプルです。経済指標の傾向や売買の優位性を示す結果ではありません。
パラメータ¶
| パラメータ | 初期値 | 説明 |
|---|---|---|
InpEventTime | 2026.07.20 14:00 | 測定開始時刻。チャート時間で指定 |
InpInitialMinutes | 5 | 初動終値を測る分数 |
InpMeasureMinutes | 60 | 最大変動と終了終値を測る分数 |
InpReturnTolerancePips | 0.5 | 基準価格への戻り判定許容幅 |
InpShowPanel | true | チャート左上に結果を表示 |
InpMeasureMinutesは最大1440分です。長い時間窓ほど別の材料が混ざりやすいため、複数イベントを比較するときは同じ設定へそろえてください。
ダウンロード¶
30_News_Reaction_Analyzer_v1_00.mq5 をダウンロード
MT5のIndicatorsへ保存してコンパイルし、チャートへ適用してください。注文機能はなく、確定済みM1データの測定と表示だけを行います。
この結果だけではニュースEAを評価できない¶
M1のOHLCから分かるのは、1分ごとの始値・高値・安値・終値です。発表直後のティック順序、瞬間的なスプレッド拡大、約定拒否、スリッページは再現できません。
そのため、このインジケーターで大きな反応や戻りを見つけても、それだけで自動売買の利益を証明したことにはなりません。原典が注意していたように、ニューストレードは通常時より執行条件の影響を受けやすい分野です。
まずは複数回の発表を同じ時間窓で測り、通貨ペア、指標名、予想差、スプレッドなどの条件を別に記録します。そのうえで、平均だけでなく分布と例外を確認する使い方が適しています。
ロジック評価の結論¶
原典の中心にあったのは、「指標トレードをするなら過去統計まで調べる」という姿勢です。今回のMQL5版では、発表後の初動、最大変動、終了位置、基準価格への戻りを固定した定義で測れるようにしました。
重要なのは、1回の結果を売買ルールに変えることではありません。同じ定義で多くの事例を集め、戻る回と戻らない回の両方を見ることです。このインジケーターは、そのための測定器です。
前後の記事¶
前: 【移植#29】複数のMT5で状態ファイルを共有する — FILE_COMMONで安全に受け渡す
次: 【移植#31】EAのアイデアを実装可能な仕様にする — 8項目の要件チェックをチャート表示