Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1652

 

Hola a todos.

¿Cuál es la forma más fácil de escribir (modificar) una orden en mi Asesor Experto simple para eliminar el Take Profit y el Stop Loss en ella cuando se da una determinada condición, hasta un máximo de tres órdenes en una dirección (si es que eso es importante), supongo que se utiliza el recuento de órdenes, ¿debo escribir una nueva? Estoy esperando a alguien que se preocupe.

 
Порт-моне тв #:

Hola a todos.

¿Cuál es la forma más fácil de escribir (modificar) una orden en mi simple Asesor Experto para eliminar el Take Profit y el Stop Loss en ella cuando se produce una determinada condición, el máximo se supone que no es más de tres órdenes en una dirección (si eso es importante), el recuento de órdenes, como entiendo que se utiliza, debo escribir una nueva? Estoy esperando a alguien que se preocupe.

OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0);
 
Ivan Butko #:

Desgraciadamente, es difícil entender cómo utilizar ese código.


Intenté poner una bandera en 1 al abrir una orden de compra, y una bandera en 0 al cerrarla, y añadí esta última a la condición de apertura. No funcionó)
Es extraño, de hecho la regla está rota: abrir si la bandera==0. Y de todas formas abrió a 1 en la misma vela.

Muéstrame cómo lo hiciste.
 
Alexey Viktorov #:

¿Por qué tan complicado?

No te hagas el listo. La pregunta no se refería a eso.

 
MakarFX #:
Muéstrame cómo lo hiciste.

Parece que funciona, lo he rehecho así. Ahora lo probaré en la venta y veré si pueden ser independientes entre sí

int Buy=0,
    Sell=0;

void OnTick(void)
  {
    double 
    ma=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0),
    ma2=iMA(NULL,0,80,0,MODE_SMA,PRICE_CLOSE,0);

    if (ma>ma2 && Buy==0) 
      { 
        OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - SL * Point, 0, NULL, 888, 0, Blue);
        Buy=1; 
      }
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=888 || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(perceptron_B() < Porog_B)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
            Buy=1;
           }
           
         break;
        }

UPD
Phew, funcionó) Hice lo mismo para vender, ahora pueden abrirse independientemente uno del otro y tienen una lógica diferente.

 
Ivan Butko #:

Parece que funciona, lo he rehecho así. Ahora lo probaré en la venta y veré si pueden ser independientes entre sí

UPD
Uf, el diseño funcionó) Hice lo mismo para vender, ahora pueden abrirse de forma independiente y ser acompañados por una lógica diferente.

Probablemente se barre al compilar))))

 
MakarFX #:

Probablemente se jure en la compilación))))

¡Correcto! Un bit,"el valor de retorno de 'OrderSend' debe ser comprobado AI (2).mq4 34 9"

Pero parece que funciona)
 
Ivan Butko #:

¡Correcto! Un poco,"el valor de retorno de 'OrderSend' debe ser comprobado AI (2).mq4 34 9"

Pero parece que funciona)

Hazlo así

    if (ma>ma2 && Buy==0) 
      { 
        if(OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - SL * Point, 0, NULL, 888, 0, Blue))
        Buy=1; 
      }
 
MakarFX #:

¡Hazlo!

Gracias.

 
MakarFX #:

Gracias.

Razón de la queja: