【MQL5】SymbolInfoString関数について

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

SymbolInfoString関数の働き・役割

SymbolInfoString関数は、指定されたシンボルの指定されたプロパティを返します。この関数には2つのバージョンがあります。

1つ目のバージョンは、直接プロパティ値を返します。

2つ目のバージョンは、関数の成功に応じて、true または false を返します。成功した場合、プロパティの値は、参照渡しされた最後のパラメータに配置されます。

この関数を使用することで、シンボルに関する詳細な情報を取得し、それを元に取引や分析を行うことが可能です。たとえば、シンボルの基本通貨、利益通貨、証拠金通貨、シンボルの説明などの情報を取得できます。

SymbolInfoString関数の引数について

SymbolInfoString関数は、2つのバージョンがあり、それぞれ異なる引数を取ります。

バージョン1: プロパティ値を直接返す

  • 第1引数: name
  • 種類: 文字列
  • 説明: 銘柄名を指定します。例えば、「EURUSD」や「USDJPY」などです。
  • 第2引数: prop_id
  • 種類: ENUM_SYMBOL_INFO_STRING
  • 説明: シンボルプロパティの識別子を指定します。この識別子はENUM_SYMBOL_INFO_STRING列挙のいずれかの値です。
string SymbolInfoString(
  string name,        // 銘柄名
  ENUM_SYMBOL_INFO_STRING prop_id  // プロパティ識別子
);

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

バージョン2: 関数の成功に応じて true または false を返す

  • 第1引数: name
  • 種類: 文字列
  • 説明: 銘柄名を指定します。例えば、「EURUSD」や「USDJPY」などです。
  • 第2引数: prop_id
  • 種類: ENUM_SYMBOL_INFO_STRING
  • 説明: シンボルプロパティの識別子を指定します。この識別子はENUM_SYMBOL_INFO_STRING列挙のいずれかの値です。
  • 第3引数: string_var
  • 種類: 文字列参照渡し
  • 説明: リクエストされたプロパティ値を受け取るための変数です。
bool SymbolInfoString(
  string name,        // 銘柄名
  ENUM_SYMBOL_INFO_STRING prop_id,  // プロパティ識別子
  string& string_var  // プロパティ値を受け取る
);

SymbolInfoString関数の戻り値について

バージョン1: プロパティ値を直接返す

SymbolInfoString関数のこのバージョンは、指定されたプロパティの値を直接返します。戻り値の型は文字列です。関数の実行が失敗した場合、エラー情報はGetLastError関数で取得できます。

  • 戻り値の型: 文字列
  • 失敗した場合のエラーコード:
  • 5040: 銘柄名指定での不正な文字列パラメータの使用
  • 4301: 未知のシンボル(銘柄)
  • 4302: シンボルが「気配値表示」で未選択(利用可能なシンボルのリストに不在)
  • 4303: 不正なシンボルプロパティ識別子

バージョン2: 関数の成功に応じて true または false を返す

SymbolInfoString関数のこのバージョンは、関数の成功に応じてtrueまたはfalseを返します。成功した場合、プロパティの値は参照渡しによって渡された変数に配置されます。

  • 戻り値の型: ブール型
  • true: 関数の実行が成功し、プロパティ値が参照渡しによって渡された変数に格納された場合
  • false: 関数の実行が失敗した場合

失敗した場合、エラー情報はGetLastError関数で取得できます。エラーコードはバージョン1と同様です。

  • エラーコード:
  • 5040: 銘柄名指定での不正な文字列パラメータの使用
  • 4301: 未知のシンボル(銘柄)
  • 4302: シンボルが「気配値表示」で未選択(利用可能なシンボルのリストに不在)
  • 4303: 不正なシンボルプロパティ識別子

SymbolInfoString関数を使う際の注意点

まず、端末が取引口座に接続されてから、相場が一つも出ていない場合、リクエストされた値が不定となる可能性があります。このような場合、取得した情報が最新でない可能性があるため、取引や分析に使用する際には注意が必要です。

