Configuración del margen de la cuenta

Para los robots de trading es importante controlar la cantidad de margen bloqueado y la cantidad disponible para asegurar nuevas operaciones. En concreto, si no hay suficientes fondos libres, el programa no podrá ejecutar una operación. Cuando se mantienen abiertas posiciones no rentables, primero se recibe un Margin Call, y si no se cumple, el bróker fuerza el cierre de las posiciones (Stop Out). Todas las propiedades de cuenta asociadas se incluyen en la enumeración ENUM_ACCOUNT_INFO_DOUBLE.

Identificador

Descripción

ACCOUNT_MARGIN

Margen reservado actual de la cuenta en la divisa del depósito

ACCOUNT_MARGIN_FREE

Margen libre actual en la cuenta en la divisa del depósito, disponible para abrir una posición

ACCOUNT_MARGIN_LEVEL

Nivel de margen de la cuenta en porcentaje (fondos propios/margen*100)

ACCOUNT_MARGIN_SO_CALL

El nivel de margen mínimo al que se exigirá la reposición de la cuenta (Margin Call)

ACCOUNT_MARGIN_SO_SO

El nivel de margen mínimo al que se obligará a cerrar la posición menos rentable (Stop Out)

ACCOUNT_MARGIN_INITIAL

Fondos reservados en la cuenta para proporcionar margen a todas las órdenes pendientes

ACCOUNT_MARGIN_MAINTENANCE

Fondos reservados en la cuenta para proporcionar el margen mínimo requerido para todas las posiciones abiertas

ACCOUNT_MARGIN_SO_CALL y ACCOUNT_MARGIN_SO_SO se expresan como porcentaje o en divisa de depósito en función del ACCOUNT_MARGIN_SO_MODE configurado (véase más adelante). Esta propiedad, con la posibilidad de medir umbrales de margen para Margin Call o Stop Out, está incluida en la enumeración ENUM_ACCOUNT_INFO_INTEGER. Además, aquí se indica también el apalancamiento total (utilizado para calcular el margen de determinados tipos de instrumentos).

Identificador

Descripción

ACCOUNT_LEVERAGE

El importe de apalancamiento

ACCOUNT_MARGIN_SO_MODE

El modo para establecer el nivel de margen mínimo permitido de la enumeración ENUM_ACCOUNT_STOPOUT_MODE

Y aquí están los elementos de la enumeración ENUM_ACCOUNT_STOPOUT_MODE:

Identificador

Descripción

ACCOUNT_STOPOUT_MODE_PERCENT

El nivel se establece como porcentaje

ACCOUNT_STOPOUT_MODE_MONEY

El nivel se establece en la divisa de la cuenta

Por ejemplo, para la opción ACCOUNT_STOPOUT_MODE_PERCENT, el porcentaje especificado (Margin Call o Stop Out) debe comprobarse frente a la relación entre el capital y el valor de la propiedad ACCOUNT_MARGIN:

AccountInfoDouble(ACCOUNT_EQUITY) / AccountInfoDouble(ACCOUNT_MARGIN) * 100
   > AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL)

En la siguiente sección encontrará más detalles sobre la propiedad ACCOUNT_EQUITY y otros indicadores financieros de la cuenta.

Sin embargo, el nivel de margen actual en porcentaje ya se proporciona en la propiedad ACCOUNT_MARGIN_LEVEL. Esto es fácil de comprobar utilizando el script AccountInfo.mq5 que registra todas las propiedades de la cuenta, incluidas las enumeradas anteriormente.

Ya hemos ejecutado este script en la sección Identificación de la cuenta. En ese momento se abrió una posición (1 lote USDRUB, igual a 100 000 USD), y las finanzas eran las siguientes:

  0 ACCOUNT_BALANCE=10000.00
  1 ACCOUNT_CREDIT=0.00
  2 ACCOUNT_PROFIT=-78.76
  3 ACCOUNT_EQUITY=9921.24
  4 ACCOUNT_MARGIN=1000.00
  5 ACCOUNT_MARGIN_FREE=8921.24
  6 ACCOUNT_MARGIN_LEVEL=992.12
  7 ACCOUNT_MARGIN_SO_CALL=50.00
  8 ACCOUNT_MARGIN_SO_SO=30.00

