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

 

DE ACUERDO.

Lo más importante para mí es aclararme, probablemente, si estoy en lo cierto al suponer que para calcular el margen de una operación concreta, se debe utilizar un valor fijo de la divisa base frente ala divisa de depósito, tomado en el momento de abrir la operación. ¿Es esto correcto? ¿Y el margen de esta operación se mantiene constante hasta que se cierra la orden? ¿Es esto correcto?

 
Babu Bonappan:

.....

Lo más importante para mí es aclarar probablemente si estoy o no en lo cierto al suponer que un valor fijo de la moneda base frente a la moneda de depósito, tomado en el momento de abrir la operación, debe utilizarse para calcular el margen de una operación concreta. ¿Es esto correcto? ¿Y el margen de esta operación se mantiene constante hasta que se cierra la orden? ¿Es esto correcto?

Sí, tienes razón.

Por lo tanto, el precio para calcular el margen es importante en el momento de abrir la orden

 
Renat, ¡muchas gracias por tu ayuda!
 
Babu Bonappan:
Renat, ¡muchas gracias por tu ayuda!
De nada.
 
Renat Akhtyamov:

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 en el código es del 100%.

No sabes nada, pero sacas conclusiones con seguridad.

Pregunto por OrderSelect

 
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? ¿El tipo de cambio que había en el momento de la apertura de la posición o el que tenemos ahora (en el momento en que queremos saber el importe del depósito para esta posición)?

El OrderOpenPrice - es el precio de apertura de la orden seleccionada - no hace ninguna diferencia en la moneda que se muestra. Probablemente debamos revisar Punto y Dígitos. O debería comprobar el redondeo. En algún lugar hay un redondeo.

NormalizeDouble a 5 decimales, y necesitamos 3 decimales para JPY. Y la propia vinculación debería funcionar de la misma manera para todas las monedas.

 
Babu Bonappan:
¿Qué pasa si en el momento de la apertura de la orden se escribe el tipo de cambio EUR/USD en el campo de comentarios y luego se lee desde allí?
Es más fácil escribir "USDJPY" en lugar de OrderSymbol()
 
A1exPit:
Es más fácil escribir "USDJPY" en lugar de OrderSymbol()

¿Por qué el USD/JPY? Después de todo, estamos negociando EUR/JPY, por lo que 1 lote es 100000 EUR, mientras que la moneda de depósito es USD. En mi opinión, en este caso necesitamos el tipo de cambio EUR/USD en el momento de abrir una operación.

Además, si establece un símbolo forzado en el código, éste no será adecuado para operar con otro par de divisas, por ejemplo NZD/CAD. Pero me gustaría conseguir una variante universal. Hasta ahora, sólo se me ocurre una forma de almacenar el importe del depósito de cada pedido calculado en el momento de su apertura. Tal vez podríamos crear un array para este fin donde se almacenaría el ticket de pedido y su depósito. Pero quizás haya una solución más trivial.

 
A1exPit:

OrderOpenPrice - Precio de apertura de la orden seleccionada - no importa la moneda que se utilice, da el precio. Lo más probable es que haya que comprobar Punto y Dígitos. O debería comprobar el redondeo. Deberíamos comprobar el redondeo.

NormalizeDouble tiene 5 decimales, mientras que JPY necesita 3 decimales. Y se supone que el propio aglutinante funciona igual para todas las monedas.

¿Y por qué mientes sobre el número de dígitos? No engañe a la gente.

 
A1exPit:

OrderOpenPrice - el precio de apertura de la orden seleccionada - no le importa qué moneda está utilizando, da el precio.

El OrderOpenPrice, según entiendo, da exactamente lo que necesito. Pero sólo si la moneda del depósito es el dólar y el par negociado es el EUR/USD. En este caso, es como si el OrderOpenPrice almacenara el tipo de cambio de la moneda base a la moneda del depósito en el momento de abrir la orden sabiendo que se puede calcular fácilmente el depósito.

Pero si no se cumple al menos una de estas condiciones, ¿cómo podemos obtener el valor del depósito para un pedido individual? ¿Dónde podemos encontrar el tipo de la moneda base de una cotización en relación con la moneda del depósito en el momento de su apertura?

Sí, tenemos la hora de apertura del pedido al segundo más cercano. ¿Pero qué podemos conseguir? Como máximo - los parámetros de la vela de minutos del símbolo requerido. Pero nunca el valor exacto del tipo utilizado para calcular el depósito. ¡Pero la función AccountMargin lo consigue de alguna manera! Sería muy interesante entender cómo exactamente.

Razón de la queja: