Coeficientes de margen de los símbolos

Entre las características de la especificación de símbolos disponibles en la API de MQL5, que trataremos en detalle en secciones posteriores, hay varias características relacionadas con los requisitos en materia de márgenes, que se aplican al abrir y mantener posiciones de trading. Debido al hecho de que el terminal ofrece trading en diferentes mercados y diferentes tipos de instrumentos, estos requisitos pueden variar significativamente. De forma generalizada, esto se expresa en la aplicación de tasas de corrección de los márgenes que se fijan individualmente para los símbolos y los distintos tipos de operaciones de trading. Para el usuario, las tasas se muestran en el terminal en la ventana Specifications.

Como veremos a continuación, el multiplicador (si se aplica) se multiplica por el valor del margen de las propiedades del símbolo. El coeficiente de margen puede obtenerse mediante programación utilizando la función SymbolInfoMarginRate.

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

Para el símbolo y el tipo de orden especificados (ENUM_ORDER_TYPE), la función rellena los parámetros pasados por referencia initial y maintenance con los coeficientes de margen inicial y de mantenimiento, respectivamente. Las tasas resultantes deben multiplicarse por el valor del margen del tipo correspondiente (la forma de solicitarlo se describe en la sección sobre requisitos de margen) para obtener el importe que se reservará en la cuenta al realizar una orden como orderType.

La función devuelve true en caso de éxito.

Utilicemos como ejemplo un sencillo script SymbolMarginRate.mq5, que muestra los coeficientes de margen de Observación de Mercado o de todos los símbolos disponibles, en función del parámetro MarketWatchOnly. El tipo de operación puede especificarse en el parámetro 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);
   }
}

A continuación se muestra el registro:

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

Puede comparar los valores recibidos con las especificaciones de símbolos del terminal.