MQL4 チャート操作リファレンス|WindowHandle・ChartID・スクリーンショット・プロパティ設定

MQL4のチャート操作関数を体系的にまとめました。WindowHandle()・WindowFind()によるウィンドウ操作、ChartID()(ビルド600+)によるチャート識別、Period()・Symbol()による現在のチャート情報取得、WindowScreenShot()・ChartScreenShot()によるスクリーンショット、WindowPriceOnDropped()によるドラッグ&ドロップ座標取得、ChartSetInteger()・ChartGetInteger()によるチャートプロパティ操作まで、MT4開発に必要なチャート操作のすべてをコード付きで解説します。

目次

MQL4とMQL5のチャート操作の違い

機能MQL4MQL5
チャートIDChartID()(ビルド600+)/ WindowHandle()ChartID()
チャート情報Period(), Symbol()ChartPeriod(), ChartSymbol()
サブウィンドウ検索WindowFind()ChartWindowFind()
スクリーンショットWindowScreenShot() / ChartScreenShot()ChartScreenShot()
プロパティ設定ChartSetInteger()等(ビルド600+)ChartSetInteger()等
チャート操作ChartOpen/Close/Next等(ビルド600+)ChartOpen/Close/Next等

MQL4のチャート操作はビルド600を境に大きく変わりました。旧形式のWindow系関数に加え、ビルド600+ではChartSetInteger() / ChartGetInteger()等のMQL5互換APIが追加されています。新規開発では新形式の使用を推奨します。

MQL4のチャート操作はビルド600を境に大きく変わりました。旧形式のWindow系関数に加え、ビルド600+ではChartSetInteger() / ChartGetInteger()等のMQL5互換 APIが追加されています。新規開発では新形式の使用を推奨します。

チャート基本情報

関数戻り値説明
Symbol()string現在のチャートの通貨ペア
Period()int現在のチャートの時間軸(分)
ChartID()long現在のチャートのID(ビルド600+)
WindowHandle(string, int)intチャートウィンドウのハンドル
Barsintチャートのバー数
WindowBarsPerChart()int表示されているバー数
WindowFirstVisibleBar()int最初の可視バーのインデックス
WindowIsVisible(int)boolサブウィンドウが表示されているか
void PrintChartInfo()
  {
   Print("=== チャート情報 ===");
   Print("通貨ペア: ", Symbol());
   Print("時間軸: ", PeriodToStr(Period()));
   Print("チャートID: ", ChartID());
   Print("バー数: ", Bars);
   Print("表示バー数: ", WindowBarsPerChart());
   Print("最初の可視バー: ", WindowFirstVisibleBar());
   Print("サブウィンドウ数: ", WindowsTotal());
  }

string PeriodToStr(int period)
  {
   switch(period)
     {
      case PERIOD_M1:  return "M1";
      case PERIOD_M5:  return "M5";
      case PERIOD_M15: return "M15";
      case PERIOD_M30: return "M30";
      case PERIOD_H1:  return "H1";
      case PERIOD_H4:  return "H4";
      case PERIOD_D1:  return "D1";
      case PERIOD_W1:  return "W1";
      case PERIOD_MN1: return "MN1";
     }
   return "Unknown(" + IntegerToString(period) + ")";
  }

ウィンドウ関数

// サブウィンドウの検索
void FindIndicatorWindow()
  {
   // インジケーターが表示されているサブウィンドウ番号を取得
   int window = WindowFind("RSI(14)");
   if(window >= 0)
      Print("RSIはサブウィンドウ", window, "に表示されています");
   else
      Print("RSIは表示されていません");
  }

// 価格座標の取得
void GetDropCoordinates()
  {
   // EAがドラッグ&ドロップされた位置の価格と時刻
   double price = WindowPriceOnDropped();
   datetime time = WindowTimeOnDropped();
   int xPixel = WindowXOnDropped();
   int yPixel = WindowYOnDropped();

   Print("ドロップ位置: price=", price, " time=", TimeToStr(time));
   Print("ピクセル座標: x=", xPixel, " y=", yPixel);
  }

// 価格⇔ピクセル座標変換
void CoordinateConversion()
  {
   // 価格からY座標
   int y = WindowPriceToY(Ask, 0);
   Print("Ask価格のY座標: ", y);

   // Y座標から価格
   double price = WindowYToPrice(y, 0);
   Print("Y=", y, "の価格: ", price);

   // 時刻からX座標
   int x = WindowTimeToX(Time[0], 0);
   Print("現在バーのX座標: ", x);
  }

チャートプロパティ操作(ビルド600+)

void SetupChart()
  {
   long chartId = ChartID();

   // ローソク足表示
   ChartSetInteger(chartId, CHART_MODE, CHART_CANDLES);

   // グリッド表示/非表示
   ChartSetInteger(chartId, CHART_SHOW_GRID, false);

   // 自動スクロール
   ChartSetInteger(chartId, CHART_AUTOSCROLL, true);

   // チャートシフト(右側に余白)
   ChartSetInteger(chartId, CHART_SHIFT, true);

   // Ask/Bidライン表示
   ChartSetInteger(chartId, CHART_SHOW_ASK_LINE, true);
   ChartSetInteger(chartId, CHART_SHOW_BID_LINE, true);

   // 背景色
   ChartSetInteger(chartId, CHART_COLOR_BACKGROUND, clrWhite);

   // ローソク足の色
   ChartSetInteger(chartId, CHART_COLOR_CANDLE_BULL, clrBlue);
   ChartSetInteger(chartId, CHART_COLOR_CANDLE_BEAR, clrRed);

   // 変更を反映
   ChartRedraw(chartId);
  }

// チャートプロパティの取得
void GetChartProperties()
  {
   long chartId = ChartID();

   int mode = (int)ChartGetInteger(chartId, CHART_MODE);
   bool grid = (bool)ChartGetInteger(chartId, CHART_SHOW_GRID);
   int width = (int)ChartGetInteger(chartId, CHART_WIDTH_IN_PIXELS);
   int height = (int)ChartGetInteger(chartId, CHART_HEIGHT_IN_PIXELS);

   Print("チャートモード: ", mode);
   Print("グリッド: ", grid);
   Print("サイズ: ", width, "x", height, "px");
  }
チャートプロパティ変更の注意点
  • ChartSetInteger()等で変更した後、ChartRedraw()を呼ばないと画面に反映されない場合がある
  • チャートの背景色やローソク足の色を変更すると、ユーザーの設定が上書きされる。OnDeinitで元に戻すのがマナー
  • ChartSetInteger(0, CHART_SHIFT, true)で右側にスペースを作ると、将来の価格予測ラインが見やすくなる
チャートプロパティ変更の注意点
  • ChartSetInteger()等で変更した後、ChartRedraw()を呼ばないと画面に反映されない場合がある
  • チャートの背景色やローソク足の色を変更すると、ユーザーの設定が上書きされる。OnDeinitで元に戻すのがマナー
  • ChartSetInteger(0, CHART_SHIFT, true)で右側にスペースを作ると、将来の価格予測ラインが見やすくなる

スクリーンショット

// 旧形式
bool WindowScreenShot(
   string filename,  // ファイル名(Files/フォルダに保存)
   int    size_x,    // 幅(ピクセル)
   int    size_y,    // 高さ(ピクセル)
   int    start_bar = -1,  // 開始バー(-1=現在の表示位置)
   int    chart_scale = -1, // チャートスケール(-1=現在)
   int    chart_mode = -1   // 表示モード(-1=現在)
);

// 新形式(ビルド600+)
bool ChartScreenShot(
   long   chart_id,   // チャートID
   string filename,   // ファイル名
   int    width,      // 幅
   int    height,     // 高さ
   ENUM_ALIGN_MODE align_mode = ALIGN_RIGHT  // 配置
);
void SaveChartScreenShot()
  {
   string filename = "Screenshot_" + Symbol() + "_"
                   + TimeToStr(TimeCurrent(), TIME_DATE) + ".png";

   // 旧形式
   if(WindowScreenShot(filename, 1024, 768))
      Print("スクリーンショット保存: ", filename);
   else
      Print("保存失敗: ", GetLastError());

   // 新形式(ビルド600+)
   // ChartScreenShot(ChartID(), filename, 1024, 768);
  }

// エントリー/決済時に自動スクリーンショット
void TakeTradeScreenShot(string action, int ticket)
  {
   string filename = StringConcatenate(
      "Trade_", action, "_",
      Symbol(), "_",
      IntegerToString(ticket), "_",
      TimeToStr(TimeCurrent(), TIME_DATE), ".png"
   );

   WindowScreenShot(filename, 1280, 720);
  }
