投資で実現!不労所得生活

MQL: 現在の通貨/シンボルのポイントサイズを調べる (Point, SymbolInfoDouble)

更新:
作成:

OrderSend などで注文を出す 場合、最大許容スリッページなどをポイント数で指定する必要があります。 ポイントサイズが 0.001 であれば、1 ポイントが決済通貨で 0.001 の価格であることを示しています。 例えば、USDJPY でポイントサイズが 0.001 であれば、1 ポイントは 0.001 円です。 EURUSD でポイントサイズが 0.00001 であれば、1 ポイントは 0.00001 ドルです。

カレントチャートの通貨のポイントサイズを取得する (Point)

カレントチャートで表示している通貨のポイントサイズを調べるには、Point 関数 を使用します。

Scripts/ShowPointSize.mq4
#property strict

void OnStart() {
  string symbol = Symbol();
  double point = Point();

  MessageBox(StringFormat("%s のポイントサイズは %f です", symbol, point));
}

上記のスクリプトを実行すると、次のように表示されます。

USDJPY のポイントサイズは 0.001000 です

指定した通貨のポイントサイズを取得する (SymbolInfoDouble)

カレントチャートの通貨に関係なく、指定した通貨ペアのポイントサイズを調べるには、SymbolInfoDouble 関数 の引数に SYMBOL_POINT を指定して呼び出します。

SymbolInfoDouble を使う方法
void OnStart() {
    const string symbol = "USDJPY";
    double point = SymbolInfoDouble(symbol, SYMBOL_POINT);
    MessageBox(StringFormat("%s のポイントサイズは %f です", symbol, point));
}

SymbolInfoDouble(Symbol(), SYMBOL_POINT) とすれば、Point() と同じ値を取得できます。 3 引数バージョンの SymbolInfoDouble 関数を使用すれば、呼び出しに成功したかどうかを戻り値で判断できます。 シンボル名の間違いなどをケアするときは、こちらのバージョンを使用します。

void OnStart() {
    const string symbol = "USDJPY";
    double point;
    if (SymbolInfoDouble(symbol, SYMBOL_POINT, point)) {
        MessageBox(StringFormat("%s のポイントサイズは %f です", symbol, point));
    } else {
        MessageBox(StringFormat("%s のポイントサイズを取得できません", symbol))
    }
}

ちなみに、MQL4 では次のように MarketInfo 関数を使っても同様にポイントサイズを取得することができますが、MQL4/5 共通で SymbolInfoDouble 関数が使えるので、そちらを使っておけばよいでしょう。

MarketInfo を使う方法
void OnStart() {
    const string symbol = "USDJPY";
    double point = MarketInfo(symbol, MODE_POINT);
    MessageBox(StringFormat("%s のポイントサイズは %f です", symbol, point));
}

関連記事

投資で実現!不労所得生活
サイトマップまくへのメッセージ