自作したインジケーターのパネルが、
チャートのグリッド線と重なって見づらい、
と感じたことはないでしょうか。
実は`ChartSetInteger`という関数を使えば、
グリッド線の表示・背景色・ローソク足かラインかの表示形式まで、
プログラムから自由に変更できます。
この記事では、設定を取得する`ChartGetInteger`と合わせて、
変更前の状態を保存しておき、
`OnDeinit()`で元に戻す実務的な書き方まで解説します。
・ChartSetInteger/ChartGetIntegerの役割分担
・グリッド線の表示切替・背景色の変更方法
・変更前の設定を保存して元に戻す書き方
・サブウィンドウの高さを取得してパネル配置に使う方法
ChartSetInteger/ChartGetIntegerで何ができるか
まず、2つの関数がそれぞれ何を担当するのか整理します。
2つの関数の役割分担
`ChartGetInteger`は現在の設定を読み取るための関数です。
`ChartSetInteger`はその設定を書き換えるための関数です。
セットで使うことで、「今の状態を覚えてから変更する」ことができます。
代表的なチャートプロパティ
変更・取得できるプロパティの一部を表にまとめます。
| 定数 | 意味 | 型 |
|---|---|---|
| CHART_SHOW_GRID | グリッド線の表示/非表示 | bool |
| CHART_COLOR_BACKGROUND | チャートの背景色 | color |
| CHART_MODE | 表示形式(ローソク足/バー/ライン) | enum |
| CHART_SHOW_PRICE_SCALE | 右側の価格スケールの表示/非表示 | bool |
サブウィンドウ指定の使い分け
RSIやMACDのように、
価格チャートの下に別ウィンドウで表示されるインジケーターでは、
プロパティをどのサブウィンドウに適用するかを指定できる版があります。
・メインのローソク足チャートはサブウィンドウ0番です
・下に追加されたインジケーター窓は1番、2番と番号が増えます
・省略した場合は0番(メインチャート)が対象になります
ChartGetIntegerで現在の設定を取得する
変更する前に、まず今の設定を読み取る方法を確認します。
戻り値で受け取る基本の書き方
bool showGrid = (bool)ChartGetInteger(0, CHART_SHOW_GRID);
第1引数の`0`は現在のチャートを意味します。
戻り値をそのまま変数に代入する、一番シンプルな書き方です。
参照渡し版で成功判定もする
long bgColor;
bool ok = ChartGetInteger(0, CHART_COLOR_BACKGROUND, 0, bgColor);
if(!ok)
Print("背景色の取得に失敗。エラーコード=", GetLastError());
参照渡し版は戻り値が`bool`になり、
取得に成功したかどうかを判定できます。
サブウィンドウの高さを取得する
RSI等のインジケーターを別ウィンドウで表示している場合、
そのウィンドウの高さをピクセル単位で取得できます。
long subHeight = ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 1);
`CHART_HEIGHT_IN_PIXELS`は読み取り専用です。
サブウィンドウごとにパネルを正確に配置したいときに使います。
ChartSetIntegerで設定を変更する
ここからは、実際に設定を書き換える方法を確認します。
グリッド線の表示を消す
ChartSetInteger(0, CHART_SHOW_GRID, false);
自作パネルの視認性を上げたいときによく使う設定です。
背景色を変更する
ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrBlack);
第3引数には`color`型の値を`long`として渡します。
ローソク足/バー/ラインの表示形式を切り替える
ChartSetInteger(0, CHART_MODE, CHART_CANDLES);
`CHART_CANDLES`の代わりに
`CHART_BARS`や`CHART_LINE`も指定できます。
実際に動くコード全体
起動時にグリッド線を消して背景を暗くし、
終了時には必ず元の設定に戻すスクリプトです。
//+------------------------------------------------------------------+
//| ChartSettingsRestoreDemo.mq4 |
//| Copyright 2026, FX-EA System Project Creator |
//| https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property strict
bool g_origShowGrid;
long g_origBgColor;
int OnInit()
{
// 変更前の設定を必ず保存しておく
g_origShowGrid = (bool)ChartGetInteger(0, CHART_SHOW_GRID);
g_origBgColor = ChartGetInteger(0, CHART_COLOR_BACKGROUND);
// パネルを見やすくするための変更
ChartSetInteger(0, CHART_SHOW_GRID, false);
ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrBlack);
ChartRedraw(0);
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
// 必ず元の設定に戻してからEAを終了する
ChartSetInteger(0, CHART_SHOW_GRID, g_origShowGrid);
ChartSetInteger(0, CHART_COLOR_BACKGROUND, g_origBgColor);
ChartRedraw(0);
}
void OnTick()
{
}
MetaEditorでのコンパイル・実行手順
- MetaEditorで新規EA「ChartSettingsRestoreDemo」を作成し、上のコードを貼り付けてコンパイルする
- MT4のナビゲーターからチャートへドラッグ&ドロップして適用する
- グリッド線が消え、背景が黒に変わることを確認する
- チャートからEAを外し、グリッド線と背景色が元の設定に戻ることを確認する
よくあるエラーと注意点
実際に使うときにつまずきやすいポイントをまとめます。
元に戻し忘れると他のEAと衝突する
・背景色やグリッド設定はチャート全体の設定です
・戻し忘れると、別のEAを外した後も変更が残り続けます
・OnDeinit()で必ず元の値に戻す設計を徹底してください
戻り値falseのときはGetLastErrorで確認する
`ChartSetInteger`は失敗すると`false`を返します。
読み取り専用のプロパティを指定していないか、
`GetLastError()`で原因を確認してください。
MQL5との違い
MQL5でも同名の`ChartSetInteger`/
`ChartGetInteger`が存在し、
引数の並び順もほぼ同じです。
ただしMQL5では一部のプロパティ名・列挙体が追加されているため、
移植時はMQL5公式リファレンスで対象プロパティの存在を確認してください。
よくある質問
ChartSetInteger/ChartGetIntegerについて、
よく検索される疑問に回答します。
手動で変更したチャート設定もChartGetIntegerで取得できますか?
はい、取得できます。
「チャートのプロパティ」画面で手動変更した設定も、
同じプロパティIDでChartGetIntegerから読み取れます。
変更はすぐにチャートへ反映されますか?
基本的にはすぐ反映されますが、
反映を確実にしたい場合は`ChartRedraw()`を続けて呼び出してください。
インジケーターからも使えますか?
はい、EAだけでなくカスタムインジケーターからも呼び出せます。
ただし複数のインジケーターが同じチャート設定を変更すると、
意図せず上書き合戦になるため、変更は最小限にとどめてください。
【MQL4】ChartSetInteger/ChartGetIntegerでグリッド線・背景色を変更し元に戻す方法:まとめ
ChartSetInteger/ChartGetIntegerを使えば、
グリッド線や背景色、表示形式までプログラムから制御できます。
大切なのは、変更する前に`ChartGetInteger`で元の設定を保存し、
`OnDeinit()`で必ず復元することです。
コメント