【MQL5】SymbolInfoMarginRate関数について

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

SymbolInfoMarginRate関数の働き・役割

SymbolInfoMarginRate関数は、指定された銘柄に対する注文の種類と方向に応じた証拠金率を取得するために使用されます。
この関数を使用することで、初期の証拠金と維持証拠金率を取得し、取引のリスク管理に役立てることができます。例えば、特定の銘柄を買いまたは売りする際に必要な証拠金の割合を事前に確認することができます。

証拠金維持率とは

証拠金維持率は、取引ポジションを維持するために必要な最小限の資金の割合を示す指標です。これは、取引を継続するために口座に保持しておくべき証拠金の量を示し、ポジションが大きく変動しても取引を続行できるようにするための安全策となります。
証拠金維持率は、初期証拠金率とともに、取引リスクを管理し、ポジションを適切に運営するための重要な要素です。例えば、証拠金維持率が高いほど、ポジションを維持するためにより多くの資金が必要となります。これにより、急激な市場変動に対しても口座の資金が不足するリスクを低減します。

証拠金維持率の計算式は、通常次のように計算されます。

証拠金維持率の計算式

証拠金維持率 = (有効証拠金 / 必要証拠金) * 100

用語の説明

  • 有効証拠金: 現在の口座の総資産から未決済の損益を加算または減算した金額です。これには、残高、浮動損益、クレジット(ボーナスなど)が含まれます。
  • 必要証拠金: 現在保有している全ポジションの維持に必要な証拠金の合計額です。

この計算式により、現在の証拠金維持率を算出できます。例えば、有効証拠金が10,000ドルで必要証拠金が2,000ドルの場合、証拠金維持率は次のようになります。

証拠金維持率 = (10,000 / 2,000) * 100 = 500%

この証拠金維持率が一定の閾値(ブローカーにより異なります)を下回ると、追加の証拠金を求められることがあります。これを証拠金コールと言います。さらに下回ると、強制ロスカットによりポジションが自動的に決済される場合があります。

SymbolInfoMarginRate関数の引数について

SymbolInfoMarginRate関数引数構成は以下の通りです。

bool  SymbolInfoMarginRate(
  string            name,                    // 銘柄名
  ENUM_ORDER_TYPE   order_type,              // 注文の種類
  double&           initial_margin_rate,     // 初期の証拠金率
  double&           maintenance_margin_rate  // 維持証拠金率
);

name
銘柄名を指定します。この引数には、証拠金率を取得したい銘柄の名前を文字列で入力します。

order_type
注文の種類を指定します。この引数には、ENUM_ORDER_TYPE型の値を使用します。具体的な値としては、買い注文(ORDER_TYPE_BUY)や売り注文(ORDER_TYPE_SELL)などがあります。

initial_margin_rate
初期の証拠金率を受け取るためのdouble型変数です。この変数には、適切な方向での1ロットの証拠金率が格納されます。これにより、指定された注文の種類に対して必要な証拠金の額がわかります。

maintenance_margin_rate
維持証拠金率を受け取るためのdouble型変数です。この変数には、適切な方向に1ロットの建玉の維持に必要な最小限の資金の割合が格納されます。維持証拠金率を確認することで、ポジションを維持するために必要な資金を把握することができます。

SymbolInfoMarginRate関数の戻り値について

SymbolInfoMarginRate関数は、指定された銘柄の証拠金率情報を正常に取得できた場合に true を返します。関数の実行が失敗した場合には false を返します。

戻り値の詳細

  • true: 銘柄の証拠金率情報を正常に取得できた場合。
  • false: 証拠金率情報の取得に失敗した場合。失敗した場合、GetLastError関数を使用してエラーの詳細を確認することができます。

この関数戻り値を確認することで、証拠金率情報が正しく取得できたかどうかを判定することができます。取得に失敗した場合は、エラーコードを用いて原因を特定し、適切な対処を行うことが重要です。

SymbolInfoMarginRate関数を使う際の注意点

この関数は、取引サーバーからのデータ取得に依存しているため、ネットワーク接続の問題やサーバーの応答速度に影響される場合があります。したがって、関数が false を返した場合には、エラーコードを確認し、再試行するロジックを組み込むことが推奨されます。

