Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 15

 
Renat Akhtyamov:
vamos a ver el código.
Lo mezclas.
 
A1exPit:
Lo revuelves.
Entonces, buena suerte.
 
Renat Akhtyamov:
entonces buena suerte.
¿No es importante el código en la pregunta que has hecho? Podrías haber escrito... no sé, pero de alguna manera funciona.
 
A1exPit:
¿No es importante el código en esta pregunta? Podrías haber escrito simplemente "no sé", pero parece que funciona.

La pregunta es sobre el código, así que no puedes hacerlo sin el código.

¿Pregunta por los modificadores o por la tramitación del pedido?

No sé lo que necesitas. Pero el error está en el código - 100%.

 

Por favor, aconsejar cómo utilizar MQL4 para obtener un valor de margen para cada posición abierta en el terminal?

Yo lo hacía así:

margin = MarketInfo(Symbol(),MODE_LOTSIZE) * OrderOpenPrice() / AccountLeverage() * OrderLots();

Al operar con el EUR/USD esta construcción funcionaba bien y estaba seguro de que su lógica era correcta.

Pero ahora quiero obtener el mismo resultado para EUR/JPY (o EUR/CHF). Obviamente, en lugar deOrderOpenPrice() necesito multiplicar el valor de un lote estándar por la tasa de la moneda base a la moneda de depósito (en mi caso, por EUR/USD). Pero, ¿qué es esta tasa? ¿La que había en el momento de la apertura de la posición o la que hay ahora (en el momento en que queremos saber el importe del depósito para esta posición)?

 
Babu Bonappan:

Por favor, aconsejar cómo utilizar MQL4 para obtener un valor de margen para cada posición abierta en el terminal?

Yo lo hacía así:

margin = MarketInfo(Symbol(),MODE_LOTSIZE) * OrderOpenPrice() / AccountLeverage() * OrderLots();

Al operar con el EUR/USD esta construcción funcionaba bien y estaba seguro de que su lógica era correcta.

Pero ahora quiero obtener el mismo resultado para EUR/JPY (o EUR/CHF). Obviamente, en lugar deOrderOpenPrice() necesito multiplicar el valor de un lote estándar por la tasa de la moneda base a la moneda de depósito (en mi caso, por EUR/USD). Pero, ¿qué es esta tasa? ¿La que existía en el momento de la apertura de la posición, o la que existe ahora (en el momento en que queremos saber el importe del depósito para esta posición)?

margin = MarketInfo(OrderSymbol(),MODE_MARGINREQUIRED) * OrderLots();

El resultado no será preciso.

O bien, puede encontrar el tipo de cambio del par de divisas necesario en el gráfico hasta el momento de la apertura de la orden y, si es necesario, considerar el diferencial (bid/ask) y calcular el valor más preciso del margen en el momento de la apertura de la orden utilizando la siguiente fórmula

El escollo puede ser el cálculo del margen en un momento en que el apalancamiento era diferente

 
¿Qué pasa si el tipo de cambio EUR/USD se escribe en el campo de comentarios cuando se abre la orden y luego se lee desde ahí?
 
Babu Bonappan:
¿Qué pasa si el tipo de cambio EUR/USD se escribe en el campo de comentarios cuando se abre la orden y luego se lee desde ahí?

Comentario para otros fines.

Así es como se averigua el precio:

         string Symbol_X="USDCHF";
        
         int bs=iBarShift(OrderSymbol(),Period(),OrderOpenTime());
         double bid_X=iClose(Symbol_X,Period(),bs);
 
Renat Akhtyamov:

Comentario para otros fines.

Así es como se averigua el precio:

         string Symbol_X="USDCHF";
        
         int bs=iBarShift(OrderSymbol(),Period(),OrderOpenTime());
         double price_X=iClose(Symbol_X,Period(),bs);

Si operamos, por ejemplo, en gráficos diarios, obtendremos el precio de apertura del día, en algún punto intermedio en el que se abrió la orden que nos interesa, ¿no? Y puede ser significativamente diferente del precio que había en el momento de la apertura.

 
Babu Bonappan:

Así que si operamos en, digamos, gráficos diarios, obtendremos el precio de apertura del día, en algún punto intermedio en el que se abrió la orden que nos interesa, ¿no? Y puede ser significativamente diferente del precio al que se abrió.

Nadie insiste en utilizar Period()

Especifique expresamente PERIOD_M15, por ejemplo, u otro