CustomSymbolSetMarginRate

カスタム銘柄の注文の種類と方向に応じて証拠金率を設定します。

bool  CustomSymbolSetMarginRate(
  const string      symbol_name,              // 銘柄名
  ENUM_ORDER_TYPE    order_type,               // 注文の種類
  double             initial_margin_rate,     // 当初証拠金率
  double             maintenance_margin_rate  // 維持証拠金率
  );

パラメータ

symbol_name

[in]  カスタム銘柄名

order_type

[in]  注文の種類

initial_margin_rate

[in] 当初証拠金率を表すdouble型の変数。当初証拠金とは、適切な方向の1ロットの取引に対する保証金です。レートに当初証拠金を掛けて、指定された種類の注文を出す時に口座に予約される金額を受け取ります。

maintenance_margin_rate

[in] 維持証拠金率を表すdouble型の変数。維持証拠金は、適切な方向の1ロットのポジションを維持するのに必要な最低限の証拠金です。レートに維持証拠金を掛けて、指定された種類の注文を出す時に口座に予約される金額を受け取ります。

戻り値

成功の場合はtrue、それ以外の場合はfalse。エラー情報を取得するためにはGetLastError()関数を呼び出します。

 

例:

//+------------------------------------------------------------------+
//|                                    CustomSymbolSetMarginRate.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link     "https://www.mql5.com"
#property version   "1.00"
 
#define   CUSTOM_SYMBOL_NAME     Symbol()+".C" // カスタマ銘柄名
#define   CUSTOM_SYMBOL_PATH     "Forex"       // 銘柄が作成されるグループの名前
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()       // カスタム銘柄の基となる銘柄の名前
 
#define   INITIAL_MARGIN_RATE       1.5         // 当初証拠金率
#define   MAINTENANCE_MARGIN_RATE   1.5         // 維持証拠金率
 
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- カスタム銘柄を作成するときにエラーコードを取得する
  int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAME, CUSTOM_SYMBOL_PATH, CUSTOM_SYMBOL_ORIGIN);
 
//--- エラーコードが0(銘柄の作成に成功)でも5304(銘柄がすでに作成されている)でもない場合は、終了する
  if(create!=0 && create!=5304)
    return;
     
//--- カスタム銘柄の基となる銘柄のプロパティを取得して操作ログに出力する
//--- (買い注文と売り注文の当初証拠金率と維持証拠金率)
  double initial_margin_rate_buy=0;
  double maintenance_margin_rate_buy=0;
  double initial_margin_rate_sell=0;
  double maintenance_margin_rate_sell=0;
 
  if(!GetSymbolMarginRate(CUSTOM_SYMBOL_ORIGIN, ORDER_TYPE_BUY, initial_margin_rate_buy, maintenance_margin_rate_buy))
    return;
  if(!GetSymbolMarginRate(CUSTOM_SYMBOL_ORIGIN, ORDER_TYPE_SELL,initial_margin_rate_sell,maintenance_margin_rate_sell))
    return;
 
  PrintFormat("The '%s' symbol from which the custom '%s' was created:\n"+
              "  Buy order initial margin rate: %f\n  Buy order maintenance margin rate: %f\n"+
              "  Sell order initial margin rate: %f\n  Sell order maintenance margin rate: %f",
              CUSTOM_SYMBOL_ORIGIN, CUSTOM_SYMBOL_NAME,
              initial_margin_rate_buy, maintenance_margin_rate_buy, initial_margin_rate_sell, maintenance_margin_rate_sell);
 
//--- カスタム銘柄プロパティのその他の値を設定する
  ResetLastError();
  bool res=true;
  res &=CustomSymbolSetMarginRate(CUSTOM_SYMBOL_NAME, ORDER_TYPE_BUY, INITIAL_MARGIN_RATE, MAINTENANCE_MARGIN_RATE);
  res &=CustomSymbolSetMarginRate(CUSTOM_SYMBOL_NAME, ORDER_TYPE_SELL,INITIAL_MARGIN_RATE, MAINTENANCE_MARGIN_RATE);
 
//--- いずれかのプロパティの設定時にエラーが発生した場合は、操作ログに適切なメッセージを表示する
  if(!res)
    Print("CustomSymbolSetMarginRate() failed. Error ", GetLastError());
 
