¿Cómo se calcula el margen?

 

¡Buenas tardes!

De repente, me encontré con una situación en la que el margen de las posiciones abiertas ha aumentado considerablemente (20 veces). Existe la sospecha de que el corredor ha aumentado los requisitos de margen para las posiciones abiertas. Esta suposición se confirma por el valor inusualmente alto de AccountMargin, que es varias veces superior al valor calculado para este instrumento y el apalancamiento establecido.

En una de las cuentas en tal situación, tuve que cerrar las últimas posiciones abiertas con mayor volumen con pérdidas para reducir la carga del depósito y no permitir el Stop Out. Y en algún momento (después de cerrar otra posición perdedora) el valorde AccountMargin volvió al nivel calculado. Tal vez, no lo he notado de inmediato y, por lo tanto, no puedo decir con certeza para qué posiciones se han aplicado los requisitos de margen incrementados.

Todavía no he hecho nada en la otra cuenta, salvo abrir una orden de bloqueo. Ahora tengo que hacer una reclamación al broker indicando qué órdenes se abrieron con mayores requisitos de margen. Y esto plantea una pregunta:

¿Existe alguna forma de averiguar el importe de la garantía (margen) para cada posición abierta por separado en el terminal? En el terminal sólo veo el importe total del margen, el mismo valor que devuelve AccountMargin(). En la Referencia MQL4 no he encontrado una función adecuada con el prefijo Order. Sería lógico suponer que este valor puede obtenerse utilizando OrderGetDouble(), pero de nuevo, no hay un valor apropiado enENUM_ORDER_PROPERTY_DOUBLE.

Por favor, dígame cómo puedo obtener el tamaño del depósito para una sola posición abierta en la terminal MT4.

 
Puede leerloaquí.
Как получить программно "Процент маржи"
Как получить программно "Процент маржи"
  • 2017.05.31
  • www.mql5.com
В окне терминала "Спецификации контракта" есть пункт "Процент маржи...
 
Alexey Viktorov:
Puede leerlo aquí.

Gracias, lo he leído. Hay un script en la página 7 para calcular el valor del margen calculado para cada posición abierta. Lo he ajustado un poco, teniendo en cuenta que no es CFD, sino FOREX, y lo he recopilado de esta forma:

void OnStart()
{
 double size = 0, percentage = 0, orderMargin = 0, accountMargin = 0;
 long leverage = 0;
 for(int i = 0; i < OrdersTotal(); i++)
  {
   int tupe = -1;
   if(OrderSelect(i, SELECT_BY_POS) && (tupe=OrderType()) < OP_BUYLIMIT)
    {
     string symbol = OrderSymbol();
     string symbolCurencyMargin = SymbolInfoString(symbol, SYMBOL_CURRENCY_MARGIN);
     double orderOpenPrice = OrderOpenPrice();
     double orderLots = OrderLots();
     double margin = MarketInfo(symbol, MODE_MARGINREQUIRED);
     double ask = MarketInfo(symbol, MODE_ASK);
     double bid = MarketInfo(symbol, MODE_BID);
     double price = symbolCurencyMargin == "USD" ? 1 : tupe == OP_BUY ? bid : ask;
      size = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE);
      leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
      percentage = NormalizeDouble(margin/(size*price/100)*leverage, 0);
      //orderMargin = (size*orderOpenPrice*percentage/100)/leverage;
      orderMargin = (orderLots*size*orderOpenPrice)/leverage;
      accountMargin += orderMargin;
      Print(symbolCurencyMargin, " ******** Маржа ", symbol, " = ", orderMargin);
    }
  }
 Print(AccountInfoString(ACCOUNT_CURRENCY), " ******** AccountMargin = ", DoubleToString(accountMargin, 2));
}

En la gran mayoría de los casos, el valor final del margen calculado por este script coincide con el real. Pero, por desgracia, no en mi caso. El problema es que la fórmula para calcular el margen de cada orden utiliza el valor del apalancamiento activo en ese momento.

Pero en los reglamentos de algunos brokers (sin señalar a nadie) se especifica que para las posiciones que se abren bajo ciertas condiciones (viernes por la noche, método de promediación, etc.) se especifica el apalancamiento, que suele ser varias veces menor que para toda la cuenta. Ese es exactamente mi caso. Sin embargo, para preparar correctamente una reclamación y evitar que se repita esta situación en el futuro, necesito averiguar qué posiciones se han abierto con un apalancamiento normal y cuáles con un apalancamiento mayor.

