向市场发布交易机器人时出现验证错误。 - 页 5

 
谢谢你的提示,但这可能不是我的情况。我的验证器根本看不到交易功能,没有办法达到最大的订单数量)))
 

哦,Shaitan...通过验证,现在

无交易业务

不再是一个错误。

P.S. 这是一个随机的镜头。下一次测试又是同样的事情


 
Andrey Kaunov:

这里没有错误,我完全不明白发生了什么事。我在交易功能前放了一个拐杖(除以零)

它是有效的。

我把它拿出来,它给了我同样的东西。

没有贸易业务。

不明白是什么阻止了验证器的OrderSend()。毕竟,如果传到他那里,肯定有计费错误(虽然我已经把它们都修好了)130,131,134,......,但没有"没有交易操作"。我只得在OnInit()中把一个挂单放在离它很远的地方,所以我不知道怎么打。

如果进行交易的条件没有进入代码,这样的拐杖有什么意义呢?

 
为什么它不进来?仔细看,阿列克谢。就在OrderSend 之前,有一个拐杖。
 
Andrey Kaunov:
为什么没有输入?仔细看,阿列克谢。在OrderSend之前有一个拐杖。

对。如果OrderSend没有被执行,这意味着代码执行由于某种原因没有到达它。而且不管你在条件块中在它前面放什么,都没有输入和执行,甚至没有除以0

 

等等,我不明白。如果运算符1(除以0)被执行,那么接下来就是if运算符。而这意味着要检查其状况。为了检查条件,OrderSend函数必须被执行,这意味着它是除以0后的下一个。

但不要紧。为了实验的纯洁性,我改变了代码。


其结果是一样的。有拐杖的结果是除以0的错误。 没有拐杖,结果如上所示:没有交易操作

 
Andrey Kaunov:

等等,我不明白。如果运算符1(除以0)被执行,那么接下来就是if运算符。而这意味着要检查其状况。为了检查条件,OrderSend函数必须被执行,这意味着它是除以0后的下一步。

但不要紧。为了实验的纯洁性,我改变了代码。


其结果是一样的。有拐杖的结果是除以0的错误。 没有拐杖的结果如上所示:没有交易操作

你不应该用图片来粘贴代码。根本不可能读懂它。而问题不在这个代码片段中。问题是,在某些输入参数上,一些条件没有得到满足,而且没有通知。

 
Andrey Kaunov:
为什么它不进来?

为什么你想为市场写得比为自己写得更差?

这很简单--在发送一个订单之前,看看 "它甚至可以执行吗?"

检查限额(你说过),检查资金 和保证金(你没有),看看是否有链接,以及交易是否被允许。

(选项)如果有繁重的计算,在读取Bid Ask之前刷新Rates也不是什么罪过。

为了你自己的利益,你要做所有这些检查。为什么不是现在?

 

你以为我不检查。地段大小在一个单独的函数中检查

//+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
double NormalizeLots(string symbol, double lot, bool is_margin=true) {
   if(lot<=0) return(0.0);
   RefreshRates();
   double min=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   double max=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   double step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); 
   double free = AccountFreeMargin();
   double margin = MarketInfo(symbol,MODE_MARGINREQUIRED);
   double _lot=lot<min?min:(lot>max?max:lot);
          _lot=MathRound(_lot/step)*step;
   if(is_margin && _lot*margin>free)  _lot=0.0; //MathFloor(free/margin/step)*step;
   return(_lot);
}

这里不需要限制,因为止损和止盈在交易开始时都等于零。RefreshRates()在计算手数时更新数据。当然,在每个条目之前没有检查连接等,但这不是重点。如果OrderSend发送了一个请求,会有一个具体的错误:130、131,等等。但我所拥有的是。

根本不是想发一个订单来开。甚至在最后一次测试中,当我在OnInit()函数 中设置一个检查位置时。

int OnInit() {
  
   int stops_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
   iTrailStart=inpTrailStart;
   iTrailStart2=inpTrailStart2;
   iTrailStartL=inpTrailStartL;
   //---
   if(stops_level>0) {
      if(inpTrailStart<stops_level+3) iTrailStart=stops_level+3;
      if(inpTrailStart2<stops_level+3) iTrailStart2=stops_level+3;
      if(inpTrailStartL<stops_level+3) iTrailStartL=stops_level+3;
   }
   
   Comment("");
   EventSetMillisecondTimer(300);
   ButtonCreate("V_5",5,25,50,20,"FLAT",9,clrBlack,C'236,233,235', clrNONE,false);
   ButtonCreate("V_7",60,25,50,20,"TREND",9,clrBlack,C'236,233,235', clrNONE,false);
   ButtonCreate("Auto",115,25,50,20,"Auto",9,clrBlack,C'236,233,235',clrNONE,false);
   ObjectCreate(0,"Lot",OBJ_EDIT,0,0,0);
   ObjectSetInteger(0,"Lot",OBJPROP_CORNER,CORNER_LEFT_LOWER);
   ObjectSetInteger(0,"Lot",OBJPROP_XDISTANCE,115);
   ObjectSetInteger(0,"Lot",OBJPROP_YDISTANCE,50);
   ObjectSetString(0,"Lot",OBJPROP_TEXT,"");
   ObjectSetInteger(0,"Lot",OBJPROP_ALIGN,ALIGN_RIGHT);
   ObjectSetInteger(0,"Lot",OBJPROP_FONTSIZE,9);
   ObjectSetInteger(0,"Lot",OBJPROP_COLOR,clrBlack);
   ObjectSetInteger(0,"Lot",OBJPROP_YSIZE,20);
   ButtonCreate("V_5_buy",5,50,50,20,"BUY",9,clrBlack,C'236,233,235', clrNONE,false);
   ButtonCreate("V_5_sell",60,50,50,20,"SELL",9,clrBlack,C'236,233,235', clrNONE,false); 
     
   test_ticket=OrderSend(_Symbol,OP_BUYLIMIT,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),_Point,30,0.0,0.0,"NZT-48_test",iMagicNumber,0,clrNONE);
   
   return(INIT_SUCCEEDED);
}//-------------------------------------- End OnInit ---------------------------------------- 

Alexey Viktorov:

你不应该把代码粘贴在图片上。不可能读懂它。问题不在这个代码片断。问题是,一些输入参数的某些条件没有得到满足,而且没有通知这一事实。

这可能是。但我已经仔细检查了一切。我不知道下一步该去哪里挖。

 
Andrey Kaunov:

你以为我不检查。地段大小在一个单独的函数中检查

这里不需要限制,因为止损和止盈在交易开始时都等于零。RefreshRates()在计算手数时更新数据。当然,在每个条目之前没有检查连接等,但这不是重点。如果OrderSend发送了一个请求,会有一个具体的错误:130、131,等等。但我所拥有的是。

根本不是想发一个订单来开。甚至在最后一次测试中,当我在OnInit()函数 中设置一个检查位置时。


这是有可能的。但我已经仔细检查了一切。我不知道下一步该去哪里。

看看其他命令是如何在EA中实施的。我不认为专家顾问只打开了

在开场票<0被设置了 - 看看其他逻辑,它在现实中是如何反应的