//--- 変更されたカスタム銘柄のプロパティを取得して操作ログに出力する
//--- (買い注文と売り注文の当初証拠金率と維持証拠金率)
  if(!GetSymbolMarginRate(CUSTOM_SYMBOL_NAME, ORDER_TYPE_BUY, initial_margin_rate_buy, maintenance_margin_rate_buy))
    return;
  if(!GetSymbolMarginRate(CUSTOM_SYMBOL_NAME, ORDER_TYPE_SELL,initial_margin_rate_sell,maintenance_margin_rate_sell))
    return;
 
  PrintFormat("Custom symbol '%s' based on '%s':\n"+
              "  Buy order initial margin rate: %f\n  Buy order maintenance margin rate: %f\n"+
              "  Sell order initial margin rate: %f\n  Sell order maintenance margin rate: %f",
              CUSTOM_SYMBOL_NAME, CUSTOM_SYMBOL_ORIGIN,
              initial_margin_rate_buy, maintenance_margin_rate_buy, initial_margin_rate_sell, maintenance_margin_rate_sell);
 
//--- チャートのコメントにスクリプト終了キーに関するヒントを表示する
  Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit", CUSTOM_SYMBOL_NAME));
 
//--- EscキーまたはDelキーが押されるまで待機して無限ループを終了する
  while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
    {
    Sleep(16);
    //--- Delキーを押すと、作成したカスタム銘柄が削除される
    if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
       {
        if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
          PrintFormat("Custom symbol '%s' deleted successfully", CUSTOM_SYMBOL_NAME);
        break;
       }
    }
//--- 終了する前にチャートをクリアする
  Comment("");
  /*
   結果:
  The 'EURUSD' symbol from which the custom 'EURUSD.C' was created:
    Buy order initial margin rate: 1.000000
    Buy order maintenance margin rate: 0.000000
    Sell order initial margin rate: 1.000000
    Sell order maintenance margin rate: 0.000000
  Custom symbol 'EURUSD.C' based on 'EURUSD':
    Buy order initial margin rate: 1.500000
    Buy order maintenance margin rate: 1.500000
    Sell order initial margin rate: 1.500000
    Sell order maintenance margin rate: 1.500000
  */
 }
//+------------------------------------------------------------------+
//| カスタム銘柄ルを作成し、エラーコードを返す                                    |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_name, const string symbol_path, const string symbol_origin=NULL)
 {
//--- カスタム銘柄の基となる銘柄の名前をする
  string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
 
//--- カスタム銘柄の作成に失敗し、エラー5304ではない場合は、操作ログに報告する
  ResetLastError();
  int error=0;
  if(!CustomSymbolCreate(symbol_name, symbol_path, origin))
    {
    error=GetLastError();
    if(error!=5304)
        PrintFormat("CustomSymbolCreate(%s, %s, %s) failed. Error %d", symbol_name, symbol_path, origin, error);
    }
//--- 成功
  return(error);
 }
//+------------------------------------------------------------------+
//| カスタム銘柄を削除する                                                 |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
 {
//--- 気配値表示ウィンドウから銘柄を非表示にする
  ResetLastError();
  if(!SymbolSelect(symbol_name, false))
    {
    PrintFormat("SymbolSelect(%s, false) failed. Error %d", GetLastError());
    return(false);
    }
     
//--- カスタム銘柄の削除に失敗した場合は、操作ログにこれを報告してfalseを返す
  ResetLastError();
  if(!CustomSymbolDelete(symbol_name))
    {
    PrintFormat("CustomSymbolDelete(%s) failed. Error %d", symbol_name, GetLastError());
    return(false);
    }
//--- 成功
  return(true);
 }
//+------------------------------------------------------------------+
//| 証拠金率を返す                                                      |
//+------------------------------------------------------------------+
bool GetSymbolMarginRate(const string symbol, const ENUM_ORDER_TYPE order_type, double &initial_margin_rate, double &maintenance_margin_rate)
 {
  ResetLastError();
  if(!SymbolInfoMarginRate(symbol, order_type, initial_margin_rate, maintenance_margin_rate))
    {
    PrintFormat("%s: SymbolInfoMarginRate(%s, %s) failed. Error %d",__FUNCTION__, symbol, EnumToString(order_type), GetLastError());
    return false;
    }
  return true;
 }

 

参照

SymbolInfoMarginRate