初期証拠金率と維持証拠金率の取得は、特定の注文の種類に依存します。注文の種類が不適切である場合、正確な証拠金率を取得できないことがあります。ENUM_ORDER_TYPE型の値が正しく設定されているかを確認することが重要です。

取得した証拠金率の値は市場の変動に応じて変化する可能性があるため、定期的に更新する必要があります。古いデータに基づいて判断すると、誤ったリスク管理につながることがあります。

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

// シンボル名を定義します。現在のチャートのシンボルを使用します
#define SYMBOL_NAME Symbol()

//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                    |
//+------------------------------------------------------------------+
void OnStart()
{
    // 証拠金率を格納する変数を宣言します
    double initial_margin_rate = 0.0;     // 初期証拠金率
    double maintenance_margin_rate = 0.0; // 維持証拠金率

    // 買い市場注文のSYMBOL_NAMEシンボル比率を取得して操作ログに送信します
    SymbolInfoMarginRatePrint(SYMBOL_NAME, ORDER_TYPE_BUY, initial_margin_rate, maintenance_margin_rate);

    // 売り市場注文のSYMBOL_NAMEシンボル比率を取得して操作ログに送信します
    SymbolInfoMarginRatePrint(SYMBOL_NAME, ORDER_TYPE_SELL, initial_margin_rate, maintenance_margin_rate);
}

//+------------------------------------------------------------------+
//| 証拠金比率を操作ログに送信する関数                               |
//+------------------------------------------------------------------+
void SymbolInfoMarginRatePrint(const string symbol, const ENUM_ORDER_TYPE order_type, double &initial_margin_rate, double &maintenance_margin_rate)
{
    // 成行注文のsymbol比率を取得します
    ResetLastError();
    if (!SymbolInfoMarginRate(symbol, order_type, initial_margin_rate, maintenance_margin_rate))
    {
        // 関数が失敗した場合、エラーメッセージをエキスパートログに出力します
        Print("SymbolInfoMarginRate関数の呼び出しに失敗しました。エラーコード: ", GetLastError());
        return;
    }

    // 注文の種類に応じたメッセージを作成します
    string type = (order_type == ORDER_TYPE_BUY ? "買い" : order_type == ORDER_TYPE_SELL ? "売り" : "不明");

    // 取得した証拠金率をエキスパートログに出力します
    PrintFormat("銘柄 %s の %s 市場注文に対する初期証拠金率: %f\n" +
                "銘柄 %s の %s 市場注文に対する維持証拠金率: %f",
                SYMBOL_NAME, type, initial_margin_rate,
                SYMBOL_NAME, type, maintenance_margin_rate);
}

サンプルコード解説1:グローバル領域定義とOnStart関数

以下のコードは、SymbolInfoMarginRate関数を使用して、指定されたシンボルの買い注文と売り注文に対する証拠金率を取得し、それを操作ログに出力するサンプルプログラムです。

// シンボル名を定義します。現在のチャートのシンボルを使用します
#define SYMBOL_NAME Symbol()

この部分では、定数SYMBOL_NAMEを定義しています。Symbol関数は、現在のチャートのシンボル名を返します。これにより、コード内でSYMBOL_NAMEを使用することで、現在のチャートのシンボル名を簡単に参照できます。

//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                    |
//+------------------------------------------------------------------+
void OnStart()
{
    // 証拠金率を格納する変数を宣言します
    double initial_margin_rate = 0.0;     // 初期証拠金率
    double maintenance_margin_rate = 0.0; // 維持証拠金率

OnStart関数は、スクリプトが実行されたときに最初に呼び出される関数です。ここでは、初期証拠金率と維持証拠金率を格納するための変数initial_margin_rateとmaintenance_margin_rateを宣言し、それぞれ0.0で初期化しています。

    // 買い市場注文のSYMBOL_NAMEシンボル比率を取得して操作ログに送信します
    SymbolInfoMarginRatePrint(SYMBOL_NAME, ORDER_TYPE_BUY, initial_margin_rate, maintenance_margin_rate);

この行では、SymbolInfoMarginRatePrint関数を呼び出して、SYMBOL_NAMEシンボルの買い市場注文に対する証拠金率を取得し、それを操作ログに出力します。ORDER_TYPE_BUYは買い注文を示す定数です。

    // 売り市場注文のSYMBOL_NAMEシンボル比率を取得して操作ログに送信します
    SymbolInfoMarginRatePrint(SYMBOL_NAME, ORDER_TYPE_SELL, initial_margin_rate, maintenance_margin_rate);
}