スクリーンショットの活用法
  • エントリー・決済時に自動撮影すると、後からの分析に非常に役立つ
  • ファイル名に日時・チケット番号を含めると整理しやすい
  • 保存先はMQL4/Files/フォルダ。サイズは1024×768〜1280×720が一般的
  • バックテスト中はWindowScreenShot()が使えないため、IsTesting()で分岐する
スクリーンショットの活用法
  • エントリー・決済時に自動撮影すると、後からの分析に非常に役立つ
  • ファイル名に日時・チケット番号を含めると整理しやすい
  • 保存先はMQL4/Files/フォルダ。サイズは1024×768〜1280×720が一般的
  • バックテスト中はWindowScreenShot()が使えないため、IsTesting()で分岐する

チャートナビゲーション(ビルド600+)

// チャート一覧の取得
void ListAllCharts()
  {
   long chartId = ChartFirst();
   int count = 0;

   while(chartId >= 0)
     {
      string sym = ChartSymbol(chartId);
      int period = ChartPeriod(chartId);
      Print("Chart[", count, "]: ", sym, " ", PeriodToStr(period),
            " ID=", chartId);
      count++;
      chartId = ChartNext(chartId);
     }

   Print("合計チャート数: ", count);
  }

// 新しいチャートを開く
void OpenNewChart(string symbol, int timeframe)
  {
   long newChart = ChartOpen(symbol, timeframe);
   if(newChart > 0)
      Print("チャートを開きました: ", symbol, " ID=", newChart);
   else
      Print("チャートを開けませんでした");
  }

チャート操作関数一覧(MQL5対応表)

MQL4関数MQL5対応説明
Symbol()_Symbol / ChartSymbol()通貨ペア名
Period()_Period / ChartPeriod()時間軸
ChartID()ChartID()チャートID
WindowHandle()ChartGetInteger(CHART_WINDOW_HANDLE)ウィンドウハンドル
WindowFind()ChartWindowFind()サブウィンドウ検索
WindowsTotal()ChartGetInteger(CHART_WINDOWS_TOTAL)ウィンドウ数
WindowScreenShot()ChartScreenShot()スクリーンショット
WindowPriceOnDropped()ChartPriceOnDropped()ドロップ位置の価格
WindowTimeOnDropped()ChartTimeOnDropped()ドロップ位置の時刻
WindowBarsPerChart()ChartGetInteger(CHART_VISIBLE_BARS)表示バー数
WindowFirstVisibleBar()ChartGetInteger(CHART_FIRST_VISIBLE_BAR)最初の可視バー
ChartSetInteger()ChartSetInteger()整数プロパティ設定
ChartGetInteger()ChartGetInteger()整数プロパティ取得
ChartOpen()ChartOpen()チャートを開く
ChartClose()ChartClose()チャートを閉じる
ChartFirst()ChartFirst()最初のチャートID
ChartNext()ChartNext()次のチャートID

まとめ

MQL4のチャート操作関数は、EA開発での情報表示やデバッグに不可欠です。重要なポイントは以下の通りです。

  • ビルド600+ではChartSetInteger()等の新しいAPIが使えるため、チャートのカスタマイズが柔軟になった
  • WindowScreenShot()でエントリー/決済時に自動撮影すると、後からの分析に役立つ
  • WindowFind()でインジケーターのサブウィンドウを確認してからオブジェクトを描画する
  • ChartRedraw()を呼ばないと変更が反映されない場合があるので注意

次のステップとして、MQLリファレンス総合ガイドでオブジェクト関数と組み合わせたリッチなチャート表示を学びましょう。

シストレ.COMで実績のあるEAが使い放題!/
無料会員登録はこちら
FX自動売買でEAを探すなら
シストレ.COM
実績あるEAが無料
厳格な審査を乗り越えた実績のあるEAが無料で使えます!
自由な口座選び
有料版を購入し柔軟な口座選びが可能!
フォワードテスト公開
全EAのフォワードテスト結果を公開中!
FX初心者も安心
初心者の方も安心して取引を始められます。
多様なEA選択肢
様々な種別のEAをご用意!自分の手法にあった取引が可能です。
信頼のFX会社と提携
人気のFX会社と提携中!様々なFX会社から選べます。
1分で登録完了!EA探すならシストレ.COM!/
無料会員登録はこちら
【FX自動売買】システムトレード完全ガイド|Forex Guide

この記事が気に入ったら
フォローしてね!

お役立ち情報をシェアする
  • URLをコピーしました!
目次