また、最後のティック情報を取得する際には、SymbolInfoTick関数の使用が推奨されます。SymbolInfoTick関数は、ユーザーの買値、売値、最終値、ボリューム、最後のティックの到着時間などの情報を一度に取得することができ、より効率的です。

次に、シンボルが「気配値表示」で未選択の場合(利用可能なシンボルのリストに不在の場合)、SymbolInfoString関数は正しく動作しません。シンボルを気配値表示に追加してから使用する必要があります。

最後に、プロパティ識別子が正しいことを確認してください。プロパティ識別子が正しくない場合、関数は失敗し、エラーコードが返されます。適切な識別子を使用することが重要です。

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

以下は、SymbolInfoString関数を使用してシンボルの情報を取得するサンプルコードです。

#define SYMBOL_NAME "USDJPY"  // 使用するシンボル名を定義

// スクリプトプログラム開始関数
void OnStart()
{
    // SYMBOL_NAMEシンボルの基本通貨を取得する
    string currency_base = SymbolInfoString(SYMBOL_NAME, SYMBOL_CURRENCY_BASE);
    // SYMBOL_NAMEシンボルの利益通貨を取得する
    string currency_profit = SymbolInfoString(SYMBOL_NAME, SYMBOL_CURRENCY_PROFIT);
    // SYMBOL_NAMEシンボルの証拠金通貨を取得する
    string currency_margin = SymbolInfoString(SYMBOL_NAME, SYMBOL_CURRENCY_MARGIN);
    // SYMBOL_NAMEシンボルの説明を取得する
    string symbol_descript = SymbolInfoString(SYMBOL_NAME, SYMBOL_DESCRIPTION);

    // 取得したデータを使用してメッセージテキストを作成する
    string text = StringFormat(
        "シンボル %s:\n" +
        "- 基本通貨: %s\n" +
        "- 利益通貨: %s\n" +
        "- 証拠金通貨: %s\n" +
        "- シンボルの説明: %s",
        SYMBOL_NAME, currency_base, currency_profit, currency_margin, symbol_descript
    );

    // 取得したデータを操作ログに送信する
    Print(text);

    /*
    期待される出力例:
    シンボル USDJPY:
    - 基本通貨: USD
    - 利益通貨: JPY
    - 証拠金通貨: USD
    - シンボルの説明: US Dollar vs Yen
    */
}

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

  • 定数定義を使用して、シンボル名を”USDJPY”に設定しています。この方法は、コード内で繰り返し使用する値を管理しやすくします。ここでは、#define SYMBOL_NAME “USDJPY”を使用しています。
  • OnStart関数は、スクリプトプログラムの開始関数です。この関数スクリプトが実行されると自動的に呼び出されます。
  • SymbolInfoString関数は、指定されたシンボルの指定されたプロパティを返します。ここでは、以下の識別子を使用しています。
  • SYMBOL_CURRENCY_BASE: シンボルの基本通貨を表します。例では「USD」が返されます。
  • SYMBOL_CURRENCY_PROFIT: シンボルの利益通貨を表します。例では「JPY」が返されます。
  • SYMBOL_CURRENCY_MARGIN: シンボルの証拠金通貨を表します。例では「USD」が返されます。
  • SYMBOL_DESCRIPTION: シンボルの説明を表します。例では「US Dollar vs Yen」が返されます。
  • StringFormat関数は、文字列フォーマット関数です。指定した形式に従って文字列を作成します。ここでは、以下のように使用しています。
  • %s文字列を挿入するためのフォーマット指定子です。SYMBOL_NAMEや各通貨情報が挿入されます。
  • \nは改行文字です。メッセージテキストを複数行に分けるために使用されます。例では、各通貨情報が新しい行に表示されます。
  • Print関数は、エキスパートログにメッセージを出力する関数です。この例では、取得したシンボル情報をログに出力します。

このサンプルコードは、指定されたシンボルに関する情報を取得し、それをログに出力する方法を示しています。各プロパティの値を確認し、取引や分析に役立てることができます。

コメント

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