Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 405

 
Leanid Aladzyeu:

Aquí está el código:

if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep)*Point)

No considera la posibilidad de que OrderStopLoss() sea igual a cero. Y el cero en cualquier caso será menor que la expresiónAsk+(TrailingStop+TrailingStep)*Punto, y la condición devolverá falso.

 
if((OrderStopLoss()>Ask+(TrailingStop+TrailingStep)*Point)||OrderStopLoss()==0)
Pruébalo y verás si funciona. No me he metido de lleno en el código.
 

¡GraciasVitalii Ananev,Vladimir Zubov!

Estoy escribiendo un EA basado en el indicador RSI. El principio del EA será abrir órdenes por el indicador pero también cerrará por el mismo indicador (no sé el precio de cierre)

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrderClose(ticket,Lot,Ask,Slippage,Blue);

return(0);

Esta condición no se cumple. ¿Por qué? (Abre y cierra inmediatamente la orden, y así sucesivamente en el bucle).

Esta es la cuestión principal. Mi Asesor Experto trabajará con un gran número de órdenes y necesito calcular el precio medio, alto y bajo de todas las órdenes en el mercado, ¿cómo encuentro los precios de cierre de todas las órdenes para conseguir un beneficio total y otras operaciones similares?

 
Leanid Aladzyeu:

Como se indica en la referencia da un error.

¿¡Sí!? ¿Y qué tipo de error da? ¿Qué dice el compilador?

 
Leanid Aladzyeu:

¡GraciasVitalii Ananev,Vladimir Zubov!

Estoy escribiendo un EA basado en el indicador RSI. El principio del EA será abrir órdenes por el indicador pero también cerrará por el mismo indicador (no sé el precio de cierre)

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrderClose(ticket,Lot,Ask,Slippage,Blue);

return(0);

Esta condición no se cumple. ¿Por qué? (Abre e inmediatamente cierra la orden, y así sucesivamente en el bucle).

Esta es la cuestión principal. Mi Asesor Experto trabajará con un gran número de órdenes y necesito calcular el precio medio, alto y bajo de todas las órdenes en el mercado, ¿cómo encuentro los precios de cierre de todas las órdenes para conseguir un beneficio total y otras operaciones similares?

El precio de cierre de una posición no se conocerá hasta que se cierre la posición. A continuación, puede averiguar el precio de cierre en el historial de operaciones con la función OrderClosePrice().

Abre y cierra inmediatamente la posición, porque se cumple la condición de cierre. Comprueba la lógica de la condición de cierre. Intenta escribirlo de esta manera para empezar:

if(OrderType()==OP_BUY && (irsa <=20 || irsa >=40))
{
  OrderClose(ticket,Lot,Ask,Slippage,Blue);

 return(0); 
}

Lea la referencia sobre la prioridad de los cálculos de las expresiones lógicas.

"Hay que calcular el precio medio, alto y bajo de todas las órdenes del mercado" - Lo siento, ¿de qué precio estamos hablando? ¿El precio de la orden abierta? ¿El precio actual de un par de divisas? ¿El precio al que se alcanzará el beneficio total de todas las posiciones abiertas sin pérdidas?

 
Tapochun:

¿¡Sí!? ¿Y qué tipo de error da? ¿Qué dice el compilador?

Lo siento, no hay error, pero el método de muestra no me funciona (me da errores con el arrastre).
 
Vitalii Ananev:

El precio de cierre de la posición no se conocerá hasta que se cierre la posición. La función OrderClosePrice() puede encontrarse entonces en el historial de transacciones.

Abre y cierra inmediatamente las posiciones, porque se cumple la condición de cierre. Compruebe la lógica de la condición de cierre. Intenta escribirlo de esta manera para empezar:

Lea la ayuda sobre la prioridad de los cálculos de las expresiones lógicas.

Bueno, como estar en por ejemplo con una rejilla, hay necesidad de un total de TP o (y) el precio total.

Tal vez hay un buffer(s) donde el precio debe ser guardado o tal vez el propio indicador tiene un buffer donde se guarda el precio abierto de la última orden (y se puede tomar y guardar el precio de allí a nuestro buffer global)

 
Leanid Aladzyeu:

Si establecemos una parrilla, necesitaremos un TP total o (y) un precio total.

Tal vez haya un buffer(s) para guardar el precio o en el propio indicador tal vez haya un buffer donde se almacene el precio de apertura de la última orden (y de ahí podemos cogerlo y guardarlo en nuestro buffer global)

Recomiendo empezar a estudiar el idioma con el libro de texto Kovalev (puedes encontrarlo en nuestro sitio). Por supuesto, está un poco anticuado, pero en combinación con la documentación estará bien.
 
Leanid Aladzyeu:

¡GraciasVitalii Ananev,Vladimir Zubov!

Estoy escribiendo un EA basado en el indicador RSI. El principio del EA será abrir órdenes por el indicador pero también cerrará por el mismo indicador (no sé el precio de cierre)

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrderClose(ticket,Lot,Ask,Slippage,Blue);

return(0);

Esta condición no se cumple. ¿Por qué? (Abre e inmediatamente cierra la orden, y así sucesivamente en el bucle).

Esta es la cuestión principal. Si su EA va a trabajar con un gran número de órdenes y necesita calcular el precio medio, alto y bajo de todas las órdenes en el mercado, ¿cómo encuentra el precio de cierre de todas las órdenes para conseguir un beneficio total y otras operaciones similares?

Usted está tratando de cerrar una orden de compra en un asc, si usted no entiende las cosas elementales - leer la documentación.

¿O estás acostumbrado a la regla del pulgar?

 
Leanid Aladzyeu:

Si establecemos una parrilla, necesitaremos un TP total o (y) un precio total.

Tal vez haya un buffer(s) para guardar el precio o en el propio indicador tal vez haya un buffer donde se almacene el precio de apertura de la última orden (y de ahí podemos cogerlo y guardarlo en nuestro buffer global)

Debe calcular el precio medio abierto de todas las posiciones. Y en base a eso calcular el total de Take Profit para todas las posiciones. Se conoce el precio abierto de las posiciones (OrderOpenPrice()). Sume todo y divídalo por el número de posiciones abiertas.