Aiuto: Perché l'EA non chiude un trade - pagina 4

 

Avrai il problema che nessuno ti risponde se non usi il pulsante SRC per postare il tuo codice :D

 
crossy:

Ciao amici,


OrderT è il numero del biglietto dell'ordine,




Il mio PROBLEMA è: L'EA a volte chiude il trade molto bene, ma a volte l'EA chiude il tarde MA continua a cercare il ticket per chiuderlo, anche se è già stato chiuso.

(Ricevo l'errore: "Numero di ticket sconosciuto...".

Penso di avere un errore di logica.

Grazie per il vostro gentile aiuto.

Y

È molto, molto semplice...

Risponda a questa semplice domanda e avrà la sua risposta.

Lei passa il numero di TICKET alla funzione in modo che il ticket possa essere chiuso... perché poi fa un loop su tutti gli altri ordini? Lei sa già il numero di Ticket che deve chiudere... perché il loop?

 
...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
      {  
         if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
         {   
            Check = false;
            if ( TREN == "LONG" )
              PRC = MarketInfo(SYMB,MODE_BID);
            else
            if ( TREN == "SHORT" )
               PRC = MarketInfo(SYMB,MODE_ASK);
         
            Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
            if ( Check )
               break;
         }      
      } 
   }
   return;
}
//-----------------------------------------------+

Spero che ora sia più chiaro.

Grazie

 
RaptorUK:

È molto, molto semplice...

Rispondi a questa semplice domanda e avrai la tua risposta...

Tu passi il numero di TICKET alla funzione in modo che il ticket possa essere chiuso... perché poi fai un loop su tutti gli altri ordini? Tu sai già il numero di Ticket che devi chiudere... perché il loop?


Grazie Raptor, l'ho fatto una volta senza ORDERSELECT, ma aveva lo stesso errore.

Y.

 
Ho già dato un indizio nella prima pagina. https://www.mql5.com/en/forum/139543
 

Grazie onewithzachy, e ho fatto come hai suggerito e ho ottenuto l'errore

che non ha trovato il TICKET.

 
crossy:

Ciao amici,


OrderT è il numero del biglietto dell'ordine,




Il mio PROBLEMA è: L'EA a volte chiude il trade molto bene, ma a volte l'EA chiude il tarde MA continua a cercare il ticket per chiuderlo, anche se è già stato chiuso.

(Ricevo l'errore: "Numero di ticket sconosciuto...".

Penso di avere un errore di logica.

Grazie per il vostro gentile aiuto.

Y

È molto, molto semplice...

Risponda a questa semplice domanda e avrà la sua risposta.

Lei passa il numero di TICKET alla funzione in modo che il ticket possa essere chiuso... perché poi fa un loop su tutti gli altri ordini? Lei sa già il numero di Ticket che deve chiudere... perché il loop?

 
onewithzachy:
Ho già dato un indizio nella prima pagina. https://www.mql5.com/en/forum/139543
E ho dato anche la risposta... https://www. mql5.com/en/forum/139543
 
crossy:


Grazie Raptor, l'ho fatto una volta senza ORDERSELECT, ma aveva lo stesso errore.

Non stai leggendo quello che ho scritto e chiesto... perché il ciclo? Qual è la funzione del ciclo in questa situazione?
 
...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+

O.K. Ecco la versione modificata, che ho ottenuto lo stesso errore.

Y.