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

この記事の3行まとめ
- 最新BidまたはAskから指定したpointsだけ離れた水平線を、チャートへ1本表示します
- インスタンスIDを分ければ同じチャートに複数置け、手動で消した線の再生成も選べます
- 専用MT5で異なる3ティックの価格、線の再生成・修復・取り外し時の削除を確認しました
確定足のタグではなく、受信した最新価格の線¶
前回の移植#85は、RCIとStochasticの計算を比べました。今回採用したのは2010年4月24日の「Bidの下にラインを引く。」です。元記事は、Bid・Askから一定幅ずらした水平線を表示するMQL4の短い例を示しています。
移植#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\) とすると、線の価格は次です。
例えば画像の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決済を数える — コメントではなく決済理由を見る