【移植#08】他通貨重ね書き — 時間同期で正確に比較¶

この記事の3行まとめ
- 📈 他通貨ペア(例: EURUSDにUSDJPY)をチャートに重ねて表示
- 🕒
iBarShift(標準関数)を使って時間のズレを正確に補正 - 📏 オートスケーリング機能で、異なる価格帯でもきれいに表示
はじめに¶
今回は、2009年11月25日の記事「他通貨の動きをチャートに上書きするインジケータ。」をMQL5へ移植します。
元記事の概要¶
- 課題: 異なる通貨ペアを重ね合わせて表示(オーバーレイ)する際、単純にバーのインデックス順に描画すると、休日やデータの欠落(サーバー時間の違いなど)によってズレが生じる。
- 解決策: 単純な配列参照ではなく、時間(Time)を基準にして、対応するバーを探し出して描画することで、ピーク(高値・安値)の位置を正確に合わせる。
FAI氏が公開していた CurrencyOverlay.mq4 はこの「ズレ補正」を行うものでした。
MQL5での実装ポイント:iBarShift¶
MQL4には iBarShift という便利な関数があり、「指定した時刻が、現在のチャートで何本前のバーか?」を一発で取得できました。 以前のMQL5では標準搭載されておらず自作する必要がありましたが、現在のMQL5では標準関数として iBarShift が実装されています。
今回は、この標準の iBarShift をそのまま使用して、時刻同期を行います。
この関数を使うことで、「メインチャートのこの時間は、サブチャート(USDJPY等)では何番目のバーか?」を正確に特定できます。
オートスケーリング(縮尺自動調整)¶
もう一つの課題は「価格帯の違い」です。 例えば、EURUSD(1.0500付近) のチャートに USDJPY(150.00付近) をそのまま描画すると、USDJPYの線はずっと上の方に表示され、画面外に出てしまいます。
これを解決するために、「現在画面に表示されている範囲」 の高値・安値を基準にして、縮尺を自動計算する機能を実装しました。
線形変換の計算式¶
\[ OverlayValue = (SubPrice - SubMin) \times \frac{MainMax - MainMin}{SubMax - SubMin} + MainMin \]
MainMax,MainMin: 現在画面で見えているメイン通貨の最高値・最安値SubMax,SubMin: その期間に対応するサブ通貨の最高値・最安値
この計算を OnCalculate 内で行うことで、チャートをスクロールしても常に画面内にきれいに収まるようになります。
ダウンロード¶
作成したインジケータは以下からダウンロードできます。
08_MultiSymbol_Overlay.mq5 をダウンロード
パラメータ¶
- SubSymbol: 重ねて表示したい通貨ペア名(例:
USDJPY,EURUSD,Nikkei225など) - UseAutoScaling:
trueにすると、画面に合わせて自動的に縮尺を調整します。falseの場合は生の価格で描画します(相関が高いペア同士の場合などに使用)。
まとめ¶
- 他通貨をオーバーレイ表示するときは、時間の同期が必須。
- MQL5では
iBarShiftを自作して対応する。 - 異なる価格帯を表示するには、画面範囲に基づいたオートスケーリングが有効。
このインジケータを使えば、「三角裁定」の可視化や、「合成通貨」の動きを確認する際に非常に役立ちます。
参考: サポート・レジスタンス | トレンド相場