在市场发布程序遇到问题

 

我的EA准备在市场发布,已经进行到提交程序进行认证,但平台验证时总是报奇怪错误,我自己测试时从未发现,

是什么原因呢?

附加的文件:
Image_3.png  166 kb
 

單量計算設計有問題 單量要控制在交易品種最大跟最小之間 另外調整單量也要根據規格書的步進計算

這樣才能確保所交易的品種單量符合規格書的要求

 
double opLotSell=myLot;
   if(true==booMMLot)
      opLotSell=NormalizeDouble(MMper*AccountInfoDouble(ACCOUNT_MARGIN_FREE)/10000,2);
      
    if(opLotSell<SymbolInfoDouble(wMyHB,SYMBOL_VOLUME_MIN))
    {
      Print("sell min lot");
      opLotSell=SymbolInfoDouble(wMyHB,SYMBOL_VOLUME_MIN);
    }
    if(opLotSell>SymbolInfoDouble(wMyHB,SYMBOL_VOLUME_MAX))
    {
      Print("Sell max lot");
      opLotSell=SymbolInfoDouble(wMyHB,SYMBOL_VOLUME_MAX);

    }

这个是单量代码,有问题吗?检验就是某天出错,其它大部分时间和品种都没有问题

我回测时也没有问题!


 
有技术人员能回答吗?
 
Xiao Hong Bian #:
有技术人员能回答吗?
交易机器人在市场发布前必须经过的检验 - MQL5文章
交易机器人在市场发布前必须经过的检验
交易机器人在市场发布前必须经过的检验
  • www.mql5.com
任何产品在市场发布之前,它必须通过强制的预先检验,以确保符合统一的质量标准。本文介绍了开发者们在他们的技术指标和交易机器人中最常犯下的错误,并且也展示了在把产品发送到市场之前如何进行自我测试。
 

就是检验不能通过,提示偶然出现交易量问题,但程序中没有发现错误,自己测试时没有问题,想咨询这个检验错误是什么原因?

交易量代码也贴上去了,报错贴图显示交易量是正常的

00

 

二楼不是已经告诉你了么?

除了考虑最大手数,最小手数外,还必须考虑步进手数(step volume),即:

你计算出来的手数必须是step volume的整数倍。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CheckVolumeValue(string symbol,double volume,bool take_min_vol=true)
{
//--- 交易操作允许的最小交易量   
   double min_volume=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
   {
      if(take_min_vol)return(min_volume);
      return(0.0);
   }
//--- 交易操作允许的最大交易量
   double max_volume=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
   {
      return(max_volume);
   }
//--- 取得交易量变化的最小步长
   double volume_step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
   {
      volume=ratio*volume_step;
      return(volume);
   }
   return(volume);
}
 
Ziheng Zhuang #:

二楼不是已经告诉你了么?

除了考虑最大手数,最小手数外,还必须考虑步进手数(step volume),即:

你计算出来的手数必须是step volume的整数倍。

是0.01的整数倍啊,有问题就不会一年就有1天会出现啊

 opLotSell=NormalizeDouble(MMper*AccountInfoDouble(ACCOUNT_MARGIN_FREE)/10000,2);

这句能保证步进问题啊

 

不要想当然的以为step volume就是0.01,可能是0.1

你用我给的代码试试,看看问题能不能解决。

 
Ziheng Zhuang #:

不要想当然的以为step volume就是0.01,可能是0.1

你用我给的代码试试,看看问题能不能解决。

用这段代码检验了,传上去检验还是报错,谢谢请看看什么原因!

0

 

文字意思開的單超過可開單的上限

單張單有最大單量 重複持單也不能超過的

用你上面的例子 用小單量試試看

原因: