1. ChartGetInteger関数の概要と実務での活用法
MQL5のChartGetIntegerは、指定したチャートの「状態」を整数(long型)で取得するための非常に汎用性の高い関数です。チャートの背景色、表示されているバーの数、ウィンドウのサイズ、グリッドの表示非表示など、視覚的・構造的な情報をプログラム側で把握するために使用されます。
実務での活用シーン:
* GUI(ボタンやパネル)の動配置: チャートの横幅や縦幅(ピクセル単位)を取得し、画面のリサイズに合わせてボタンの位置を自動調整する。
* バックテストとライブ稼働の判別: 特定のチャート設定を確認し、意図しない環境での動作を制限する。
* ユーザー操作の検知: チャートがスクロールされたか、あるいは自動スクロールが有効になっているかを確認し、描画ロジックを最適化する。
初心者の方は「ただの設定値を取得するだけの関数」と思いがちですが、プロの現場では「ユーザーの操作(UI)とロジック(EA)を同期させるための重要なセンサー」として重宝されます。
2. 構文と戻り値
ChartGetIntegerには、戻り値の受け取り方が異なる2つの書式があります。実務ではエラーハンドリングが容易な「2番目の書式(bool型を返す方)」を使うのが一般的です。
書式1:値を直接返す
long ChartGetInteger(
long chart_id, // チャートID(0は現在のチャート)
ENUM_CHART_PROPERTY_INTEGER prop_id, // プロパティID
int sub_window=0 // サブウィンドウ番号
);
書式2:成功可否を返し、値は参照渡しで受け取る(推奨)
bool ChartGetInteger(
long chart_id, // チャートID
ENUM_CHART_PROPERTY_INTEGER prop_id, // プロパティID
int sub_window, // サブウィンドウ番号
long& long_var // 値を受け取る変数
);
- chart_id: 操作対象のチャート。
0を指定すると現在実行中のチャートになります。 - prop_id: 取得したい情報の種類。
CHART_WIDTH_IN_PIXELS(幅)やCHART_BRING_TO_TOP(最前面か)など。 - 戻り値: 書式2の場合、成功すれば
true、失敗すればfalseを返します。
3. 具体的な使い方・実践サンプルコード
以下のコードは、現在のチャートのピクセルサイズを取得し、それに基づいて情報の表示位置を変更する実戦的なサンプルです。
//+------------------------------------------------------------------+
//| チャートのサイズ情報を取得して出力するEA |
//+------------------------------------------------------------------+
void OnTick()
{
long width_px; // 横幅を格納する変数
long height_px; // 縦幅を格納する変数
long first_bar; // チャート上に表示されている最初のバーのインデックス
// 1. チャートの横幅(ピクセル)を取得
if(ChartGetInteger(0, CHART_WIDTH_IN_PIXELS, 0, width_px))
{
Print("チャートの横幅: ", width_px, " px");
}
// 2. チャートの縦幅(ピクセル)を取得
if(ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0, height_px))
{
Print("チャートの縦幅: ", height_px, " px");
}
// 3. チャートに「自動スクロール」が設定されているか確認
long is_autoscroll;
if(ChartGetInteger(0, CHART_AUTOSCROLL, 0, is_autoscroll))
{
string status = (is_autoscroll > 0) ? "ON" : "OFF";
Comment("自動スクロール設定: " + status + "\n" +
"画面サイズ: " + (string)width_px + "x" + (string)height_px);
}
}
このコードをEAとして適用し、チャートの端をドラッグしてサイズを変えると、リアルタイムで取得される数値が変化することが確認できます。
4. 使用上の注意点とよくあるエラー
① 型の取り扱いに注意(long型)
ChartGetIntegerはその名の通り「Integer(整数)」を扱いますが、MQL5内部ではlong型(64ビット整数)として処理されます。int型の変数で受け取ろうとすると、値が大きい場合にデータが溢れたり、コンパイル警告が出たりします。必ずlong型を使用しましょう。
② 表示フラグは 0 or 1
CHART_SHOW_GRID(グリッド表示)などのプロパティは、論理値(true/false)ではなく0または1のlong値として返ってきます。条件分岐で使う際は if(value > 0) のように記述するのが安全です。
③ 非同期処理の罠
チャートのプロパティを変更した直後にChartGetIntegerを呼び出すと、描画更新が間に合わず、変更前の値が返ってくることがあります。確実に最新の状態を取得したい場合は、直前にChartRedraw()を呼ぶなどの工夫が必要な場合があります。
5. 【重要】自動売買における約定スピードと環境の罠
プロの開発者がMQL5で最も神経を使うのは、コードの書き方よりも「実行環境のレイテンシ(遅延)」です。自宅のPCや一般的な光回線でEAを運用する場合、ブローカーのサーバーとの間に物理的な距離があるため、たとえプログラムが完璧でも約定までに数十〜数百ミリ秒の遅延が発生します。
このわずかな遅延は、ボラティリティが高い局面では致命的なスリッページを引き起こし、バックテスト通りの利益を削り取ります。プロレベルの約定スピードを確保するには、ブローカーのデータセンターに近い場所に位置する「専用VPS(仮想専用サーバー)」の導入が不可欠です。24時間安定して稼働し、ミリ秒単位の攻防を制する環境を整えることこそが、自動売買で勝ち残るための最低条件と言えるでしょう。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント