Помощь: Почему советник не закрывает сделку - страница 7

 

Не кажется ли вам, что 20000 повторных попыток - это слишком много. Если не удается закрыть 5 раз подряд, то пора выходить из программы.

Было бы неплохо выводить сообщение об ошибке при неудачном закрытии.

 
Я больше не буду кормить тролля...
 

Привет, Кросси,

Вы правы, я вижу только часть вашего кода, и у вас, вероятно, есть другие планы в голове, и, конечно, чтение 4000 строк кода не помогает получить ясную голову - я тоже.

Вы сказали, что ваш советник не может закрыть сделку. Поэтому мы должны выяснить причину и разобраться с ней. Вот как я это вижу:

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

Итак, у вас есть проблема, что НЕ ВСЕ заказы закрываются. Этот код, который Вы вставили - НИКОГДА не закроет ВСЕ ордера. Поэтому, если Вам нужна помощь - вставьте ВЕСЬ код, который работает с закрытием ордеров. Нет необходимости вставлять весь Ваш код (я понимаю, что Вы хотите сохранить его в тайне), но Вы никогда не получите помощи, не вставив часть кода, связанного с проблемой (в данном случае - нет кода для закрытия ордеров SHORT).

 
onewithzachy:

Привет, Кросси,

Вы правы, я вижу только часть вашего кода, и у вас, вероятно, есть другие планы в голове, и, конечно, чтение 4000 строк кода не помогает получить ясную голову - я тоже.

Вы сказали, что ваш советник не может закрыть сделку. Поэтому мы должны выяснить причину и разобраться с ней. Вот как я это вижу:

:D


Спасибо onewithzachy за эту идею. Она полезна везде, как и здесь.

Пожалуйста, дайте ему поработать еще несколько часов, и я обещаю сообщить вам новости.

Спасибо Raptor, также, за его хороший вклад.

Y.

 

Здравствуйте,

Как я и обещал, через 6 часов советник работает, все работает правильно, благодаря вашему

хорошему мышлению.

Так что, тем временем, давайте продолжать, и я надеюсь, что не будет никаких траблов.

Y.

 
crossy:

Здравствуйте,

Как я и обещал, через 6 часов советник работает, все работает правильно, благодаря вашему

хорошему мышлению.

Так что, тем временем, давайте продолжать, и я надеюсь, что не будет никаких траблов.

Y.

Отлично! Пожалуйста, сообщите нам еще раз через несколько недель.

:D