Маржинальные коэффициенты по символу

Среди характеристик спецификации символа, которые доступны в MQL5 API и подробно рассматриваемых в следующих разделах, есть несколько связанных с маржинальными (залоговыми) требованиями — они, как известно, предъявляются при открытии и поддержании торговых позиций. В связи с тем, что терминал обеспечивает торговлю на разных рынках, разными типами инструментов, эти требования могут существенно варьироваться. В обобщенном виде это выражается в применении поправочных коэффициентов маржи, задаваемых индивидуально для символов и разных типов торговых операций. Для пользователя коэффициенты выводятся в терминале в окне Спецификации.

Как мы увидим далее, коэффициент (если он применяется) умножается на величину маржи из свойств символа. Для получения коэффициента маржи программным способом существует функция SymbolInfoMarginRate.

bool SymbolInfoMarginRate(const string symbol, ENUM_ORDER_TYPE orderType, double &initial, double &maintenance)

Для указанного символа и типа приказа (ENUM_ORDER_TYPE) функция заполняет переданные по ссылке параметры initial и maintenance коэффициентами маржи — соответственно, начальной и поддерживающей. Полученные коэффициенты следует умножить на величину маржи соответствующего типа (как её запросить, рассказано в разделе о маржинальных требованиях), чтобы получить размер средств, который будет зарезервирован на счете при размещении приказа типа orderType.

Функция возвращает true в случае удачного выполнения.

В качестве примера используем простой скрипт SymbolMarginRate.mq5, который выводит коэффициенты маржи для символов Обзора рынка или всех доступных, в зависимости от параметр MarketWatchOnly. Тип операции можно указать в параметре OrderType.

#include <MQL5Book/MqlError.mqh>
   
input bool MarketWatchOnly = true;
input ENUM_ORDER_TYPE OrderType = ORDER_TYPE_BUY;
   
void OnStart()
{
   const int n = SymbolsTotal(MarketWatchOnly);
   PrintFormat("Margin rates per symbol for %s:"EnumToString(OrderType));
   for(int i = 0i < n; ++i)
   {
      const string s = SymbolName(iMarketWatchOnly);
      double initial = 1.0maintenance = 1.0;
      if(!SymbolInfoMarginRate(sOrderTypeinitialmaintenance))
      {
         PrintFormat("Error: %s(%d)"E2S(_LastError), _LastError);
      }
      PrintFormat("%4d %s = %f %f"isinitialmaintenance);
   }
}

Ниже приведен фрагмент журнала.

Margin rates per symbol for ORDER_TYPE_BUY:
   0 EURUSD = 1.000000 0.000000
   1 XAUUSD = 1.000000 0.000000
   2 BTCUSD = 0.330000 0.330000
   3 USDCHF = 1.000000 0.000000
   4 USDJPY = 1.000000 0.000000
   5 AUDUSD = 1.000000 0.000000
   6 USDRUB = 1.000000 1.000000

Вы можете сравнить полученные значения со спецификациями символов в терминале.