El equipo de soporte del broker dice abiertamente que el aumento del apalancamiento no se establece para la cuenta en su conjunto, sino para órdenes específicas y esto ocurre después de que se haya abierto la posición. Por lo tanto, es inútil utilizar la solicitud AccountFreeMarginChek.

Esto plantea una pregunta: ¿hay alguna manera de saber de forma fiable qué margen se utiliza realmente para cada posición en el terminal, si sabemos que el corredor puede establecer un apalancamiento diferente para cada posición?

 
Janis Ozols:

Pero en los reglamentos de algunos brokers (no señalemos con el dedo) se prescribe que para las posiciones abiertas en determinadas condiciones (viernes por la noche, método de promediación, etc.) se establece un apalancamiento especial, normalmente varias veces inferior al de toda la cuenta. Ese es exactamente mi caso. Pero para poder reclamar adecuadamente y evitar que se repita esta situación en el futuro, necesito saber qué posiciones se han abierto con un apalancamiento normal y cuáles con un apalancamiento mayor.

1) El corredor siempre tiene razón.
2) Si el corredor se equivoca, lea la regla nº 1.

 
Janis Ozols:

Gracias, lo he leído. Hay un script en la página 7 para calcular el valor del margen calculado para cada posición abierta. Lo he ajustado un poco, teniendo en cuenta que no es CFD, sino FOREX, y lo he recopilado de esta forma:

En la gran mayoría de los casos, el valor final del margen calculado por este script coincide con el real. Pero, por desgracia, no en mi caso. El problema es que la fórmula para calcular el margen de cada orden utiliza el valor del apalancamiento activo en ese momento.

Pero en los reglamentos de algunos brokers (sin señalar a nadie) se especifica que para las posiciones que se abren bajo ciertas condiciones (viernes por la noche, método de promediación, etc.) se especifica el apalancamiento, que suele ser varias veces menor que para toda la cuenta. Ese es exactamente mi caso. Sin embargo, para preparar correctamente una reclamación y evitar que se repita esta situación en el futuro, necesito averiguar qué posiciones se han abierto con un apalancamiento normal y cuáles con un apalancamiento mayor.

El equipo de soporte del corredor dice abiertamente que el aumento del apalancamiento no se establece para la cuenta en su conjunto, sino para órdenes específicas y esto sucede después de que la posición ha sido abierta. Por lo tanto, es inútil utilizar la solicitud AccountFreeMarginChek.

En realidad, esto nos lleva a la siguiente pregunta: ¿Hay alguna forma de saber de forma fiable qué margen se utiliza realmente para cada posición en el terminal, si sabemos que el corredor puede establecer un apalancamiento diferente para cada posición?

No pierda su tiempo en correspondencia inútil. Está escrito en la normativa y discutir es como luchar contra molinos de viento.

No se trata del símbolo, sino de la hora de apertura. Muchos lo tienen 15 minutos antes del cierre del fin de semana. Y 15 minutos después, el lunes, el apalancamiento vuelve a la normalidad.

 
Alexey Viktorov:

No pierdas el tiempo con correspondencia inútil. Está escrito en la normativa y discutir es como luchar contra molinos de viento.

Quiero presentar una queja principalmente para que me aclaren las normas para aplicar un mayor apalancamiento. La normativa no es muy clara al respecto.

Lo principal que quiero entender es cómo evitar esta situación en el futuro. En concreto, en el reglamento de mi corredor, la cláusula en cuestión contiene la vaga expresión "la empresa se reserva el derecho". Es decir, pueden o no aplicar mayores requisitos de margen a una orden concreta. Por lo tanto, es muy importante para mí averiguar cómo detectar en el terminal las posiciones a las que se ha aplicado el apalancamiento aumentado (distinto del emitido por AccountLeverage). Por ejemplo, cerrar rápidamente esas posiciones para informar al operador y dejar de operar.

Seguro que hay alguna forma de solicitar al terminal la cantidad de margen para una sola posición. Pero aún no lo sé y no lo encuentro en la documentación.

 
Janis Ozols:

Quiero presentar una queja principalmente para que me aclaren las normas para aplicar el aumento del apalancamiento. No está muy claro en la normativa.

