【MQL5】ChartGetDouble関数について

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

ChartGetDouble関数の働き・役割

ChartGetDouble関数は、指定されたチャートのプロパティの値を取得するために使用されます。取得するプロパティはdouble型でなければなりません。
この関数には2つの呼び出し方があり、直接プロパティ値を返す方法と、プロパティ値を参照によって受け取る方法があります。これにより、チャートのさまざまな数値プロパティを効率的に取得することができます。

ChartGetDouble関数の引数について

ChartGetDouble関数引数構成は以下の通りです。この関数には2つの呼び出し方があり、それぞれの引数について説明します。

書式1

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

chart_id

チャートの識別子を指定します。0を指定すると現在のチャートが対象となります。

prop_id

取得するプロパティの識別子を指定します。識別子ENUM_CHART_PROPERTY_DOUBLE型の値で、さまざまなプロパティを示します。

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

sub_window

チャートサブウィンドウの番号を指定します。デフォルトでは0(メインチャートウィンドウ)です。ほとんどのプロパティはサブウィンドウ番号を必要としません。

例:

double priceMin = ChartGetDouble(0, CHART_PRICE_MIN, 0);

この例では、現在のチャートのメインチャートウィンドウの最小価格を取得しています。

書式2

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

chart_id

チャートの識別子を指定します。0を指定すると現在のチャートが対象となります。

prop_id

取得するプロパティの識別子を指定します。識別子ENUM_CHART_PROPERTY_DOUBLE型の値で、さまざまなプロパティを示します。

sub_window

チャートサブウィンドウの番号を指定します。サブウィンドウの番号は必要に応じて指定します。

double_var

プロパティの値を受け取るための変数を指定します。この変数に指定されたプロパティの値が格納されます。

例:

bool result = ChartGetDouble(0, CHART_PRICE_MIN, 0, priceMin);

この例では、現在のチャートのメインチャートウィンドウの最小価格をpriceMin変数に格納し、成功した場合はresultがtrueを返します。

※下記参照渡しに関する記事も参考にしていただければと思います。

ChartGetDouble関数の戻り値について

ChartGetDouble関数戻り値は、関数の呼び出し方法によって異なります。

書式1

この呼び出し方法では、指定されたプロパティのdouble型の値を直接返します。

書式2

この呼び出し方法では、関数が成功した場合にtrueを返し、プロパティの値を参照によって指定された変数に格納します。失敗した場合はfalseを返します。

ChartGetDouble関数を使う際の注意点

ChartGetDouble関数を使用する際には、いくつかの重要な注意点があります。

  • 同期型関数ChartGetDouble関数は同期型です。このため、関数が呼び出される前にチャートキューに追加されたすべてのコマンドが実行されるまで待機します。これにより、関数の実行が完了するまでに時間がかかる場合があります。
  • サブウィンドウ番号:ほとんどのプロパティはサブウィンドウ番号を必要としませんが、特定のプロパティではsub_window引数を適切に設定する必要があります。初期値は0で、メインチャートウィンドウを指します。
  • エラーハンドリング関数が失敗した場合、GetLastError関数を使用してエラーの詳細情報を取得することが重要です。これにより、問題の原因を特定し、適切な対策を講じることができます。
  • 値の取得方法ChartGetDouble関数には2つの呼び出し方があります。直接値を返す方法と、参照によって値を受け取る方法です。目的に応じて適切な呼び出し方を選択してください。

これらの点に注意しながら、ChartGetDouble関数を正しく使用することで、チャートのプロパティ情報を効果的に取得することができます。

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

以下のコードは、ChartGetDouble関数を使用してENUM_CHART_PROPERTY_DOUBLEのすべての識別子情報を取得し、エキスパートログに出力します。

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
    double value;
    bool result;

    // CHART_SHIFT_SIZEの値を取得して出力
    result = ChartGetDouble(0, CHART_SHIFT_SIZE, 0, value);
    if (result) {
        Print("CHART_SHIFT_SIZE =", value);
    } else {
        Print("CHART_SHIFT_SIZEの取得に失敗しました。エラーコード: ", GetLastError());
    }

    // CHART_FIXED_POSITIONの値を取得して出力
    result = ChartGetDouble(0, CHART_FIXED_POSITION, 0, value);
    if (result) {
        Print("CHART_FIXED_POSITION =", value);
    } else {
        Print("CHART_FIXED_POSITIONの取得に失敗しました。エラーコード: ", GetLastError());
    }

    // CHART_FIXED_MAXの値を取得して出力
    result = ChartGetDouble(0, CHART_FIXED_MAX, 0, value);
    if (result) {
        Print("CHART_FIXED_MAX =", value);
    } else {
        Print("CHART_FIXED_MAXの取得に失敗しました。エラーコード: ", GetLastError());
    }

    // CHART_FIXED_MINの値を取得して出力
    result = ChartGetDouble(0, CHART_FIXED_MIN, 0, value);
    if (result) {
        Print("CHART_FIXED_MIN =", value);
    } else {
        Print("CHART_FIXED_MINの取得に失敗しました。エラーコード: ", GetLastError());
    }

    // CHART_POINTS_PER_BARの値を取得して出力
    result = ChartGetDouble(0, CHART_POINTS_PER_BAR, 0, value);
    if (result) {
        Print("CHART_POINTS_PER_BAR =", value);
    } else {
        Print("CHART_POINTS_PER_BARの取得に失敗しました。エラーコード: ", GetLastError());
    }

    // CHART_PRICE_MINの値を取得して出力
    result = ChartGetDouble(0, CHART_PRICE_MIN, 0, value);
    if (result) {
        Print("CHART_PRICE_MIN =", value);
    } else {
        Print("CHART_PRICE_MINの取得に失敗しました。エラーコード: ", GetLastError());
    }

    // CHART_PRICE_MAXの値を取得して出力
    result = ChartGetDouble(0, CHART_PRICE_MAX, 0, value);
    if (result) {
        Print("CHART_PRICE_MAX =", value);
    } else {
        Print("CHART_PRICE_MAXの取得に失敗しました。エラーコード: ", GetLastError());
    }
}

このサンプルコードでは、ChartGetDouble関数を使用してENUM_CHART_PROPERTY_DOUBLEの各識別子の値を取得し、それぞれの値をエキスパートログに出力しています。各識別子の取得が成功した場合にはその値を出力し、失敗した場合にはエラーコードを出力します。

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

OnStart関数

OnStart関数は、スクリプトの実行が開始されたときに自動的に呼び出されます。この関数内で初期化処理や必要な値の取得などを行います。

ChartGetDouble関数

ChartGetDouble関数は、指定されたチャートのプロパティの値を取得するために使用されます。サンプルコードでは、次のように呼び出されています。

// プロパティの値を取得して出力
result = ChartGetDouble(0, CHART_PROPERTY, 0, value);

変数

value変数

// 値を格納するための変数
double value;

value変数は、ChartGetDouble関数を使って取得したプロパティの値を格納するために使用されます。double型で宣言されています。

result変数

// 関数の成功・失敗を格納するための変数
bool result;

result変数は、ChartGetDouble関数の実行結果を格納するために使用されます。成功した場合はtrue、失敗した場合はfalseが格納されます。

ENUM_CHART_PROPERTY_DOUBLE識別子

CHART_SHIFT_SIZE

CHART_SHIFT_SIZEは、右境界線からのゼロバーインデントのサイズを百分率で表します。値の範囲は10〜50パーセントです。

CHART_FIXED_POSITION

CHART_FIXED_POSITIONは、左の境界からのチャートの固定位置をパーセント値で表します。これは、ティック着信時のチャート右への自動スクロールが無効になっている場合に表示されます。

CHART_FIXED_MAX

CHART_FIXED_MAXは、固定されたチャートの最大値を示します。

CHART_FIXED_MIN

CHART_FIXED_MINは、固定されたチャートの最小値を示します。

CHART_POINTS_PER_BAR

CHART_POINTS_PER_BARは、スケール(バーあたりのポイント単位)を示します。

CHART_PRICE_MIN

CHART_PRICE_MINは、チャートの最小値を示します。このプロパティは読み込み専用で、サブウィンドウ番号の修飾子を持ちます。

CHART_PRICE_MAX

CHART_PRICE_MAXは、チャートの最大値を示します。このプロパティも読み込み専用で、サブウィンドウ番号の修飾子を持ちます。

Print関数

Print関数は、指定されたメッセージをエキスパートログに出力します。サンプルコードでは、プロパティの値やエラーコードを出力するために使用されています。

GetLastError関数

GetLastError関数は、直近に発生したエラーコードを取得します。ChartGetDouble関数の実行が失敗した場合に、その理由を特定するために使用されます。

以上の各要素を理解することで、サンプルコードの動作とChartGetDouble関数の使用方法についてより深く理解することができます。

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