Con un margen de 1000.00 USD es fácil comprobar que el apalancamiento de la cuenta, ACCOUNT_LEVERAGE, es efectivamente 100 (según la fórmula para calcular margen para Forex y coeficiente de margen que es igual a 1.0). No es necesario convertir el importe del margen al tipo de cambio vigente en la divisa de la cuenta, ya que es el mismo que el de la divisa base del instrumento.

Para obtener 992.12 en ACCOUNT_MARGIN_LEVEL, basta con dividir 9921.24 por 1000.00 y multiplicar por 100 %.

A continuación se abrió otra posición de 1 lote, y las cotizaciones tomaron una dirección desfavorable, como resultado de lo cual la situación cambió:

  0 ACCOUNT_BALANCE=10000.00
  1 ACCOUNT_CREDIT=0.00
  2 ACCOUNT_PROFIT=-1486.07
  3 ACCOUNT_EQUITY=8513.93
  4 ACCOUNT_MARGIN=2000.00
  5 ACCOUNT_MARGIN_FREE=6513.93
  6 ACCOUNT_MARGIN_LEVEL=425.70

Podemos ver una pérdida en la columna ACCOUNT_PROFIT y una disminución correspondiente del capital ACCOUNT_EQUITY. El margen ACCOUNT_MARGIN aumentó proporcionalmente de 1000 a 2000, el margen libre y el nivel de margen disminuyeron (pero aún lejos de los límites del 50 % y el 30 %). De nuevo, el nivel 425.70 se obtiene como resultado de calcular la expresión 8513.93 / 2000.00 * 100.

Resulta más práctico utilizar esta fórmula para calcular el nivel de margen futuro antes de abrir una nueva posición. En este caso, es necesario aumentar el importe del margen existente con el margen adicional de X. Además, si una transacción de entrada en el mercado implica una deducción instantánea de la comisión C, entonces, en términos estrictos, ésta también debe tenerse en cuenta (aunque por lo general tiene un tamaño significativamente menor que el margen y se puede descuidar, además de que la API no proporciona una manera de averiguar la comisión por adelantado, antes de realizar una operación: sólo se puede estimar por las comisiones de las operaciones ya completadas en el historial de trading).

(AccountInfoDouble(ACCOUNT_EQUITY) - C) / (AccountInfoDouble(ACCOUNT_MARGIN) + X) * 100
   > AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL)

Más adelante aprenderemos a obtener el valor de X utilizando la función OrderCalcMargin, pero además de ello pueden ser necesarios ajustes según las normas anunciadas en la sección Requisitos de margen, en concreto, teniendo en cuenta posibles cobertura de posiciones, descuentos y ajustes de margen.

Para la opción de establecer el límite de margen en dinero (ACCOUNT_STOPOUT_MODE_MONEY), la comprobación de fondos suficientes debe ser diferente.

AccountInfoDouble(ACCOUNT_EQUITY) > AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL)

Aquí se omite la comisión. Tenga en cuenta que el margen X para una nueva posición que se está preparando para abrir «ahora» no afecta en modo alguno a la evaluación del margen «futuro».

En cualquier caso, no obstante, conviene no cargar el depósito hasta el punto de que apenas se cumplan las desigualdades. Los valores de ACCOUNT_MARGIN_SO_CALL y ACCOUNT_MARGIN_SO_SO son bastante cercanos, y aunque el margen en el nivel ACCOUNT_MARGIN_SO_CALL es sólo una advertencia para el operador, es fácil conseguir un cierre forzado. Por eso las fórmulas utilizan la propiedad ACCOUNT_MARGIN_SO_CALL.