Problemas de comprobación del comercio abierto - página 7

 
dazamate:
Si, solo leyendo de nuevo tu comentario y lo que he hecho esta mal,
no me da la hora de apertura de la barra ¿tendría que usar Time[0]?


Sí, o...

tradeopened = TimeHour(TimeCurrent());
 
OrderDelete(OrderTicket( ) );  

Eso lo arregló Raptor.


---------> http://clip2net.com/s/14aYs

 
dazamate:

Eso lo arregló Raptor.


---------> http://clip2net.com/s/14aYs

LOL, me alegro de ser de alguna ayuda . . . :-)
 

El equipo de la empresa es el que más me ha ayudado, ya que por fin tengo el ea en un estado en el que puedo empezar a afinar la estrategia. Muchas gracias pero dudo que hayas oído lo último de mí, lo siento, jaja


También un gran agradecimiento a WHRoeder también
 

Así que ... usted pensó que había terminado lol


He añadido un código que rastreará el stoploss desde un valor de media móvil. El código funciona bien en operaciones de compra pero no funciona en operaciones de venta. No puedo ver nada, tal vez ustedes puedan.


// Trailing Stop Code 

   if(Tradeopen()==true && emastoptrail==TRUE)                                  // Trades are open and Trailing stop feature is turned on
    {
      for(int tnumber2 = OrdersTotal()-1; tnumber2 >= 0 ; tnumber2--)                   //scan through open orders
       {
        if (OrderSelect(tnumber2, SELECT_BY_POS) && 
            OrderMagicNumber()==Mnumber3)                                                // The orders magic number is the same as the magic number used the profit trade
            {                                          
          
            if(OrderType()==OP_BUY && (iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1) > OrderStopLoss() ))       // The stop loss is less than the moving average value
          
               {
                OrderModify(OrderTicket(),OrderOpenPrice(),iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1),OrderTakeProfit(),0);  // Modify Stop to MA value
               }
            
            if(OrderType()==OP_SELL && (iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1) < OrderStopLoss() ))       // The stop loss is more than the moving average value
          
               {
                OrderModify(OrderTicket(),OrderOpenPrice(),iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1),OrderTakeProfit(),0);   // Modify Stop to MA value
               }
            }
       }
     }
 

Bueno el código del trailing stop puede no ser el problema. Hay un problema con el código que borra las órdenes pendientes después de un cierto tiempo...


// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN ' int = pendinglimit'

   if((iBarShift(Symbol(),60 ,tradeopened)>pendinglimit) && Tradeopen()==true)              // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)))       // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderDelete(OrderTicket( ) );                                            // Delete it
               }
        }
       
     }

Después de cada comercio se abre también ejecuto esto...

tradeopened = TimeHour(TimeCurrent());

Comento ...

(iBarShift(Symbol(),60 ,tradeopened)

y empieza desde 1000 y sigue contando en cada nueva barra y no se reinicia cuando lo ejecuto ...

tradeopened = TimeHour(TimeCurrent());


Esto hace que la comprobación para eliminar las órdenes pendientes sea siempre verdadera y si la operación no se activa en la siguiente barra la orden pendiente se elimina de inmediato -__-

Ahhh HELP lol

 

Creo que lo he arreglado ....

Lo cambié para que una comprobación más para borrar la operación fuera desplazar el tiempo máximo permitido para abrir una orden pendiente y ver si coincidía con la hora en que se abrió la operación :)

  for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)) &&       // The orders magic number is the same as the magic number used in this ea
              (iTime(   Symbol(), 60, pendinglimit) == tradeopened))
               {
                OrderDelete( OrderTicket() );                                            // Delete it
               }
        }
 
dazamate:

Creo que lo he arreglado ....

Lo cambié para que una comprobación más para borrar la operación fuera desplazar itime hacia atrás el tiempo máximo permitido para abrir una orden pendiente y ver si coincidía con la hora en que se abrió la operación :)

Casi tienes algo como lo que estaba imaginando. . . .

Hay un problema al usar tu variable tradeopened... si hay operaciones abiertas y el EA se apaga pierdes la información en esa variable... por qué no reemplazarla con OrderOpenTime( ) y hacer algo así...

for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)) &&       // The orders magic number is the same as the magic number used in this ea

              (iBarShift(OrderSymbol(),PERIOD_H1 ,OrderOpenTime()) - pendinglimit) <= 0));    //  <----------- this . . .

               {
                OrderDelete( OrderTicket() );                                            // Delete it
               }
        }
 
El único problema es que antes usaba la fucnción ibarshift y por alguna razón salía 1000+
 

También raptor tengo que recoger tu cerebro.... de nuevo :)


¿Hay alguna forma de convertir un valor de media móvil en grados? Estoy buscando en Google para ver si encuentro algún foro de matemáticas. De esta manera sería fácil para la detección de mercado lateral y las tendencias claras hacia arriba y hacia abajo

Razón de la queja: