Cómo obtener el "Porcentaje de margen" mediante programación

 

En la ventana del terminal "Especificaciones del contrato" hay un elemento "Porcentaje de margen". Se supone que lo devuelve SymbolInfoDouble(), pero no he encontrado ningún valor entre sus especificadores que permita averiguar este "Porcentaje de Margen". ¿Cómo se puede obtener de forma programada?


 
¿Qué significa este porcentaje de margen?
 
Alexey Viktorov:
¿Qué significa este porcentaje de margen?
Se utiliza en el cálculo de la garantía CFD. Véase la descripción de ENUM_SYMBOL_CALC_MODE.
 

Perdón por la pregunta incompleta, debería haber preguntado más explícitamente.

¿Cuál es el objetivo de la pregunta? ¿Para comprobar si el margen está calculado correctamente/mal? Si no es así, se puede calcular a partir de esa fórmula en la descripción. ¿Y luego qué haces con él?

 
Alexey Viktorov:

Perdón por la pregunta incompleta, debería haber preguntado más explícitamente.

¿Cuál es el objetivo? ¿Para comprobar si el margen está calculado correctamente o no?

Con la imaginación adecuada, se puede llegar a un montón de objetivos. :) Y en absoluto para comprobar si es "correcto/incorrecto".

Si no es así, puede calcularse a partir de la fórmula de la descripción.

¿Cómo? Pues para eso está el "Porcentaje de Margen". ¿Sugiere que lo escribamos a mano?) El código debe ser capaz de obtenerlo programáticamente.

¿Y luego qué hacer con él?

Ahora la pregunta es - para obtener el valor de "Porcentaje de margen" programáticamente. Si está en la tabla, debe ser posible obtenerla mediante programación. Y lo que hay que hacer después es una cuestión aparte, que no es relevante para este tema.
 

verSymbolInfoDouble

SymbolInfoDouble(symbol, SYMBOL_MARGIN_INITIAL);
SymbolInfoDouble(symbol, SYMBOL_MARGIN_MAINTENANCE);
 
Taras Slobodyanik:

ver SymbolInfoDouble


Por desgracia, no es eso. En MT4 estos valores son, la mayoría de las veces, cero.
 

¿Está bien?

double procentMgn;
procentMgn=AccountBalance()*100/MarketInfo("GOLD",MODE_MARGINREQUIRED);
 
Renat Akhtyamov:

¿está bien?

No, no lo hará.

1. La función MarketInfo() está obsoleta.

2. MODE_MARGINREQUIRED devuelve el resultado correcto sólo para las posiciones largas, no es cierto para las cortas.

3. MODE_MARGINREQUIRED devuelve el resultado ya en la moneda del depósito, que no necesito.

4. No necesito el porcentaje del depósito. Sólo necesito el valor del parámetro "porcentaje de margen" para el símbolo. Y yo mismo puedo calcular lo que necesito.

 
ir0407:

No, no lo hará.

1. La función MarketInfo() está obsoleta.

2. MODE_MARGINREQUIRED devuelve el resultado correcto sólo para las posiciones largas, para las cortas es erróneo.

3. MODE_MARGINREQUIRED devuelve los resultados en la moneda del depósito, que no necesito.

4. No necesito un porcentaje del depósito. Sólo necesito el valor de "Porcentaje de margen" para el símbolo. Y puedo calcularlo yo mismo.

Si lo necesitas en MT5, ve a otra sección del foro.

No le sorprende su conocimiento común, o algo peor:

1. No se trata de la función MarketInfo(), sino de una expresión, cuyo resultado de cálculo será un porcentaje de

2. no tiene al menos 4 decimales, por lo que el % de margen para largos y cortos será el mismo.

3. simplemente multiplicar

procentMgn

Puedes usar 0,01 y serás feliz.

 
ir0407:

Con la imaginación adecuada, se puede pensar en muchos objetivos. :) Y en absoluto para la prueba del acierto/error.

¿Cómo funciona? Necesita este mismo "porcentaje de margen". ¿Quieres que lo escriba a mano?) El código debería ser capaz de obtenerlo mediante programación.

Ahora la pregunta es - para obtener el valor de "Porcentaje de margen" programáticamente. Si está en la tabla, debe ser posible obtenerla mediante programación. Y lo que hay que hacer después es una cuestión aparte que no es relevante para este tema.

Sí, bueno... La fantasía lo es todo... No entiendo por qué la gente que intenta ayudarte debe fantasear con lo que tú fantaseas... De todos modos, esa no es la cuestión.

¿Cómo se obtiene lo que se necesita de esa fórmula?

La fórmula en sí es Margen = Lotes *Tamaño del contrato*Precio de mercado*Porcentaje/100

Por lo tanto, porcentaje = Margen/(Lotes *Tamaño del contrato*Precio del mercado/100)

ir0407:

1. La función MarketInfo() está obsoleta.

Todavía no está en la lista de funciones obsoletas. Por lo tanto, produce el valor que falta para determinar el porcentaje de margen.

MarketInfo(_Symbol, MODE_MARGINREQUIRED);

Una vez obtenidos todos los datos en el momento actual, al precio actual, es fácil recalcular el margen que se retuvo al abrir la orden, al precio de apertura de la misma.

Si lo necesitas para mql5, debes usar

bool  SymbolInfoMarginRate( 
   string             name,                     // символ 
   ENUM_ORDER_TYPE    order_type,               // тип ордера 
   double&            initial_margin_rate,      // коэффициент взимания начальной маржи 
   double&            maintenance_margin_rate   // коэффициент взимания поддерживающей маржи 
   );
Устаревшие функции - Справочник MQL4
Устаревшие функции - Справочник MQL4
  • docs.mql4.com
Устаревшие функции - Справочник MQL4
Razón de la queja: