Se necesita un código simple para el EA (modificar dos órdenes abiertas) - página 4

 

Esto de mi respuesta hace un par de posts... es la forma más sencilla...

"Pongo dos órdenes pendientes a una hora determinada, concretamente a las 23:00 GMT+2 creo. Una de las órdenes pendientes como stop de venta y la otra como stop de compra, ambas órdenes están a igual distancia de la apertura de la vela de las 23:00, en este caso 14 pips.Ambas tienen un TakeProfit de 28 pips (en este caso) y un StopLoss de 55 pips".

Puedes calcular donde estaba el TP original por referencia a la vela de las 23:00, comprueba la orden y mira si todavía se ajusta al TP original, si es así entonces se puede modificar... si no es así entonces ya ha sido modificada así que no la modifiques de nuevo.

 

Try this . . . . it compiles but I haven't tried it in the Strategy Tester yet . . .

Archivos adjuntos:
madmax.mq4  10 kb
 
RaptorUK:

Pruebe esto... compila pero aún no lo he probado en el Probador de Estrategias...

Estoy recibiendo 'OrderSend error 130' por alguna razón a pesar de que el SL y el TP parecen ser correctos y los 'OrderSend's están dispuestos de la misma manera que el código anterior algo. ¿Por qué ocurre esto?

Tomé esta parte del código

   int CountOpenOrders = 0;
   double Candle23Open; 
   int Spread = MarketInfo(Symbol(), MODE_SPREAD);
   
   Candle23Open = Open[ iBarShift(NULL, 0, StrToTime("23:00") ) ]; // price value of the Open of the 23:00 hour candle
   
   for(int iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
      {
      if(OrderSelect(iPos,SELECT_BY_POS) && 
         OrderMagicNumber() == MagicNumber &&
         OrderSymbol() == Symbol() &&
         OrderType() < 2               //  less than 2 is either OP_BUY (0) or OP_SELL (1) 
         )
      CountOpenOrders++;
      } // end of for(int iPos  

   if(CountOpenOrders == 2)  //  we have 2 open orders,  should we modify or have the already been modified ?
      {
      for(iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
         {
         if(OrderSelect(iPos,SELECT_BY_POS) && 
            OrderMagicNumber() == MagicNumber &&
            OrderSymbol() == Symbol() 
            )
            {
            if(OrderType() == 1)               //  OP_SELL (1)  
               {
               if(OrderTakeProfit() > Candle23Open - ((TakeProfitModified - 1) * Point) + Spread )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open - (TakeProfitModified * Point) + Spread, 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
               }
            
            if(OrderType() == 0)               //  OP_BUY (0)
               {
               if(OrderTakeProfit() < Candle23Open + ((TakeProfitModified - 1) * Point) )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open + (TakeProfitModified * Point), 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
                  
               }
                  
            }         
         }
      }
   
        
   } 

y la puse en el EA anterior (el original) y abre las órdenes pero no las modifica. Aunque creo que si se arreglara el error de OrderSend en el EA que has proporcionado podría funcionar.

Ah y en esta parte,

if(!OrderModify

¡¿para qué sirve el !

Muchas gracias,

madmax3

 
madmax3:


Ah, y en esta parte,

¡¿para qué sirve el !

Muchas gracias,

madmax3

¿Ha consultado la documentación de OrderModify()? ¿Qué devuelve?
 
madmax3:

Estoy recibiendo 'OrderSend error 130' por alguna razón a pesar de que el SL y el TP parecen ser correctos y los 'OrderSend's están dispuestos de la misma manera que el código anterior algo. ¿Por qué ocurre esto?

¿Ajustó su TP y SL para tener en cuenta un Broker de 5 dígitos? ¿Es su Broker un Broker de 5 dígitos?
 

Conseguí que funcionara, sólo que me faltó rellenar una variable (distancia del ask y del bid). ¡La documentación de OrderModify no explica lo de ! creo.
El código parece funcionar bien, un problema sin embargo es que sólo está modificando las operaciones de compra cuando dos operaciones están abiertas y no tanto las operaciones de compra y venta, no estoy seguro de por qué está haciendo esto. ¿Alguna idea de por qué?

Gracias,

madmax3

 
madmax3:

Conseguí que funcionara, sólo que me faltó rellenar una variable (distancia del ask y del bid). ¡La documentación de OrderModify no explica lo de ! creo.
El código parece funcionar bien, aunque un problema es que sólo modifica las operaciones de compra cuando hay dos operaciones abiertas y no tanto las de compra como las de venta, no estoy seguro de por qué hace esto.

Gracias,

madmax3

OrderModify devuelve un bool . . . por lo que ! en relación a un bool es NO . . . por lo que !OrderModify() significa . . si OrderModify devuelve false, es decir, falla

Voy a echar otro vistazo a tu código . . o mi mod a él.

 
madmax3:

Conseguí que funcionara, sólo me faltó rellenar una variable (distancia del ask y bid). ¡La documentación de OrderModify no explica lo de ! creo.
El código parece funcionar bien, un problema sin embargo es que sólo está modificando las operaciones de compra cuando dos operaciones están abiertas y no tanto las operaciones de compra y venta, no estoy seguro de por qué está haciendo esto. ¿Alguna idea de por qué?

Gracias,

madmax3


¿Quieres tenerlo modificando el StopLoss para ambas operaciones de compra y venta con el mismo pip?

Piensa de nuevo si eso es lo que quieres y puedes averiguar por qué no está modificando de esa manera....

También no modificar los oficios con cada nuevo punto en la dirección correcta elegir un trailingstep para permitir la modificación (xx Los puntos pueden elegir 10 o más para evitar una gran cantidad de tradecontext errores demasiado ocupado)

"!" es algo así como no en la codificación

 
madmax3:

El código parece funcionar bien, un problema sin embargo es que sólo está modificando las operaciones de compra cuando dos operaciones están abiertas y no tanto las operaciones de compra y venta, no estoy seguro de por qué está haciendo esto. ¿Alguna idea de por qué?

Compruebe los registros para los errores ... si se ejecuta en el probador de la estrategia de comprobar la pestaña de diario, si en vivo o Demo comprobar la pestaña de expertos. Hágame saber lo que encuentre. . .
 
RaptorUK:
Compruebe los registros para los errores . . . si se ejecuta en el Probador de Estrategias comprobar la pestaña de diario, si en vivo o Demo comprobar la pestaña de expertos. Hágame saber lo que encuentra. . .
2012.04.09 21:21:27 2012.01.17 00:59 Probador: orden #1, vender 0.01 EURUSD se abre a 1.26498
2012.04.09 21:21:27 2012.01.17 02:21 Probador: orden #2, comprar 0.01 EURUSD se abre a 1.26795

2012.04.09 21:21:27 2012.01.17 02:21 MadMax EURUSD,H1: modificar #2 comprar 0.01 EURUSD a 1.26795 sl: 1.26218 tp: 1.27352 ok
2012.04.09 21:21:27 2012.01.17 03:00 MadMax EURUSD,H1: modify #2 buy 0.01 EURUSD at 1.26795 sl: 1.26218 tp: 1.27480 ok

Por alguna razón está modificando la operación de compra dos veces (la segunda modificación va al TP requerido, sin embargo en algunas operaciones parece seguir modificando a ciertas horas enteras como 9:00 o 10:00), no parece haber ningún error real como tal sin embargo.