도움말: EA가 거래를 마감하지 않는 이유 - 페이지 7

 

20000 번의 재시도가 좀 과하다고 생각하지 않으세요? 연속으로 5번 닫히지 않으면 종료할 시간입니다.

닫기가 실패하면 오류 메시지를 인쇄하는 것이 좋습니다.

 
나는 더 이상 트롤에게 먹이를 주지 않습니다. . .
 

안녕하세요 크로스입니다.

맞습니다. 저는 코드의 일부만 보았고 아마도 다른 계획을 염두에 두고 있을 것입니다. 물론 4000줄의 코드를 읽는 것은 명확한 이해에 도움이 되지 않습니다. 저도 마찬가지입니다.

귀하는 귀하의 EA가 거래를 마감할 수 없다고 말했습니다. 그래서 우리는 원인이 무엇인지 찾아내고 대처해야 합니다. 이것이 내가 보는 방식입니다.

:디

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

따라서 모든 주문이 마감되지 않은 문제가 있습니다. 이 코드는 붙여넣었습니다. 절대 모든 주문을 마감하지 않습니다. 따라서 도움이 필요하면 주문 CLOSING으로 작업하는 모든 코드 마녀를 붙여넣으십시오. 모든 You 코드를 붙여넣을 필요는 없습니다(비밀 유지를 원한다는 것을 이해합니다). 그러나 코드의 일부를 붙여넣지 않고는 도움을 받을 수 없습니다. 마녀가 문제에 연루되어 있습니다(이 경우 - 짧은 주문 마감을 위한 코드가 없습니다) ).

 
onewithzachy :

안녕하세요 크로스입니다.

맞습니다. 저는 코드의 일부만 보았고 아마도 다른 계획을 염두에 두고 있을 것입니다. 물론 4000줄의 코드를 읽는 것은 명확한 이해에 도움이 되지 않습니다. 저도 마찬가지입니다.

귀하는 귀하의 EA가 거래를 마감할 수 없다고 말했습니다. 그래서 우리는 원인이 무엇인지 찾아내고 대처해야 합니다. 이것이 내가 보는 방식입니다.

:디


이 아이디어에 대해 onewithzachy에게 감사드립니다. 여기와 같이 어디에나 유용합니다.

몇 시간 더 작동하도록 하면 업데이트할 것을 약속합니다.

Raptor에게도 그의 좋은 기여에 감사드립니다.

와이.

 

여보세요,

약속드린 대로 EA가 작동한지 6시간이 지나면 모든 것이 올바르게 작동합니다.

좋은 생각.

그래서, 그 동안 계속 가자. 그리고 나는 아무 소란이 없기를 바랍니다.

와이.

 
crossy :

여보세요,

약속드린 대로 EA가 작동한지 6시간이 지나면 모든 것이 올바르게 작동합니다.

좋은 생각.

그래서, 그 동안 계속 가자. 그리고 나는 아무 소란이 없기를 바랍니다.

와이.

좋아요!, 몇 주 후에 다시 업데이트해 주세요.

:디