[Archivo] ¡Aprende a ganar dinero aldeanos! - página 721

 
Slovyn:

¿Quién puede decirme cuál es el error?



El flujo comercial está ocupado.

También se puede poner una construcción de este tipo al principio de la init cov:

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

Se trata de manejar este error cuando no se realiza un pedido, por ejemplo, así:

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


El flujo comercial está ocupado.

Se trata de manejar este error cuando no se realiza un pedido, por ejemplo, así:


¿No es un poco largo esperar 11 segundos? No es una cosa del servidor, sino puramente de tener una multitud de EAs en un terminal
 
sergeev:

¿No es demasiado tiempo para esperar 11 segundos? No es una cosa del servidor, depende del número de EAs en un terminal


Sí, es bastante largo, lo tengo en mi función de apertura...

Correcto, por favor... Yo también haré correcciones en el mío...

De hecho, tengo la misma cifra en mi otra búsqueda:

por ejemplo:

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


Más bien sí, es un poco exagerado, lo tengo tan anotado en mi apertura fi...

Correcto, por favor... Yo también haré correcciones en el mío...


su diseño es esencialmente erróneo...

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

hay que revertirlo

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


y la ideología en el estilo

i<NumberOfTries

Me parece poco profesional.

 
sergeev:

su diseño es esencialmente erróneo

necesitas invertir


Ya veo - Haré las correcciones. Gracias.
 
Roman.:


El flujo comercial está ocupado.

También se puede poner una construcción de este tipo al principio del iniit cov:

Se trata de manejar este error cuando no se realiza un pedido, por ejemplo, así:

Un segundo es todo lo que se necesita, siempre y cuando las solicitudes no vengan seguidas.
 
Slovyn:

¿Quién puede decirme cuál es el error?

El flujo comercial está ocupado. Esto podría significar que:

1) el flujo comercial está realmente ocupado

2) el flujo no está ocupado en absoluto y "alguien" está fingiendo estar ocupado.

3) Problemas técnicos que pueden resolverse poniéndose en contacto con STP.


Y por cierto, este error puede ocurrir al enviar una sola orden de comercio. A menudo ocurre incluso cuando una parada es arrastrada por el terminal.

 

Yo, por ejemplo, tengo esto... 100% hará la operación)

while(IsTradeContextBusy()) Sleep(100);

while(!error)
{
   error=OrderCloseBy(pos1,pos2);
   Sleep(1000);
}
 
OnGoing:
La segunda es suficiente, siempre que las solicitudes no sean consecutivas.


Veo, lo hice - la sección de código de Avalancha para abrir órdenes - he negociado en el real - no había preguntas.

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

¡Esto es lo que dice el probador en el micro real! (cuenta de centavos)