この行では、先ほどと同様にSymbolInfoMarginRatePrint関数を呼び出して、SYMBOL_NAMEシンボルの売り市場注文に対する証拠金率を取得し、それを操作ログに出力します。ORDER_TYPE_SELLは売り注文を示す定数です。

これにより、指定されたシンボルに対する買い注文と売り注文の証拠金率をそれぞれ取得し、ログに出力することができます。

サンプルコード解説2:SymbolInfoMarginRatePrint関数(オリジナル関数)

以下のコードは、SymbolInfoMarginRate関数を使用して、指定されたシンボルの証拠金率を取得し、それを操作ログに出力する関数です。この関数は、OnStart関数内で呼び出されます。

//+------------------------------------------------------------------+
//| 証拠金比率を操作ログに送信する関数                               |
//+------------------------------------------------------------------+
void SymbolInfoMarginRatePrint(const string symbol, const ENUM_ORDER_TYPE order_type, double &initial_margin_rate, double &maintenance_margin_rate)
{
    // 成行注文のsymbol比率を取得します
    ResetLastError();

この部分では、SymbolInfoMarginRatePrint関数の定義が始まります。関数は、シンボル名、注文の種類、初期証拠金率、および維持証拠金率を引数として受け取ります。まず、ResetLastError関数を呼び出して、エラーコードをリセットします。

    if (!SymbolInfoMarginRate(symbol, order_type, initial_margin_rate, maintenance_margin_rate))
    {
        // 関数が失敗した場合、エラーメッセージをエキスパートログに出力します
        Print("SymbolInfoMarginRate関数の呼び出しに失敗しました。エラーコード: ", GetLastError());
        return;
    }

次に、SymbolInfoMarginRate関数を呼び出して、指定されたシンボルの証拠金率を取得します。関数が失敗した場合、エラーメッセージをエキスパートログに出力し、関数の実行を終了します。

    // 注文の種類に応じたメッセージを作成します
    string type = (order_type == ORDER_TYPE_BUY ? "買い" : order_type == ORDER_TYPE_SELL ? "売り" : "不明");

この部分では、注文の種類に応じてメッセージを作成します。注文の種類が買い注文であれば「買い」、売り注文であれば「売り」、それ以外の場合は「不明」となります。

三項演算子の解説

ここで使用されている三項演算子について解説します。三項演算子は、条件式、真の場合の値、偽の場合の値の3つの部分から構成されます。上記のコードでは、以下のように使われています。

string type = (order_type == ORDER_TYPE_BUY ? "買い" : order_type == ORDER_TYPE_SELL ? "売り" : "不明");

このコードは次のように動作します。

  1. order_type が ORDER_TYPE_BUYと等しい場合、type には「買い」が格納されます。
  2. order_type が ORDER_TYPE_BUYでない場合、次に order_type が ORDER_TYPE_SELLと等しいかをチェックします。
  3. order_type が ORDER_TYPE_SELLと等しい場合、type には「売り」が格納されます。
  4. 上記のどちらでもない場合、type には「不明」が格納されます。

三項演算子の一般的な形式は次の通りです。

条件式 ? 真の場合の値 : 偽の場合の値

フォーマット指定子の解説

    // 取得した証拠金率をエキスパートログに出力します
    PrintFormat("銘柄 %s の %s 市場注文に対する初期証拠金率: %f\n" +
                "銘柄 %s の %s 市場注文に対する維持証拠金率: %f",
                SYMBOL_NAME, type, initial_margin_rate,
                SYMBOL_NAME, type, maintenance_margin_rate);
}

PrintFormat関数は、フォーマット指定子を使用して文字列を整形し、エキスパートログに出力します。上記のコードで使用されているフォーマット指定子は以下の通りです。

これにより、指定されたシンボルに対する注文の種類ごとの証拠金率がエキスパートログに整形された形で記録されます。フォーマット指定子を使用することで、出力内容を簡単に整形し、読みやすくすることができます。

このように、SymbolInfoMarginRatePrint関数は、SymbolInfoMarginRate関数を使用して証拠金率を取得し、その結果を操作ログに出力する役割を果たします。この関数を使用することで、証拠金率の取得とログ出力を簡単に行うことができます。

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