コンテンツにスキップ

【移植#86】Bid・Askから離れた水平線を引く — pointsと複数インスタンスの扱い

EURUSD H1の実チャートにBidより50 points下のピンク線とAskより50 points上の水色線を表示したMT5画面

この記事の3行まとめ

  • 最新BidまたはAskから指定したpointsだけ離れた水平線を、チャートへ1本表示します
  • インスタンスIDを分ければ同じチャートに複数置け、手動で消した線の再生成も選べます
  • 専用MT5で異なる3ティックの価格、線の再生成・修復・取り外し時の削除を確認しました

確定足のタグではなく、受信した最新価格の線

前回の移植#85は、RCIとStochasticの計算を比べました。今回採用したのは2010年4月24日の「Bidの下にラインを引く。」です。元記事は、Bid・Askから一定幅ずらした水平線を表示するMQL4の短い例を示しています。

元記事「Bidの下にラインを引く。」を読む

移植#83のタグは、MAクロスが起きた確定足の終値を過去の時刻へ置くものでした。今回は最新のティックからBidまたはAskを読み、現在の価格から離れた線を更新します。参照する価格の時点も、画面上の役割も異なります。

「5 pips」と「5 points」は同じとは限らない

元記事の入力名はpipsですが、実際の計算はpips * Pointです。Pointはその銘柄の表示価格の最小桁に対応する単位です。たとえば5桁表示のEURUSDなら1 pipは通常10 pointsなので、-5 * Pointは5 pipsではなく0.5 pipに相当します。

今回の入力はInpOffsetPointsと名付け、単位をpointsに固定しました。初期値の-50は、5桁表示のEURUSDではBidより5 pips下です。銘柄や価格桁数によってpipの慣習は変わるので、別銘柄で「50 pointsは必ず5 pips」とは読み替えないでください。

基準価格を \(Q\)、符号付きのオフセットを \(d\)、銘柄のpointを \(P\) とすると、線の価格は次です。

\[ L=Q+dP \]

例えば画像の2本は、ピンクがBid−50 points、水色がAsk+50 pointsです。その間隔は「現在のスプレッド+100 points」になります。2本の距離が変われば、スプレッドも変化した可能性があります。ただし表示に使うのは端末が最後に受信したティックです。市場が止まっていれば線は最後の価格のままです。

同じチャートに2本置いても混ざらないようにする

元記事は、オブジェクト名へ入力値を含めれば異なる設定のインジケーターを複数置けると説明します。しかし、同じ設定を2回追加すれば名前は再び同じです。MT5版ではInpInstanceIdを明示し、チャートIDと組み合わせて水平線オブジェクトの名前を作ります。

入力例 基準 オフセット ID 線
1本目 Bid -50 points A ピンク
2本目 Ask +50 points B 水色

IDは英数字とアンダースコアの1〜12文字です。同じチャートで別の線を加えるときは、IDも変えてください。既に同じ名前のオブジェクトがある場合、後から起動したインジケーターはその線を奪わず初期化を止めます。取り外すときは、自分が作った印が付いた線だけを削除します。

また、元記事は線をinit()だけで作ると、手動で消した後は表示されないと指摘しています。MT5版の既定値は、削除を見つけたら次の更新で再生成します。意図的に手動削除した線をそのまま消しておきたい場合は、InpRecreateWhenDeleted=falseにします。

使い方と入力

86_Bid_Ask_Offset_Line_v1_00.mq5 をダウンロード

MT5のデータフォルダにあるMQL5/Indicatorsへ保存し、MetaEditorでコンパイルしてチャートへ適用します。画像と同じ2本を出すなら、1本目は初期値のBid・-50・ID Aを使い、2本目はAsk・+50・ID B・水色に変更します。

入力 既定値 内容
InpQuoteSide Bid BidかAskの選択
InpOffsetPoints -50 符号付きの値幅。単位はpoints
InpLineColor ピンク 線の色
InpLineStyle / InpLineWidth 実線 / 2 線の見た目
InpInstanceId A 同じチャート内で区別するID
InpRecreateWhenDeleted true 手動削除後に線を戻すか

線はティックの受信時と1秒ごとのタイマーで更新します。タイマーは新しい相場価格を作る機能ではありません。ティックが来なければ最後に受信したBid・Askが基準です。

専用MT5で確かめたこと

MT5 Build 6182、EURUSD H1で、配布インジケーターと独立capture EAをそれぞれ0エラー・0警告でコンパイルしました。検証EAは指標の内部計算を呼ばず、受信ティックと_Pointから2本の期待価格を計算し、水平線の価格プロパティを読みました。

検査 結果
異なるティック時刻でBid−50 / Ask+50を照合 3サンプル一致
2本の間隔 各サンプルでスプレッド+100 pointsと一致
1本目を手動削除 再生成、2本目は残存
再生成を無効にして別の線を手動削除 3秒以上、線は戻らない
1本目を5 pointsずらす 次の更新で期待価格へ修復
2インスタンスを取り外す 所有する2本だけ削除
注文数・ポジション数 変更なし

冒頭画像は検証時のMT5実画面です。ピンクと水色の線はオフセットの目安で、実際のストップ注文ではありません。証拠画像は検証EAが両線の価格一致と復旧を確かめた後に撮影しました。

線から分からないこと

表示線は発注しません。設定した距離で約定できる保証も、損失額を固定する機能もありません。実際の約定には注文方式、スプレッド変化、ブローカーの制約などが関係します。線は価格関係を目で追うための補助として使ってください。

次: 【移植#87】最適化パスごとにSL・TP決済を数える — コメントではなく決済理由を見る

— SPONSORED —