对市场的自动检查 - 页 6

 
Evgeniy Scherbina:
XAUUSDcheck没有测试。但测试是成功的,因为它测试了其他一切....。
你毕竟有过测试吗?我今天早上试了一下,那个自动测试完全消失了,EA直接进入版主的测试,绕过了自动测试。就像以前一样。
 
值得一提的是。
Solving Atomatic Validation Problems
Solving Atomatic Validation Problems
  • 2017.01.11
  • Stanislav Korotky
  • www.mql5.com
If you're distributing some products for MetaTrader 4/5 via the Market, you probably know that a special "welcome" stage of automatic product validation has been added recently by MetaQuotes on the...
 
fxsaber:
值得一提的是。
"如果你认为你等得够久了,问题仍然存在,请写信给服务台,再多等一会儿;-)"。
 

并且应该与

订单发送 错误 131

没办法

在自动测试中,测试器没有错误

我按照所有的指示做了,而且成功了。

订单发送 错误 131

Uffffff!!!!
 

我认为,自动放弃是一个销售人员必须经历的第一件事。

我也有过这样的错误,而且是由于不注意。

但是,在那些从代码库中下载免费代码并试图通过改变名称来销售的 "家伙 "面前,自动无效是第一道墙。:-(

不幸的是,由于这个原因,市场上有数以千计的程序,很难从中找到几个有价值的程序。

我将在代码库中加入一个特殊的代码,这样市场就不会接受它的销售。因为这很伤人 :-( 在这里,你花了几年,甚至5年时间来开发、调整和改进程序,以使客户满意。

而有人下载了成品改了名字--以倾销的价格倾销到市场上,就这样....。 顾客认为,"更便宜意味着我买了"。....

比如在中国。

我坐在aliexpress上--至少有5根GOPRO的棍子被廉价订购--结果--在海上呆了一个星期--棍子生锈了。

这不是我的手去买100英镑的原版棒子,它不会生锈。但是没有,在中国已经给了120英镑,并订购了另一根同样的棍子.................。该死的greed......

 
Stefan Stoyanov:

并且应该与

订单发送 错误 131

没办法

在自动测试中,测试器没有错误

我做了所有的建议,但......。

订单发送 错误 131

Uffffff!!!!
你只需要检查最小值,这一点都不难。
 
Evgeniy Scherbina:
你只需要检查最小值,这一点都不难。


我有很多计算功能都是这样做的。

           double LotsOptimized()
    { int     lotDigit=(int)fabs(log10(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)));
            if(!MathIsValidNumber(lotDigit)) lotDigit=0;  
{
double FreeMg =AccountFreeMargin();
double Margin =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Minlot =MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot =MarketInfo(Symbol(),MODE_MAXLOT);
double loty =MathFloor(FreeMg*Risk/100/Margin/Step)*Step;
loty = NormalizeDouble(loty,lotDigit);
if(loty<Minlot) loty=Minlot;
if(loty>MaxLot) loty=MaxLot;  
      Lots=loty;
      Lots=NormalizeDouble(Lots,lotDigit);

      return (Lots);}}
  
//================================================================
 

市场上也有一个例子


//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
  {
//--- минимально допустимый объем для торговых операций
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
      description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- максимально допустимый объем для торговых операций
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- получим минимальную градацию объема
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
                               volume_step,ratio*volume_step);
      return(false);
     }
   description="Корректное значение объема";
   return(true);
  }
 

调用OrderSend 之前,我通过以下方式检查

如果(CheckVolumeValue(Lots,com) ==false )返回(0)。

尽管做了一切,错误131又出现了

 
Stefan Stoyanov:


我有很多计算功能,它是这样的

           double LotsOptimized()
    { int     lotDigit=(int)fabs(log10(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)));
            if(!MathIsValidNumber(lotDigit)) lotDigit=0;  
{
double FreeMg =AccountFreeMargin();
double Margin =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Minlot =MarketInfo(Symbol(),MODE_MINLOT);
double MaxLot =MarketInfo(Symbol(),MODE_MAXLOT);
double loty =MathFloor(FreeMg*Risk/100/Margin/Step)*Step;
loty = NormalizeDouble(loty,lotDigit);
if(loty<Minlot) loty=Minlot;
if(loty>MaxLot) loty=MaxLot;  
      Lots=loty;
      Lots=NormalizeDouble(Lots,lotDigit);

      return (Lots);}}
  
//================================================================

你的lotDigit是一个狡猾的傻瓜,总是计算为0,它不在文档的例子中。显然,你喜欢大量的括号?

还有这个。FreeMg*Risk/100/Margin/Step...100人是从哪里来的?显然是来自天花板。

那是一个很大的串联。这真的很多,你在计算什么?