[Arquivo] Aprenda a ganhar dinheiro com os aldeões! - página 721

 
Slovyn:

Quem pode me dizer qual é o erro?



O fluxo comercial está ocupado.

Você também pode colocar tal construção no início do init cov:

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

É tratado tratando este erro quando um pedido não é feito, por exemplo, desta forma:

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


O fluxo comercial está ocupado.

É tratado tratando este erro quando um pedido não é feito, por exemplo, desta forma:


Não é um pouco longo esperar 11 segundos? Não é uma coisa de servidor, mas puramente de ter uma multidão de EAs em um terminal
 
sergeev:

Não é muito tempo para esperar 11 segundos? Não é uma coisa de servidor, depende do número de EAs em um terminal


Sim, é bastante longo, tenho-o na minha função de abertura...

Correto, por favor... Também vou fazer correções no meu...

Na verdade, eu tenho a mesma figura em minha outra busca:

por exemplo:

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


É um pouco exagerado, tenho-o tão pontuado na minha ficha de abertura...

Correto, por favor... Também vou fazer correções no meu...


seu projeto está essencialmente errado...

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

precisa ser revertida

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


e a ideologia no estilo

i<NumberOfTries

Acho pouco profissional.

 
sergeev:

seu projeto está essencialmente errado

você precisa inverter


Entendo - eu farei as correções. Obrigado.
 
Roman.:


O fluxo comercial está ocupado.

Você também pode colocar tal construção no início do init cov:

É tratado tratando este erro quando um pedido não é feito, por exemplo, desta forma:

Um segundo é tudo o que é preciso, desde que os pedidos não venham em fila.
 
Slovyn:

Quem pode me dizer qual é o erro?

O fluxo comercial é intenso. Isto pode significar que:

1) o fluxo comercial está realmente ocupado

2) o fluxo não está nada ocupado e "alguém" está fingindo estar ocupado.

3) Problemas técnicos que podem ser resolvidos entrando em contato com a STP.


E a propósito, este erro pode ocorrer ao enviar uma única ordem comercial. Muitas vezes ocorre mesmo quando uma parada é arrastada pelo terminal.

 

Eu, por exemplo, tenho isto... 100% fará a operação)

while(IsTradeContextBusy()) Sleep(100);

while(!error)
{
   error=OrderCloseBy(pos1,pos2);
   Sleep(1000);
}
 
OnGoing:
A segunda é suficiente, desde que os pedidos não sejam consecutivos.


Vejo, eu o fiz - a seção de código da Avalanche para abrir ordens - eu negociei no real - não houve dúvidas.

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);
      }
   }      
}
 

Isto é o que o testador diz no micro real! (conta em centavos)