【MQL5】ChartGetInteger関数について

MQL5リファレンス
スポンサーリンク

ChartGetInteger関数の働き・役割

ChartGetInteger関数は、指定されたチャートのプロパティの値を取得するために使用されます。この関数を使うことで、チャートの高さや幅、サブウィンドウの数など、さまざまなチャートのプロパティを取得することができます。プロパティの値は、dateTime型int型、またはbool型で返されます。

ChartGetInteger関数の引数について

ChartGetInteger関数には2つの呼び出し方があります。

1. 直接プロパティ値を返す形式

long ChartGetInteger(
  long chart_id,                      // チャート識別子
  ENUM_CHART_PROPERTY_INTEGER prop_id, // プロパティ識別子
  int sub_window=0                    // サブウィンドウ番号(必要に応じて)
);

2. プロパティ値を参照で返す形式

bool ChartGetInteger(
  long chart_id,                      // チャート識別子
  ENUM_CHART_PROPERTY_INTEGER prop_id, // プロパティ識別子
  int sub_window,                     // サブウィンドウ番号
  long& long_var                      // チャートのプロパティのターゲット変数
);

各引数の説明

  1. chart_id
  • チャート識別子を指定します。0を指定すると現在のチャートを意味します。
  1. prop_id

ENUM_CHART_PROPERTY_INTEGERについての詳細は↓の記事をご参照ください。

  1. sub_window
  • チャートサブウィンドウの番号を指定します。ほとんどのプロパティはサブウィンドウの番号を必要としません。初期値は0(メインチャートウィンドウ)です。
  1. long_var
  • プロパティの値を受け取るためのlong型変数です。

ChartGetInteger関数の戻り値について

ChartGetInteger関数は、指定されたプロパティの値を返します。最初の形式ではプロパティ値を直接返し、2番目の形式では関数の成功に応じてtrueまたはfalseを返します。
成功した場合、プロパティの値は参照によって渡されたlong_var変数に格納されます。参照渡しとは、関数変数そのものを渡す方法で、関数内での変更が呼び出し元にも反映されます。
参照渡しについての詳細は↓の記事をご参照ください。

ChartGetInteger関数を使う際の注意点

ChartGetInteger関数は同期型です。同期型とは、関数が呼び出されたときに、その関数の処理が完了するまで次の処理が待機することを意味します。つまり、ChartGetInteger関数が呼び出されると、その前にチャートキュー(処理待ちの命令リスト)に追加されたすべてのコマンドが実行されるまで待機します。

このため、次のような事態が起こり得ます:

  1. 実行時間の遅延:大量のデータや多くの命令がチャートキューに積まれている場合、ChartGetInteger関数が完了するまでの待機時間が長くなり、全体の処理時間が遅延する可能性があります。
  2. レスポンスの遅延:特にリアルタイム性が求められるスクリプトでは、この待機時間が原因で必要なデータの取得が遅れることがあり、即時の対応が難しくなることがあります。

例えば、複数のインジケータを同時に計算している場合、これらの計算がすべて完了するまでChartGetInteger関数は待機します。そのため、関数を呼び出すタイミングや頻度には注意が必要です。

ChartGetInteger関数を使ったサンプルコード

以下は、ChartGetInteger関数を使用して現在のチャートの高さと幅を取得し、エキスパートログに出力するサンプルコードです。

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
  // 現在のチャートの高さを取得します
  // 第1書式を使用し、プロパティの値を直接返します
  int height = ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0);

  // 現在のチャートの幅を取得します
  // 第1書式を使用し、プロパティの値を直接返します
  int width = ChartGetInteger(0, CHART_WIDTH_IN_PIXELS, 0);

  // 取得した高さと幅をエキスパートログに出力します
  Print("CHART_HEIGHT_IN_PIXELS = ", height, " pixels");
  Print("CHART_WIDTH_IN_PIXELS = ", width, " pixels");
}

// 第2書式を使用する場合のサンプル
void OnStart()
{
  // プロパティの値を格納するための変数を定義します
  long height_var, width_var;

  // 第2書式を使用し、プロパティの値を参照渡しで取得します
  // 関数が成功したかどうかを確認し、成功した場合はプロパティの値が変数に格納されます
  if(ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0, height_var))
  {
    Print("CHART_HEIGHT_IN_PIXELS = ", height_var, " pixels");
  }
  else
  {
    Print("チャートの高さの取得に失敗しました");
  }

  if(ChartGetInteger(0, CHART_WIDTH_IN_PIXELS, 0, width_var))
  {
    Print("CHART_WIDTH_IN_PIXELS = ", width_var, " pixels");
  }
  else
  {
    Print("チャートの幅の取得に失敗しました");
  }
}

サンプルコードに使われた関数や文法要素の簡単な解説

OnStart関数

OnStart関数スクリプトの実行が開始されたときに自動的に呼び出される関数です。この中にスクリプトの処理内容を記述します。

ChartGetInteger関数

ChartGetInteger関数は、指定されたチャートのプロパティの値を取得する関数です。引数には、チャート識別子、プロパティ識別子、サブウィンドウ番号(必要に応じて)を指定します。この関数オーバーロードされており、2つの異なる形式があります。

オーバーロード関数についての詳細は↓の記事をご参照ください。

1. プロパティ値を直接返す形式

この形式では、関数はプロパティの値を直接返します。

2. プロパティ値を参照渡しで返す形式

この形式では、関数はtrueまたはfalseを返します。成功した場合、プロパティの値は関数引数として渡された変数に格納されます。参照渡しとは、関数変数そのものを渡す方法で、関数内での変更が呼び出し元にも反映されます。

Print関数

Print関数は、指定されたメッセージをエキスパートログに出力するために使用されます。ここでは、取得したチャートの高さと幅を出力しています。

コメント

タイトルとURLをコピーしました