[档案]学习如何赚钱的村民! - 页 721

 
Slovyn:

谁能告诉我错误是什么?



贸易流动很繁忙。

你也可以把这样的结构放在init cov的开头。

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秒是不是有点长? 这不是服务器的问题,而纯粹是由于在一个终端上有大量的EA。
 
sergeev:

等待11秒不是太长了吗? 这不是服务器的问题,这取决于一个终端的EA数量。


是的,它相当长,我把它放在我的开幕式功能中...

正确,请...我自己也会进行修改......

事实上,我的另一个追求中也有同样的数字。

例如:

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


相反,是的,这有点多,我在我的开场白中如此评分。

正确,请...我也会在我的作品中进行修改......


你的设计本质上是错误的...

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

它需要被扭转

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


以及风格上的意识形态

i<NumberOfTries

我觉得很不专业。

 
sergeev:

你的设计本质上是错误的

你需要反转


我明白了--我会进行更正的。谢谢你。
 
Roman.:


贸易流动很繁忙。

你也可以把这样的结构放在init cov的开头。

它的处理方法是在没有下订单时处理这个错误,例如像这样。

只要不是连续的请求,一秒钟就够了。
 
Slovyn:

谁能告诉我错误是什么?

贸易流动很繁忙。这可能意味着。

1)贸易流实际上很繁忙

2)流量根本不忙,"有人 "在假装忙。

3)可以通过联系STP来解决的技术问题。


顺便说一下,这个错误可能发生在发送单个交易订单 时。即使是在终端拖网的情况下也经常发生。

 

例如,我有这个...100%会做手术)

while(IsTradeContextBusy()) Sleep(100);

while(!error)
{
   error=OrderCloseBy(pos1,pos2);
   Sleep(1000);
}
 
OnGoing:
只要请求不是连续的,第二种就很足够了。


我明白了,我是这样做的--从雪崩的代码部分开出订单--我在真实的交易中--没有任何问题。

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

这就是测试者在微观真实中所说的!(美分账户)