1. ChartSetInteger関数の概要と実務での活用法
ChartSetIntegerは、MetaTrader 5(MQL5)において、チャートの見た目や挙動といった「プロパティ」をプログラム側から変更するための非常に重要な関数です。
具体的には、背景色の変更、グリッドの表示/非表示、オートスクロールのON/OFF、さらにはマウスによるドラッグ操作の禁止など、チャートに関するあらゆる数値的な設定(整数型、ブール型、列挙型)を制御できます。
実務での活用シーン:
実務開発において、初心者が最初につまずくのは「チャート設定を手動で変えても、EAを再起動すると元に戻ってしまう」という点です。プロのクオンツエンジニアは、EAの初期化関数(OnInit)内でこの関数を使い、EAのロジックに最適なチャート環境を強制的に構築します。
また、UI(ユーザーインターフェース)を持つEAを開発する際、ボタンをクリックした時にチャートのスクロールを固定したり、特定のイベント時に背景色を変えてアラートを視覚的に伝えるなど、ユーザーエクスペリエンス(UX)の向上にも欠かせません。
2. 構文と戻り値
ChartSetInteger関数には、オーバーロード(引数のパターン)が2つあります。通常は1つ目の形式を多用します。
構文1:基本形式
bool ChartSetInteger(
long chart_id, // チャートID(0は現在のチャート)
int prop_id, // プロパティID(ENUM_CHART_PROPERTY_INTEGER)
long value // 設定する値
);
構文2:サブウィンドウ指定形式
bool ChartSetInteger(
long chart_id, // チャートID
int prop_id, // プロパティID
int sub_window, // サブウィンドウの番号
long value // 設定する値
);
戻り値
- true: 設定に成功した場合。
- false: 設定に失敗した場合。エラーの詳細は
GetLastError()関数で確認できます。
3. 具体的な使い方・実践サンプルコード
以下は、EAが起動した際にチャートのグリッドを消し、オートスクロールを有効にし、さらに独自の背景色を設定する実践的なコード例です。
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// 現在のチャートIDを取得(0でも代用可能)
long currentChartID = ChartID();
// 1. グリッド(網目)を非表示にする
// 第二引数には列挙型 ENUM_CHART_PROPERTY_INTEGER を指定
if(!ChartSetInteger(currentChartID, CHART_SHOW_GRID, false))
{
Print("グリッドの設定に失敗しました。");
}
// 2. チャートのオートスクロールを有効にする
ChartSetInteger(currentChartID, CHART_AUTOSCROLL, true);
// 3. チャートの右端に余白を作る(右シフト)
ChartSetInteger(currentChartID, CHART_SHIFT, true);
// 4. 背景色を暗い紺色に変更する
// 色指定は color型を long型にキャストして渡す
ChartSetInteger(currentChartID, CHART_COLOR_BACKGROUND, clrDarkSlateBlue);
// 5. チャート上でのマウス操作(ドラッグ)を禁止する(UI固定などの場合)
// ChartSetInteger(currentChartID, CHART_MOUSE_SCROLL, false);
// 設定を即座に反映させるために再描画を行う
ChartRedraw(currentChartID);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// EA終了時に設定をデフォルト(白背景など)に戻す処理を書くのが一般的です
ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrWhite);
ChartSetInteger(0, CHART_SHOW_GRID, true);
ChartRedraw(0);
}
4. 使用上の注意点とよくあるエラー
① 「設定が反映されない」ときは ChartRedraw を疑う
ChartSetIntegerを呼び出しただけでは、次のティックが来るまで画面が更新されないことがあります。変更を即座にユーザーに見せたい場合は、必ず ChartRedraw() をセットで呼び出す習慣をつけましょう。
② 型の不一致
この関数は「Integer(整数)」用です。価格のレベルなど「Double(浮動小数点)」を扱う場合は ChartSetDouble を、チャートタイトルのような「String(文字列)」を扱う場合は ChartSetString を使う必要があります。これを間違えると、コンパイルエラーにはならなくても実行時に意図しない動作をします。
③ チャートIDの指定
自作のEAが動いているチャートを操作する場合は 0 または ChartID() で問題ありませんが、別の通貨ペアのチャートを操作したい場合は、正しいチャートIDを取得して渡す必要があります。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムトレードにおいて、プログラムのコード以上に勝敗を分けるのが「実行環境の物理的な距離」です。自宅のPCでMT5を動かし、家庭用光回線でトレードを行うことは、クオンツの観点からは非常にリスクが高いと言わざるを得ません。ネットワークのジッター(揺らぎ)や経由するプロバイダーの遅延は、たとえ数ミリ秒であっても、スリッページを増大させ、バックテストの結果を根底から覆す「隠れた損失」を生み出します。
プロの現場では、ブローカーの取引サーバーが設置されているデータセンターに物理的に近い「専用のVPS(仮想専用サーバー)」を利用するのが常識です。超高速なネットワーク環境下にEAを配置することで、約定スピードを極限まで高め、発注から約定までのレイテンシを最小化することが可能です。わずかな遅延の差が、年間の収益曲線に致命的な乖離をもたらすため、安定した利益を目指すエンジニアにとって、トレード専用VPSの導入は避けて通れない必須の投資となります。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント