检查在市场上发布的EA中的最小止损。 - 页 12

 
Igor Volodin:

你不能这样除以一个点,SymbolInfoDouble(symToWorkmodify,SYMBOL_POINT) 函数的值可能等于零。
这也适用于其他市场功能。

例如,在计算中使用AccountInfoInteger(ACCOUNT_LEVERAGE) 导致一些Expert Advisors 在2010年的冠军赛中崩溃,出现零除法 错误,而这个函数在OnInit中返回0。

如果你看一下参考文献,SymbolInfoDouble()、SymbolInfoInteger() 必须始终检查错误。
 
Vladimir Gribachev:

如果有那么糟糕,那就这样吧

请再次注意,该主题是关于停滞水平为0的情况。你引用了一个测试结果,其停顿程度大于零。

如果真的那么糟糕,正如Andrey F. Zelinsky 正确地指出的那样

你可以为第130个错误添加一个检查,并在止损点上添加+1。但这根本没有意义。
检查错误130是一种正常的做法,就像程序中的任何其他错误一样。但在止损点上加1,首先,没有帮助,其次,是一个糟糕的解决方案。
 
Ihor Herasko:

请再一次注意,这个话题是关于水平线为0时的情况。你给出的测试结果的止水位大于零。

告诉我MetaQuotes-Demo服务器上哪里有 stoplevel = 0

即使止损水平=0,那么最小止损等于点差的价值。

如果点差也=0,那么请告诉我这样的经纪人,我会去那里削减我的资金。

检查错误130是正常的做法,就像程序中任何其他错误一样。至于在止损点上加1,首先它没有帮助,其次它是一个错误的决定。

谁说这是好事。

我贴出了检查代码,你放了猫头鹰来验证,我显示在版主检查的服务器上,这个检查是有效的。

如果你需要嘲弄这个系统,而没有找到topikstarter想要的解决方案,你需要创建一个新的主题,名为 "让我们炸毁 大脑!"。

ZS.主题管理员需要一个解决方案,以便在市场上得到检验。主持人在他们的服务器上测试,而不是在阿尔卑斯山或其他地方。

 
Vladimir Gribachev:

如果点差也是0,那就给我看看这样的经纪人,我就去那里剁手。

不,你不会的,会有佣金的。
 

:-)我读完后笑了。


我没有问如果服务器返回0该怎么做,节制你的自我 - 我是专门针对一个人的,他将理解或不理解 - 但这并不重要。

写这个帖子不是为了交流,而是为了了解程序员把产品放在市场上的具体例子,从一个从来没有卖过一个产品的人那里听到这个消息很奇怪--关于什么该做,什么不该做。

该主题是关于市场上的核查。

我们不是在讨论一个EA应该检查什么以及如何处理错误。- 我对这一点没有意见。

 
Vladislav Andruschenko:

我没有问如果服务器返回0该怎么做

那么你应该在主题行中更清楚地说明。

现在,90%的经纪商都有浮动点差和最小止损 回报率为0

 
Ihor Herasko:

那么你需要在主题中更清楚地说明。

我问的是,如果服务器返回0,如何绕过市场错误 - 当在macret中检查时,主持人把止损=1,但EA不能改变为最小止损,因为它是0, - 它是浮动的。

很明显,EA返回错误130,并说止损是错误的,进行修改,但在市场上,这个命令不起作用。

我的帖子听起来是这样的。

各位朋友,大家好

市场有一个特点: 你必须检查所有的最小停止值。

如果变量的值小于最小止损点,那么就指定一个最小止损点,这样就不会出现错误130

目前90%的经纪商有浮动点差和最小STOP,收益率为0。

有一个代码结构,将所有的变量都分配给最小的停止

 int OnInitLevels(string symToWorkmodify)
  {
   if(lot<SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN);else
   if(lot>SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX);else lots=lot;
   if(StopLoss>0 && StopLoss<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))StopLosss=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else StopLosss=StopLoss;
   if(TakeProfit>0 && TakeProfit<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfits=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfits=TakeProfit;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   if(TakeProfitALL>0 && TakeProfitALL<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfitsAver=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfitsAver=(int)TakeProfitALL;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   return(0);
  }

但这在市场上已经不起作用了,因为现在到处都是minstop=0。

谁在处理这个问题?

 
Vladimir Gribachev:

告诉我MetaQuotes-Demo服务器上哪里有 stoplevel = 0

不是在MetaQuotes服务器上,而是在市场上的检查(见该主题的第一个帖子)。

但它在市场上不再通过,因为现在到处都是min stoplevel = 0 。

弗拉基米尔-格里巴乔夫

即使最小止损=0,那么最小止损就等于点差。

不是一个事实。可能有2或3个价差。也许你根本没有遇到过这种情况。但这并不意味着它们不存在。如果你不知道我在说什么,你可以试着避开它们。

 
Ihor Herasko:

不是在MetaQuotes服务器上,而是在市场中检查时(见该主题的第一个帖子)。

不是一个事实。可能有2或3个传播。也许你只是没有遇到过这种情况。但这并不意味着它们不存在。我提到的那个经纪人的情况也完全一样。

i>这就是问题的关键,为1-2-3价差设置一个硬性的最小止损是一个借口。

你需要一个真正的解决方案来解决浮动止损的问题。

他们不知道他们有什么样的浮动停止,但他们不告诉你如何做。我很抱歉,或者他就是不告诉我。

 

我想你应该清楚这个问题))。同时,你很困惑。

я не спрашивал что делать если сервер возвращает 0

并通过邮寄。

我问的是,如果服务器返回0,如何绕过市场错误。