Problemi di controllo degli scambi aperti - pagina 7

 
dazamate:
Sì, ho appena riletto il tuo commento e quello che ho fatto è sbagliato,
non mi darà il tempo di apertura della barra dovrei usare Time[0]?


Sì, oppure. . . .

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

Questo ha risolto il problema, Raptor.


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

 
dazamate:

Questo ha risolto il problema, Raptor.


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

LOL, lieto di essere stato di aiuto. . . :-)
 

Amico sei stato di grande aiuto, finalmente ho l'ea in uno stato in cui posso iniziare a mettere a punto la strategia. Grazie mille, ma dubito che tu abbia sentito l'ultimo di me, mi dispiace dirlo haha


Grazie anche a WHRoeder
 

Quindi... pensavate che fosse finita lol


Ho aggiunto del codice che traccerà lo stoploss da un valore di media mobile. Il codice funziona bene su compravendite ma non funziona su compravendite. Non riesco a individuare nulla, forse voi potete.


// 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
               }
            }
       }
     }
 

Beh il codice trailing stop potrebbe non essere il problema. C'è un problema con il codice che cancella gli ordini pendenti dopo un certo tempo...


// 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
               }
        }
       
     }

Dopo ogni trade aperto eseguo anche questo...

tradeopened = TimeHour(TimeCurrent());

Commento ...

(iBarShift(Symbol(),60 ,tradeopened)

e parte da 1000 e continua a contare su ogni nuova barra e non si azzera quando eseguo ...

tradeopened = TimeHour(TimeCurrent());


Questo fa sì che il controllo per cancellare gli ordini pendenti sia sempre vero e se il trade non viene attivato entro la barra successiva l'ordine pendente viene cancellato subito -__-

Ahhh HELP lol

 

Penso di aver risolto il problema ....

L'ho cambiato in modo che un ulteriore controllo per cancellare il trade era quello di spostare indietro il tempo massimo consentito per l'apertura di un ordine pendente e vedere se corrispondeva al tempo in cui il trade era stato aperto :)

  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:

Penso di aver risolto il problema ....

L'ho cambiato in modo che un ulteriore controllo per cancellare il trade era quello di spostare itime indietro il tempo massimo consentito per l'apertura di un ordine pendente e vedere se corrispondeva al tempo di apertura del trade :)

Hai quasi qualcosa di simile a quello che stavo immaginando . . .

C'è un problema nell'uso della tua variabile tradeopened . . . se ci sono operazioni aperte e l'EA si spegne si perdono le informazioni in quella variabile . . . perché non sostituirla con OrderOpenTime( ) e fare qualcosa del genere . . .

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
               }
        }
 
L'unico problema è che stavo usando la funzione ibarshift prima e per qualche motivo stava producendo più di 1000
 

Inoltre raptor ho bisogno di raccogliere il tuo cervello.... di nuovo :)


C'è un modo per trasformare il valore di una media mobile in gradi? Sto cercando su Google per vedere se riesco a trovare qualche forumlas di matematica. In questo modo sarebbe facile per il rilevamento del mercato laterale e per chiarire le tendenze verso l'alto e verso il basso