【移植#93】チャートスケールをオート/固定で切り替える — キー操作を2つのボタンへ¶

この記事の3行まとめ
- MT4のダイアログ操作や外部キー送信を使わず、MT5標準のチャートAPIで表示幅を切り替えます
- 「Fix scale」はクリック時のBidを中心に指定pips幅を設定し、「Auto scale」は端末の自動調整へ戻します
- Build 6230のEURUSD H1で、固定幅・価格上下限・ボタン表示・Autoへの復帰を確認しました
今回の原典は「チャートスケールをオート/固定に切替える」¶
2010年5月4日の原典は、複数チャートの価格表示幅を固定して監視し、別の時間足を見るときには自動スケールへ戻したい、という相談から始まります。
元記事「チャートスケールをオート/固定に切替えるコード。」を読む
原案では、MT4のF8設定ダイアログを開いて操作する実行ファイルや、キーを送るスクリプトが使われていました。今回は画面上に2つのボタンを置き、MT5が公開しているチャート設定APIから直接切り替えます。
元記事は8通貨の監視にも触れていますが、このインジケーターが操作するのは取り付けたチャート1枚です。複数チャートを切り替える場合は、それぞれに取り付けます。
固定幅をクリック時の価格を中心に設定する¶
「Fix scale」を押すと、現在取得できるBidを中心に表示幅を設定します。初期値は合計200pipsです。たとえばBidが1.10000なら、上下100pipsずつの範囲を指定します。
3桁・5桁のFX銘柄では1pipを_Point × 10、それ以外は_Pointとして扱います。金属など銘柄固有の呼び方に合わせたい場合は、InpPipSizeへ1pipの価格幅を入力できます。
「Auto scale」を押すと固定スケールを解除します。価格範囲の固定と解除には、MT5のChartSetDouble()とChartSetInteger()を使い、CHART_FIXED_MIN、CHART_FIXED_MAX、CHART_SCALEFIXを設定します。チャート設定APIの変更はイベントキューへ登録されてから反映されるため、操作後にチャートを再描画します。各プロパティの説明はチャートプロパティの公式リファレンスで確認できます。
ダウンロードと使い方¶
93_Chart_Scale_Switch_v1_00.mq5 をダウンロード
- ファイルをMT5のIndicatorsフォルダへ置き、MetaEditorでコンパイルします。
- 固定幅を変更する場合は
InpVisibleRangePipsを設定します。初期値は200pipsです。 - 1pipの価格幅を銘柄に合わせて指定する場合は
InpPipSizeへ入力します。0なら桁数から自動判定します。 - インジケーターをチャートへ取り付け、「Fix scale」または「Auto scale」をクリックします。
初期化時にはスケールを変更しません。固定幅への切り替えで現在値が取得できない場合や、範囲が不正な場合は変更を行わず、ログへ理由を出します。
実機検証¶
専用MT5 Build 6230でインジケーターと検証用EAをコンパイルし、どちらも0 errors・0 warningsでした。EURUSD H1では、固定幅200pipsに対してBid 1.13638、下限1.12638、上限1.14638となり、ボタン2個が表示されました。その後、自動スケールへ戻るAPI操作も確認しています。注文・ポジションはどちらも0のままです。
画像は実際のMT5チャートです。画面に表示された固定範囲は検証時点の価格に基づきます。
使える範囲と注意点¶
- 固定範囲は「Fix scale」を押した時点のBidを中心にします。相場に合わせて中心を動かし続ける機能ではありません。再調整したいときは再度クリックします。
- このインジケーターが変更するのは、取り付け先チャートの縦方向の価格スケールです。時間軸のズームや複数チャート一括操作は行いません。
- Auto scaleへ戻した後の表示範囲は端末が決めます。特定の値幅を記憶・再現する機能とは別です。
- FX以外の銘柄では「1pip」の定義が利用者や業者の表示慣習によって異なります。必要に応じて
InpPipSizeを明示してください。
前後の記事¶
- 前の記事: 【移植#92】ZigZagの各スイングをpips/hで表示
- 次の記事: 連載一覧をご覧ください。
あわせて読みたい記事¶
前: 【移植#92】ZigZagの各スイングをpips/hで表示 — 変わる折れ点も見分ける
次: 【移植#94】日足の値幅を年ごとに比べる — ATR(1)で見る相場環境