【移植#23】チャートの窓幅をpipsで測る — 前足終値と次足始値の差を可視化¶

この記事の3行まとめ
- 前足の終値と次足の始値を比較し、上窓と下窓をpips単位で表示します
- 直近1000本で上窓16件・下窓4件を検査し、最大13.7pipsの差を確認しました
- チャートの窓は価格配信の違いを見る材料ですが、注文の滑りや約定品質そのものではありません
今回の原典は「同じニュースでも窓幅が違う」¶
投稿日順で次に当たる2010年1月10日の記事では、雇用統計時のドル円チャートを3社で比較し、隣接する2本のバーにできた窓の大きさが紹介されていました。
原典に記載された値は次のとおりです。
| 比較対象 | 前足終値と次足始値の差 |
|---|---|
| A社 | 32.7pips |
| B社 | 86.7pips |
| C社 | 11.0pips |
同じ重要指標の時間帯でも、配信されたローソク足の形が大きく異なる例です。ただし、原典も「このチャートだけで業者の良し悪しを断定するものではない」と慎重に書いています。本来の取引品質には、指値がどの価格で約定したか、決済注文が通ったか、スプレッドがどの程度広がったかなども関係します。
今回のMQL5版も、ニュース売買の自動化には広げません。まずはチャート上の窓を同じ定義で測り、あとから比較できるようにする表示専用ツールへ絞ります。
窓幅の定義¶
今回測るのは、現在バーの始値と、その1本前の終値の差です。
| 状態 | 条件 | 表示 |
|---|---|---|
| 上窓 | 現在足始値 > 前足終値 | 緑の上向き矢印と正のpips値 |
| 下窓 | 現在足始値 < 前足終値 | 赤の下向き矢印と負のpips値 |
| 閾値未満 | 差の絶対値が設定値未満 | 表示しない |
3桁・5桁のFX銘柄では、1pipを_Point × 10として換算します。2桁・4桁では_Pointをそのまま使います。
画像は小さな窓も確認できるよう、検証時の最小窓幅を0.5pipsにしています。配布版の初期値は2.0pipsです。
MQL5で矢印と数値を重ねる¶
上窓と下窓の位置は、MQL5のDRAW_ARROWを使う2本のインジケーターバッファへ格納します。
| バッファ | 用途 | 空のバー |
|---|---|---|
| 0 | 上窓の緑矢印 | EMPTY_VALUE |
| 1 | 下窓の赤矢印 | EMPTY_VALUE |
窓幅の文字は、時刻と価格を1点ずつ指定できるOBJ_TEXTで表示します。たとえば+3.3 pipsなら上窓、-3.1 pipsなら下窓です。
矢印はローソク足から4pips離して置き、文字はさらに外側へ配置しています。価格そのものを隠さず、どのバーの窓なのかを追える距離にしました。
MQL5実装で確認した安全ポイント¶
配列の時系列方向をそろえる¶
価格配列と矢印バッファを古いバーから新しいバーへ進む向きに統一しています。open[i]と比較するのは必ずclose[i - 1]です。先頭バーは比較相手がないため、計算を1番から始めます。
最新の発生分から上限まで表示する¶
閾値を小さくすると、過去の小さな差まで大量に見つかります。配布版は検査本数とラベル数に上限を持ち、最新の窓から順に表示します。初期値は直近2000本、最大30ラベルです。
新しいバーが来たときだけ再構築する¶
窓幅に使う現在足始値は、バーが始まったあと変わりません。同じバーのティックごとに過去2000本を再走査せず、新しいバーへ切り替わったときにだけ矢印とラベルを作り直します。
自分の文字オブジェクトだけを削除する¶
窓幅ラベルには固有の接頭辞を付けています。再計算と取り外しで削除するのは、その接頭辞を持つ文字だけです。読者がチャートへ追加した線やメモには触れません。
売買処理を持たない¶
このインジケーターは窓幅を測るだけです。注文送信、ニュース時刻の取得、指値の設置、ポジション決済は行いません。
専用MT5での動作確認¶
売買を行わない専用テストMT5で本体と検証EAをコンパイルし、矢印バッファを元のOHLCから再計算して照合しました。
| 項目 | 設定・結果 |
|---|---|
| 通貨ペア・時間足 | EURUSD・1時間足 |
| 検査本数 | 直近1000本 |
| 検証時の最小窓幅 | 0.5pips |
| 上窓 | 16件 |
| 下窓 | 4件 |
| 表示ラベル | 20件 |
| 最大窓幅 | 13.7pips |
| マーカー位置の最大誤差 | 0.0000ポイント |
| 本体コンパイル | 0 errors / 0 warnings |
| 検証用コンパイル | 0 errors / 0 warnings |
| キャプチャ | 成功、エラー0 |
画像では緑が上窓、赤が下窓です。表示上限を20件にしたため、直近の検出結果が優先されています。
パラメータ¶
| パラメータ | 初期値 | 説明 |
|---|---|---|
InpMinGapPips | 2.0 | 表示する最小窓幅 |
InpBarsToScan | 2000 | 検査する直近バー数 |
InpMaxLabels | 30 | 表示するラベルの上限 |
InpMarkerOffsetPips | 4.0 | 矢印をローソク足から離す距離 |
InpLabelColor | Gold | pipsラベルの色 |
InpFontSize | 8 | ラベル文字サイズ |
日足の週明け窓だけを見たい場合は閾値を大きくし、細かな価格配信差まで調べたい場合は小さくします。閾値を下げるほど、ノイズも増える点には注意してください。
ダウンロード¶
23_Bar_Gap_Marker_v1_00.mq5 をダウンロード
MT5のIndicatorsへ保存してコンパイルし、確認したいチャートへ適用してください。
ロジック評価の結論¶
原典は、同じ重要指標の時間帯でも業者ごとのローソク足が大きく違い得ることを、具体的な窓幅で示していました。この違いを感覚だけで比べず、同じ式で数値化する点に今回の移植価値があります。
一方、窓幅が小さいから注文が有利に約定する、大きいから必ず不利になる、とは限りません。チャートは配信された価格の記録であり、自分の注文に対する約定価格、注文量、遅延、リジェクト、スプレッドとは別のデータです。
実際に業者や口座を比較する場合は、窓幅に加えて注文ログと約定ログも保存し、同じ時刻・同じ注文条件で照合する必要があります。このインジケーターは、その調査の入口としてチャート上の差を見つけるための道具です。
前後の記事¶
前: 【移植#22】ダブルゼロを価格タグで意識する — 水平線を増やさず節目を表示
次: 【移植#24】LWMA版MACDのクロスをチャートへ表示する — 確定足だけに矢印を出す