コンテンツにスキップ

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

EURUSD 1時間足で上窓と下窓を矢印とpips値で表示したMT5画面

この記事の3行まとめ

  • 前足の終値と次足の始値を比較し、上窓と下窓をpips単位で表示します
  • 直近1000本で上窓16件・下窓4件を検査し、最大13.7pipsの差を確認しました
  • チャートの窓は価格配信の違いを見る材料ですが、注文の滑りや約定品質そのものではありません

今回の原典は「同じニュースでも窓幅が違う」

投稿日順で次に当たる2010年1月10日の記事では、雇用統計時のドル円チャートを3社で比較し、隣接する2本のバーにできた窓の大きさが紹介されていました。

元記事「窓の憂鬱。」を読む

原典に記載された値は次のとおりです。

比較対象 前足終値と次足始値の差
A社 32.7pips
B社 86.7pips
C社 11.0pips

同じ重要指標の時間帯でも、配信されたローソク足の形が大きく異なる例です。ただし、原典も「このチャートだけで業者の良し悪しを断定するものではない」と慎重に書いています。本来の取引品質には、指値がどの価格で約定したか、決済注文が通ったか、スプレッドがどの程度広がったかなども関係します。

今回のMQL5版も、ニュース売買の自動化には広げません。まずはチャート上の窓を同じ定義で測り、あとから比較できるようにする表示専用ツールへ絞ります。


窓幅の定義

今回測るのは、現在バーの始値と、その1本前の終値の差です。

Text Only
Gap = Current Open - Previous Close
GapPips = Gap / PipSize
状態 条件 表示
上窓 現在足始値 > 前足終値 緑の上向き矢印と正の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のクロスをチャートへ表示する — 確定足だけに矢印を出す

— SPONSORED —