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

 

Non pensate che 20000 tentativi siano un po' eccessivi. Se non riesce a chiudere 5 volte di seguito, allora è il momento di smettere.

Sarebbe bello stampare il messaggio di errore se la chiusura non riesce.

 
Non alimenterò più il troll...
 

Ciao crossy,

Hai ragione, ho visto solo una parte del tuo codice e probabilmente hai diversi piani in mente, e sicuramente leggere 4000 linee di codice non aiuta ad avere le idee chiare - anch'io.

Hai detto che il tuo EA non può chiudere un trade. Quindi dobbiamo scoprire la causa e affrontarla. Questo è il mio modo di vedere:

:D

#include <stdlib.mqh>   
   ...
for(int pos = OrdersTotal(); pos >= 0 ; pos--) 
   {
   if ( OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) 
        && OrderMagicNumber() == My_Magic_Number
        && OrderSymbol() == Symbol())
      {
       if (OrderType() = OP_BUY) // we close long
         {
         for (int try_to_close = 1; try_to_close <= 100; try_to_close ++)
            {
            bool success = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow);
            if (success = false)
               {
               int Error = GetLastError();
               Print ("Unable to close ticket ",OrderTicket()," with error ",ErrorDescription(Error)); // from #include <stdlib.mqh>
               if (TRY_CLOSE_AGAIN_OR_NOT(Error) == false ) break; // 
               }
            }
         }
         
       if (OrderType() = OP_SELL) // we close short
         {
         // do the same with sell
         
         }
      }   
   }
//+------------------------------------------------------------------+
bool TRY_CLOSE_AGAIN_OR_NOT(int err) // True
  {
  switch (err)
     {
      case 1:   return (false); //error_string="no error";                                                 
      case 2:   return (false); //error_string="common error";                                          
      case 3:   return (false); //error_string="invalid trade parameters";                                
      case 4:   Sleep (500); return (true); //error_string="trade server is busy";                               
      case 5:   return (false); //error_string="old version of the client terminal";                  
      case 6:   Sleep (500); return (true); //error_string="no connection with trade server";                 
      case 7:   return (false); //error_string="not enough rights";                                
      case 8:   Sleep (500); return (true); //error_string="too frequent requests";                                
      case 9:   return (false); //error_string="malfunctional trade operation (never returned error)"; 
      case 64:  return (false); //error_string="account disabled";                        
      case 65:  return (false); //error_string="invalid account";                   
      case 128: Sleep (500); return (true); //error_string="trade timeout";                                    
      case 129: return (false); //error_string="invalid price";                               
      case 130: return (false); //error_string="invalid stops";                          
      case 131: return (false); //error_string="invalid trade volume";                 
      case 132: return (false); //error_string="market is closed";                      
      case 133: return (false); //error_string="trade is disabled";                       
      case 134: return (false); //error_string="not enough money";                   
      case 135: return (false); //error_string="price changed";                         
      case 136: return (false); //error_string="off quotes";                              
      case 137: Sleep (500); return (true); //error_string="broker is busy (never returned error)";    
      case 138: return (false); ////error_string="requote";                                 
      case 139: return (false); //error_string="order is locked";                           
      case 140: return (false); //error_string="long positions only allowed";                 
      case 141: return (false); //error_string="too many requests";                               
      //case 145: return (true); //error_string="modification denied because order too close to market";  
      case 146: Sleep (500); return (true); //error_string="trade context is busy";                              
      //case 147: return (true); error_string="expirations are denied by broker";                    
      //case 148: return (true); error_string="amount of open and pending orders has reached the limit"; 
      //case 149: return (true); error_string="hedging is prohibited";                                   
      case 150: return (false); //error_string="prohibited by FIFO rules";  
      default : return (false);         
     }
     
  return(false); // can not manage the err we get out
  }
 

Quindi, hai un problema, che NON TUTTI gli ordini sono chiusi. Questo codice che hai incollato non chiuderà mai tutti gli ordini. Quindi, se vuoi aiuto, incolla tutto il codice che funziona con la chiusura degli ordini. Non c'è bisogno di incollare tutto il tuo codice (capisco che vuoi tenerlo segreto), ma non otterrai mai aiuto senza incollare parte del codice che è coinvolto nel problema (in questo caso - non c'è nessun codice per la chiusura degli ordini SHORT).

 
onewithzachy:

Ciao crossy,

Hai ragione, ho visto solo una parte del tuo codice e probabilmente hai diversi piani in mente, e sicuramente leggere 4000 linee di codice non aiuta ad avere le idee chiare - anch'io.

Hai detto che il tuo EA non può chiudere un trade. Quindi dobbiamo scoprire la causa e affrontarla. Questo è il mio modo di vedere:

:D


Grazie onewithzachy per questa idea. È utile ovunque come qui.

Per favore lasciatelo lavorare ancora per qualche ora e prometto di aggiornarvi.

Grazie anche a Raptor per il suo bel contributo.

Y.

 

Salve,

Come ho promesso, dopo 6 ore l'EA funziona, tutto funziona correttamente, grazie al tuo

buon pensiero.

Quindi, nel frattempo andiamo avanti e spero che non ci siano truboli.

Y.

 
crossy:

Salve,

Come ho promesso, dopo 6 ore l'EA funziona, tutto funziona correttamente, grazie al tuo

buon pensiero.

Quindi, nel frattempo andiamo avanti e spero che non ci siano truboli.

Y.

Grande!,Per favore aggiornaci di nuovo tra una settimana

:D