【MQL4】チャート設定定数を完全理解!ENUM_CHART_PROPERTY_INTEGER・STRING・DOUBLEの使い方

【辞書】MQLリファレンス

EAやインジケーターを開発していると、「チャートの背景色をプログラムから変更したい」「グリッドを非表示にしたい」「ローソク足の色を統一したい」といった場面に出くわすことがあります。

MQL4では、チャートの見た目や動作を制御するためのチャートプロパティ定数が用意されています。この記事では、ENUM_CHART_PROPERTY_INTEGERENUM_CHART_PROPERTY_STRINGENUM_CHART_PROPERTY_DOUBLEの3種類の列挙型を中心に、チャート設定の操作方法をわかりやすく解説します。

チャートプロパティを操作する関数の全体像

MQL4では、チャートプロパティの値を「設定する関数」と「取得する関数」がデータ型ごとにペアで用意されています。

データ型 設定する関数 取得する関数 対応する列挙型
整数型(long) ChartSetInteger() ChartGetInteger() ENUM_CHART_PROPERTY_INTEGER
浮動小数点型(double) ChartSetDouble() ChartGetDouble() ENUM_CHART_PROPERTY_DOUBLE
文字列型(string) ChartSetString() ChartGetString() ENUM_CHART_PROPERTY_STRING

これらの関数の第1引数にはチャートIDを指定します。0を指定すると現在のチャートを意味します。第2引数に、これから説明する列挙型の定数を渡すことで、どのプロパティを操作するかを指定します。

ENUM_CHART_PROPERTY_INTEGER — 整数型プロパティ

最も種類が多く、よく使うのがこの整数型プロパティです。チャートの表示/非表示の切り替え、色の設定、モードの変更など幅広い操作ができます。

表示モード系のプロパティ

定数名 説明 設定値
CHART_MODE チャートの表示タイプ CHART_BARS / CHART_CANDLES / CHART_LINE
CHART_FOREGROUND 価格チャートを前面に表示するか true / false
CHART_SHIFT 右端にシフト(余白)を設けるか true / false
CHART_AUTOSCROLL 自動スクロール(最新バーへ自動移動) true / false
CHART_SCALE チャートのスケール(0〜5) 0(縮小)〜 5(拡大)

表示要素の ON/OFF 系プロパティ

定数名 説明
CHART_SHOW_GRID グリッド線の表示/非表示
CHART_SHOW_PERIOD_SEP 期間区切り線の表示/非表示
CHART_SHOW_ASK_LINE Ask(買値)ラインの表示/非表示
CHART_SHOW_BID_LINE Bid(売値)ラインの表示/非表示
CHART_SHOW_DATE_SCALE 横軸(日時スケール)の表示/非表示
CHART_SHOW_PRICE_SCALE 縦軸(価格スケール)の表示/非表示
CHART_SHOW_OHLC 四本値(OHLC)の表示/非表示
CHART_SHOW_ONE_CLICK ワンクリックトレードパネルの表示/非表示
CHART_SHOW_VOLUMES 出来高の表示モード

色の設定用プロパティ

チャートの配色もすべてプログラムから制御できます。color型の値を指定します。

定数名 説明
CHART_COLOR_BACKGROUND チャートの背景色
CHART_COLOR_FOREGROUND 前景色(軸やテキストの色)
CHART_COLOR_GRID グリッド線の色
CHART_COLOR_CHART_UP 上昇バー / ローソク足の外枠・ヒゲの色
CHART_COLOR_CHART_DOWN 下降バー / ローソク足の外枠・ヒゲの色
CHART_COLOR_CANDLE_BULL 陽線(Bull)の実体の色
CHART_COLOR_CANDLE_BEAR 陰線(Bear)の実体の色
CHART_COLOR_CHART_LINE ラインチャートの色
CHART_COLOR_ASK Askラインの色
CHART_COLOR_BID Bidラインの色
CHART_COLOR_STOP_LEVEL ストップレベルの色

読み取り専用のプロパティ

以下のプロパティは値の取得のみ可能で、プログラムから変更はできません(読み取り専用 = r/o)。

定数名 説明
CHART_WINDOWS_TOTAL チャートウィンドウの総数(サブウィンドウ含む)
CHART_WIDTH_IN_BARS チャートの幅(バー数単位)
CHART_WIDTH_IN_PIXELS チャートの幅(ピクセル単位)
CHART_HEIGHT_IN_PIXELS チャートの高さ(ピクセル単位)
CHART_FIRST_VISIBLE_BAR 画面上で最初に見えるバーの番号
CHART_VISIBLE_BARS 画面上に表示されているバーの本数
CHART_IS_OBJECT オブジェクトとしてのチャートかどうか

実践サンプル:チャートの配色をカスタマイズする

以下はEAのOnInit()内でチャートの見た目を一括変更する例です。

int OnInit()
{
   // チャート表示をローソク足に変更
   ChartSetInteger(0, CHART_MODE, CHART_CANDLES);
   
   // 背景色をダークブルーに設定
   ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrMidnightBlue);
   
   // グリッドを非表示にする(背景色と同色でも可)
   ChartSetInteger(0, CHART_SHOW_GRID, false);
   
   // 陽線(Bull)の色設定
   ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, clrDodgerBlue);
   ChartSetInteger(0, CHART_COLOR_CHART_UP, clrDodgerBlue);
   
   // 陰線(Bear)の色設定
   ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, clrMediumOrchid);
   ChartSetInteger(0, CHART_COLOR_CHART_DOWN, clrMediumOrchid);
   
   // Askラインを表示する
   ChartSetInteger(0, CHART_SHOW_ASK_LINE, true);
   
   // 設定を反映
   ChartRedraw();
   
   return(INIT_SUCCEEDED);
}

ポイント:ChartSetInteger()を呼んだだけでは画面にすぐ反映されないことがあります。確実に描画を更新したい場合は、最後にChartRedraw()を呼びましょう。

ENUM_CHART_PROPERTY_DOUBLE — 浮動小数点型プロパティ

Double型のプロパティは数が少なく、主にチャートの価格範囲を取得するために使います。

定数名 説明 備考
CHART_PRICE_MIN チャート上の最小価格 読み取り専用
CHART_PRICE_MAX チャート上の最大価格 読み取り専用
CHART_SHIFT_SIZE 右端シフトの割合(10〜50%) 設定可能
CHART_FIXED_POSITION 固定位置(左端からの割合%) 設定可能
CHART_FIXED_MAX 固定スケール時の最大価格 設定可能
CHART_FIXED_MIN 固定スケール時の最小価格 設定可能

実践サンプル:現在のチャート価格範囲を取得する

void OnTick()
{
   // 現在チャートに表示されている価格範囲を取得
   double priceMin = ChartGetDouble(0, CHART_PRICE_MIN);
   double priceMax = ChartGetDouble(0, CHART_PRICE_MAX);
   
   Print("表示中の価格範囲: ", priceMin, " ~ ", priceMax);
}

CHART_PRICE_MINCHART_PRICE_MAXは、画面上に「今見えている」範囲の最小・最大価格です。スクロールやズームに応じて動的に変化するため、現在の表示状態を知りたいときに便利です。

ENUM_CHART_PROPERTY_STRING — 文字列型プロパティ

文字列型のプロパティは現在1つだけです。

定数名 説明
CHART_COMMENT チャートの左上に表示されるコメント文字列

実践サンプル:チャートにコメントを表示する

void OnTick()
{
   // ChartSetString でチャートコメントを設定
   string info = "スプレッド: " + IntegerToString(SymbolInfoInteger(_Symbol, SYMBOL_SPREAD))
               + " / Bid: " + DoubleToString(Bid, _Digits);
   
   ChartSetString(0, CHART_COMMENT, info);
   ChartRedraw();
}

// コメントの取得
void ShowCurrentComment()
{
   string currentComment = ChartGetString(0, CHART_COMMENT);
   Print("現在のコメント: ", currentComment);
}

ChartSetString()によるCHART_COMMENTの設定は、Comment()関数と同様にチャート左上にテキストを表示します。Comment()関数との違いは、チャートIDを指定できるため他のチャートウィンドウに対してもコメントを設定できる点です。

応用テクニック:チャートの設定を保存・復元する

EAやインジケーターでチャートの見た目を変更する場合、終了時に元の設定に戻すのがマナーです。以下のパターンを覚えておきましょう。

// グローバル変数に元の設定を保存
color g_origBgColor;
bool  g_origShowGrid;

int OnInit()
{
   // 元の設定を保存
   g_origBgColor  = (color)ChartGetInteger(0, CHART_COLOR_BACKGROUND);
   g_origShowGrid = (bool)ChartGetInteger(0, CHART_SHOW_GRID);
   
   // 新しい設定を適用
   ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrBlack);
   ChartSetInteger(0, CHART_SHOW_GRID, false);
   ChartRedraw();
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   // 元の設定を復元
   ChartSetInteger(0, CHART_COLOR_BACKGROUND, g_origBgColor);
   ChartSetInteger(0, CHART_SHOW_GRID, g_origShowGrid);
   ChartRedraw();
}

こうすることで、EAを取り外したときにチャートが元の見た目に戻ります。ユーザーにとって親切な設計になりますので、ぜひ習慣にしてください。

よくある注意点とつまずきポイント

① ChartRedraw()を忘れない

チャートプロパティを変更する関数は、実際にはイベントキューにコマンドを追加するだけです。画面への即時反映が必要な場合は、ChartRedraw()を明示的に呼びましょう。

② 第1引数のチャートID

第1引数に0を指定すると「現在のチャート」を意味します。別のチャートを操作したい場合は、ChartID()ChartFirst()/ChartNext()で取得したIDを使います。

③ 読み取り専用プロパティに注意

CHART_WIDTH_IN_PIXELSCHART_PRICE_MINなどの読み取り専用(r/o)プロパティに対してSet関数を呼んでも、値は変更されません。公式リファレンスで「r/o」の表記を確認しましょう。

④ 新しく開いたチャートの操作タイミング

ChartOpen()で新しくチャートを開いた直後は、まだデータが読み込まれていない場合があります。CHART_PRICE_MINCHART_PRICE_MAXを取得しても0が返ることがあるため、少し待つか、次のティックで取得するようにしましょう。

まとめ

MQL4のチャートプロパティ定数は、大きく3つの列挙型に分類されます。

  • ENUM_CHART_PROPERTY_INTEGER:色・表示切替・モード設定など(最も種類が多い)
  • ENUM_CHART_PROPERTY_DOUBLE:価格範囲・スケール関連
  • ENUM_CHART_PROPERTY_STRING:チャートコメント

操作にはChartSetInteger()/ChartGetInteger()ChartSetDouble()/ChartGetDouble()ChartSetString()/ChartGetString()の6つの関数を使い分けます。

特に、EAやインジケーターでチャートの配色カスタマイズ情報表示を行う際に必須の知識となりますので、まずは本記事のサンプルコードを動かして、チャートプロパティの変更を体験してみてください!