Lo principal que quiero entender es cómo evitar esta situación en el futuro. En concreto, en el reglamento de mi corredor, la cláusula en cuestión contiene la vaga expresión "la empresa se reserva el derecho". Es decir, pueden o no aplicar mayores requisitos de margen a una orden concreta. Por lo tanto, es muy importante para mí averiguar cómo detectar en el terminal las posiciones a las que se ha aplicado el apalancamiento aumentado (distinto del emitido por AccountLeverage). Por ejemplo, cerrar rápidamente esas posiciones para informar al operador y dejar de operar.

Seguro que hay alguna forma de solicitar al terminal la cantidad de margen para una sola posición. Pero aún no lo sé y no lo encuentro en la documentación.

No sé tu broker, pero hay casos en los que todo ha ido bien, cerramos una posición y conseguimos aumentar el margen. No hay forma de rastrear esto. Y nadie dará explicaciones. Sólo hay una salida: no opere en un momento en el que su margen pueda aumentar. Lo más probable es que esté regulado por el porcentaje de margen, no por el apalancamiento.

 

Calcule su propio margen y apalancamiento en el momento de abrir una posición, utilizando fórmulas disponibles públicamente.

Escriba el apalancamiento en el comentario o en el magik, o en general - escriba el margen ajustado al apalancamiento de una vez.

Tendrás algo que recordar

 
Alexey Viktorov:

No sé tu broker, pero hay casos en los que todo estaba bien, cerramos la posición y obtenemos un aumento del margen.

En mi broker es así: abrimos una posición y obtenemos un aumento del margen. Y en algunos casos sí y en otros no ("la empresa se reserva el derecho de...").


Alexey Viktorov:

Sólo hay una salida: no operar en un momento en el que pueda haber un aumento del margen. Lo más probable es que esté regulado por el porcentaje de margen, no por el apalancamiento.

En mi caso, esto, por desgracia, no ayuda. El margen puede aumentar en cualquier momento. Y está regulado por el apalancamiento. En cualquier caso, la normativa habla de apalancamiento. Me gustaría mucho evitar discutir las condiciones de negociación de un broker en particular en este hilo. Lo que realmente me interesa es cómo se puede obtener información del terminal sobre la cantidad de margen para una sola posición.

 
Renat Akhtyamov:

Calcule su propio margen y apalancamiento en el momento de abrir una posición, utilizando fórmulas disponibles públicamente.

Escriba el apalancamiento en el comentario o en el magik, o en general - escriba el margen ajustado al apalancamiento de una vez.

Tendrás algo que recordar.

Intenté hacerlo. Pero el problema es que el margen aumenta después de abrir una posición. En otras palabras, antes de abrir una posición, obtengo el valor calculado del margen para ella. E inmediatamente después de una llamada exitosa de OrderSend, pido al terminal el valor de AccountMargin. Y cumple plenamente mis expectativas. Pero al cabo de un tiempo este valor aumenta considerablemente. Y el valorde AccountMargin resulta ser decenas de veces mayor que el importe del margen de cada orden abierta, obtenido inmediatamente después de su apertura.

Mi pregunta se reduce a cómo puede obtener el terminal en un momento dado el valor real del margen para una orden concreta.

Es AccountMargin() o AccountInfoDouble(ACCOUNT_MARGIN) para toda la cuenta. Por lo tanto, hay dos maneras de obtener este valor. Seguramente, debe haber al menos una forma de obtener el valor del margen de una orden. Simplemente no lo conozco, por eso pregunto.

 
Janis Ozols:

He probado esto. Pero el problema es que el margen aumenta después de abrir la posición. En otras palabras, antes de abrir una posición, obtengo el valor del margen calculado para ella. E inmediatamente después de una llamada exitosa de OrderSend, pido al terminal el valor de AccountMargin. Y cumple plenamente mis expectativas. Pero al cabo de un tiempo este valor aumenta considerablemente. Y el valorde AccountMargin resulta ser decenas de veces mayor que el importe del margen de cada orden abierta, obtenido inmediatamente después de su apertura.

Mi pregunta se reduce a cómo puede obtener el terminal en un momento dado el valor real del margen para una orden concreta.

Es AccountMargin() o AccountInfoDouble(ACCOUNT_MARGIN) para toda la cuenta. Por lo tanto, hay dos maneras de obtener este valor. Seguramente, debe haber al menos una forma de obtener el valor del margen de una orden. Simplemente no lo conozco todavía, por eso pregunto.

no es necesario preguntar

Considere fórmula

y el hombro, también. utilizando fórmulas

el terminal no rastrea el apalancamiento actual, sino que le da el que tenía cuando cargó el terminal

por eso el margen solicitado por esta función es diferente

Razón de la queja: