[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 188

 

Intento de calcular los intercambios, pero no funciona

Este es el código que muestra los intercambios de las últimas 20 operaciones.

for ( int j=OrdersHistoryTotal( )-1; j>=OrdersHistoryTotal( )-21; j--) {
OrderSelect(j, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_BUY)
Alert(OrderSymbol()+" ЛОТ = "+OrderLots()+" РЕАЛЬНЫЙ СВОП = "+OrderSwap()+" РАСЧЕТНЫЙ СВОП "+MarketInfo(OrderSymbol(),MODE_SWAPLONG)*MarketInfo(OrderSymbol(),MODE_BID)*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE));
if(OrderType()==OP_SELL)
Alert(OrderSymbol()+" ЛОТ = "+OrderLots()+" РЕАЛЬНЫЙ СВОП = "+OrderSwap()+" РАСЧЕТНЫЙ СВОП "+MarketInfo(OrderSymbol(),MODE_SWAPSHORT)*MarketInfo(OrderSymbol(),MODE_BID)*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE));
}

Pero el intercambio estimado y el real son diferentes. No es que el precio de la oferta no vuelva a ser el mismo, no son las diez milésimas.

Por alguna razón, la diferencia es un múltiplo de 10.

Es decir, el canje calculado es 10 veces mayor que el real.

No puedo ni siquiera adivinar lo que está mal aquí.

MarketInfo(OrderSymbol(),MODE_SWAPTYPE) devuelve uno, entonces

"Método de cálculo de los swaps 1 - en la moneda base del instrumento;"

Tomo el valor del swap en pips, que devuelve

MarketInfo(OrderSymbol(),MODE_SWAPLONG)

Multiplico este valor por Bid,

*MarketInfo(OrderSymbol(),MODE_BID)

entonces a el tamaño del lote

*OrderLots()

y multiplicando por el valor de un punto en la moneda de depósito de un lote

*MarketInfo(OrderSymbol(),MODE_TICKVALUE)

Los valores devueltos son:

EURGBP LOTE = 0,46000000 SWAP REAL = -1,31000000 SWAP ESTIMADO -13,05244609

 

Por favor, dígame cómo hacerlo))

doble MA1,MA2;

MA1=iMA(....,0);

MA2=iMA(....,3);

si (MA1-MA2>Punto)//MA mira hacia arriba

si (MA1-MA2,-Punto)//MA mira hacia abajo

 
vasya_vasya писал(а) >>

Multiplico este valor por Bid,

*MarketInfo(OrderSymbol(),MODE_BID)

¿Para qué es eso?

 
Roger >> :

Por favor, dígame cómo hacerlo))

doble MA1,MA2;

MA1=iMA(....,0);

MA2=iMA(....,3);

si (MA1-MA2>Punto)//MA mira hacia arriba

si (MA1-MA2,-Punto)//MA está mirando hacia abajo

Muchas gracias))

 
Roger писал(а) >>

¿Para qué sirve esto?

No he podido encontrar una descripción de lo que devuelve

MarketInfo(OrderSymbol(),MODE_SWAPLONG)

Llegué a la conclusión de que este es el tamaño de los puntos de EUR en la cotización de EURGBP , así que lo multipliqué por BID para obtener cuánto es en GBP

La cuestión es que

MarketInfo(OrderSymbol(),MODE_TICKVALUE)

Devuelve el valor en puntos por lote sólo para la GBP en la cotización EURGBP, no para el EUR.

 
vasya_vasya писал(а) >>

En ninguna parte he encontrado una descripción de lo que devuelve el valor

Por alguna razón siempre he pensado que todos los cálculos se hacen en la moneda del depósito.
 
Roger писал(а) >>
Por alguna razón seguía pensando que todos los cálculos eran en la moneda del depósito.

Función MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

Devuelve un valor entero de -2, el mismo que para las demás órdenes. Por lo tanto, asumo que este es el valor de los puntos.

Supongamos que este es el valor del swap expresado en pips de nuestra moneda de depósito.

Moneda de depósito = USD

Multiplicar

MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

Por número de lotes

*OrderLots()

Multiplique también por el valor de un pip de nuestra moneda de depósito por lote

*10

Obtenga

SWAP = -9.20000000

En lugar de

INTERCAMBIO REAL = -1.31000000

 
vasya_vasya писал(а) >>

Función MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

Devuelve un valor entero de -2, el mismo que para las demás órdenes. Por lo tanto, asumo que este es el valor de los pips.

Para el EURGBP devuelve 0 (esto es Alpari) para los cortos y -0,68 para los largos y esto es exactamente en dólares.

 
Perfiles por favor aconsejar, de acuerdo con la ayuda del lenguaje mql5 no hay función iHighest cómo calcular el máximo alto para N período? ... He intentado copyHigh y fmax, pero sólo para un determinado período y no que, por supuesto, ayuda
 

Por decirlo crudamente:

double HighestBar(int start, int end)
{
double maxBar;
for (int i= start; i< end; i++)
if( maxBar<High[ i]) maxBar=High[ i];
return( maxBar);
}
Razón de la queja: