[아카이브]돈 버는 법을 배워라![아카이브] - 페이지 721

 
Slovyn :

누가 무엇이 잘못되었는지 말해 줄 수 있습니까???



거래 흐름이 바쁘다.

init owl의 시작 부분에서 이러한 구성을 구동할 수도 있습니다.

 int init()
{     
   IsExpertStopped = false;
   if (! IsTradeAllowed ())  { Comment ( "Необходимо разрешить советнику торговать" );IsExpertStopped = true; return ( 0 );}      
   if (! IsTesting ()) 
      { 
         if ( IsExpertEnabled ()) {   Comment ( "Советник запустится следующим тиком" ); }
         else    { Comment ( "Отжата кнопка \"Разрешить запуск советников\"" ); }
      }

예를 들어 다음과 같이 주문이 이루어지지 않을 때 이 오류를 처리하여 처리합니다.

 if (error == ERR_TRADE_CONTEXT_BUSY) 
      {
         while ( IsTradeContextBusy ()) 
         {
             Sleep ( 1000 * 11 );
         }
      }
 
Roman. :


거래 흐름이 바쁘다.

예를 들어 다음과 같이 주문이 이루어지지 않을 때 이 오류를 처리하여 처리합니다.


하지만 11초를 기다리기에는 너무 많은 시간이 아닌가요? 이것은 서버 칩이 아니라 순전히 한 터미널에 전문가 무리가 있기 때문입니다.
 
sergeev :

하지만 11초를 기다리기에는 너무 많은 시간이 아닌가요? 이것은 서버 칩이 아니라 순전히 한 터미널에 전문가 무리가 있기 때문입니다.


오히려, 네, 조금 너무합니다, 나는 내 f-ii에 구멍이 너무 가득합니다 ...

맞습니다, pliz ... 나도 나 자신을 바꿀 것입니다 ...

일반적으로 다른 올빼미에는 다음과 같은 그림이 있습니다.

예시:

 case 0 :
       if (BuySell== 1 ) // || LongTrade)
      {
       for (c = 0 ; c < NumberOfTries; c++) {
         RefreshRates ();
         ticket = OrderSend ( Symbol (), OP_BUY, pLots, Ask, sp, StopLong(Bid, sl), TakeLong(Ask, tp), pComment, pMagic, pDatetime, pColor);
         err = GetLastError ();
         if (err == 0 /* NO_ERROR */ ) break ;
         if (!(err == 4 /* SERVER_BUSY */ || err == 137 /* BROKER_BUSY */ || err == 146 /* TRADE_CONTEXT_BUSY */ || err == 136 /* OFF_QUOTES */ )) break ;
         Sleep ( 5000 );
      }
      }
       break ;
 
Roman. :


오히려, 네, 조금 너무합니다, 나는 내 f-ii에 구멍이 너무 가득합니다 ...

맞습니다, pliz ... 나도 나 자신을 바꿀 것입니다 ...


당신은 잘못된 디자인을 가지고

 if (error == ERR_TRADE_CONTEXT_BUSY) 
      {
         while ( IsTradeContextBusy ()) 

뒤집을 필요가있다

 if ( IsTradeContextBusy ()) 
{
 // здесь выдать предупреждение и не делать торговых операций


스타일의 이데올로기

i<NumberOfTries

비전문적이라고 생각하다

 
sergeev :

당신은 잘못된 디자인을 가지고

뒤집을 필요가있다


알겠습니다. 변경하겠습니다. 덕분에.
 
Roman. :


거래 흐름이 바쁘다.

init owl의 시작 부분에서 이러한 구성을 구동할 수도 있습니다.

예를 들어 다음과 같이 주문이 이루어지지 않을 때 이 오류를 처리하여 처리합니다.

요청이 연속적으로 이루어지지 않았다면 1초면 충분합니다.
 
Slovyn :

누가 무엇이 잘못되었는지 말해 줄 수 있습니까???

거래 흐름이 바쁘다. 이것은 다음을 의미할 수 있습니다.

1) 거래 흐름이 실제로 바쁘다

2) 스레드가 바쁘지 않고 "누군가"가 바쁜 척합니다.

3) STP에 연락하면 해결할 수 있는 기술적인 문제.


그런데, 이러한 오류는 단일 거래 요청 을 보낼 때 발생할 수 있습니다. 정류장 뒤에 터미널이 있는 경우에도 종종 발생합니다.

 

예를 들어, 나는 이것을 가지고 있습니다 ... 100 %가 작업을 수행합니다)

 while ( IsTradeContextBusy ()) Sleep ( 100 );

while (!error)
{
   error= OrderCloseBy (pos1,pos2);
   Sleep ( 1000 );
}
 
OnGoing :
요청이 연속적으로 이루어지지 않았다면 1초면 충분합니다.


물론, 저는 이렇게 했습니다. Avalanche에서 주문을 여는 코드 섹션입니다. 저는 실생활에서 거래했습니다. 질문이 없었습니다.

 for ( int try = 1 ; try <= NumberOfTry; try++)
   {
       if (! IsTesting () && (! IsExpertEnabled () || IsStopped ()))
      {
         break ;
      }
   
       while (! IsTradeAllowed ()) 
      {
         Sleep ( 5000 );
      }
    
       RefreshRates ();
      opentime = TimeCurrent ();
      ticket = OrderSend (symbol, cmd, volume, price, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
       if (ticket > 0 )
      {
         if (UseSound) 
         {
             PlaySound ( "ok.wav" ); 
             break ;
         }
      } 
       else
      {
         error = GetLastError ();
         if (error == ERR_TRADE_TIMEOUT)
         {
             Sleep ( 1000 * 66 );
             if (ExistOrders(symbol, cmd, magic, opentime))
            {
               if (UseSound) 
               {
                   PlaySound ( "ok.wav" ); 
                   break ;
               }
            }
         }
        
         Print ( "Error(" , error, ") set order: " , ErrorDescription(error), ", try " , try);
         continue ;
      }
      
       Print ( "Error(" , error, ") set order: " , ErrorDescription(error), ", try " , try);
       Print ( "Ask=" , Ask, "  Bid=" , Bid, "  symbol=" , symbol, "  volume=" , volume, "  cmd=" , GetNameOP(cmd), "  price=" , price, "  stoploss=" , stoploss, "  takeprofit=" , stoploss, "  magic=" , magic);
       if ((error == ERR_COMMON_ERROR) || (error == ERR_ACCOUNT_DISABLED) || (error == ERR_INVALID_ACCOUNT) || (error == ERR_TRADE_DISABLED))
      {
         IsExpertFailed = true;
         break ;
      }
      
       if ((error == ERR_SERVER_BUSY) || (ERR_INVALID_TRADE_VOLUME) || (error == ERR_MARKET_CLOSED))
      {
         Sleep ( 1000 * 300 ); 
         break ;
      }
      
       if ((error == ERR_TOO_FREQUENT_REQUESTS) || (error == ERR_TOO_MANY_REQUESTS)) 
      {
         Sleep ( 1000 * 100 );
      }
      
       if ((error == ERR_ORDER_LOCKED) || (error == ERR_LONG_POSITIONS_ONLY_ALLOWED) || (error == ERR_TRADE_TOO_MANY_ORDERS)) 
      {
         break ;
      }
      
       if (error == ERR_TRADE_CONTEXT_BUSY) 
      {
         if ( IsTradeContextBusy ()) 
         {
             Sleep ( 1000 * 1 );
         }
      }
      
       if (error == ERR_TRADE_EXPIRATION_DENIED )
      {
         expiration = 0 ; 
         continue ;
      }
      
       if ((error != ERR_PRICE_CHANGED) && (error != ERR_REQUOTE)) 
      {
         Sleep ( 1000 * 7.7 );
      }
   }      
}
 

그래서 마이크로 리얼로 테스터에 씁니다! (센트 계정)