交易机器人在市场发布前必须经过的检验 - 页 3 12345678910...26 新评论 Vladislav Andruschenko 2016.12.18 12:29 #21 Bogdan Bovykin:我是说把它做成一个面板,然后用这种方式检查? 或者怎么做?现在只需手动打开任何交易,该 EA 就会附加到图表上的开仓单。好的如果您自己编写了这个工具,您可以在 INIT 中的测试器中打开一个交易,助手会对其进行管理。 Evgeniy Tereshchenko 2017.01.16 21:34 #22 如果 Expert Advisor 通过了终端测试并打开了交易, 那么在自动检查中会写入一个错误,即没有打开任何交易(交易对和 TF 相同),分别是它没有通过 "自动检查"。巧合吗?我不这么认为!怎么办? Vladislav Andruschenko 2017.01.17 09:18 #23 我最近也遇到了同样的错误,我不得不在 inite 中强制打开一个交易 Winsor Hoang 2017.03.09 19:03 #24 MetaQuotes 是否有可能为开发人员生成一个模板?这将使开发人员更容易,也节省了 MetaQuotes检查 提交的 EA 所需的大量资金和资源。在代码库中为开发人员提供模板https://www.mql5.com/zh/code/mt4/experts/best Rashid Umarov 2017.06.22 11:33 #25 Alain Verleyen:这是一篇有趣的文章,但遗憾的是,其中有太多错误(建议代码中的错字甚至逻辑错误),在某些地方可能会让更多人感到困惑,而不是有所帮助。1°1°//+------------------------------------------------------------------+ //| 返回符号订单允许的最大交易量。 //+------------------------------------------------------------------+ double NewOrderAllowedVolume(string symbol) { double allowed_volume=0; //--- 获取订单的最大交易量限制 double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); //--- 通过一个符号获取对音量的限制 double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT); //--- 通过一个符号获取开仓量 double opened_volume=PositionVolume(symbol); if(opened_volume>=0) There is no opened positions { //--- 如果我们已经用完了容量 if(max_volume-opened_volume<=0) return(0); //--- 未平仓头寸的交易量不超过最大交易量 double orders_volume_on_symbol=PendingsVolume(symbol); allowed_volume=max_volume-opened_volume-orders_volume_on_symbol; if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume; } return(allowed_volume); }逻辑错误。如果尚未建仓,则仍需检查挂单量并计算允许成交量。如果没有建仓,而未考虑挂单,则该代码返回 allowed_volume=0,为什么? 在此代码中,我们也会检查挂单交易量。 Rashid Umarov 2017.06.22 11:48 #26 Alain Verleyen:2°+缺少参数(PrintFormat 有 %,但只提供了 3 个参数)。谢谢!已修复bool OrderModifyCheck(ulong ticket,double price,double sl,double tp) { //--- 按机票选择订单 if(orderinfo.Select(ticket)) { //--- 挂单的点位大小和符号名称 string symbol=orderinfo.Symbol(); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); //--- 检查公开价格是否有变化 bool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point); //--- 检查止损水平是否有变化 bool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point); //--- 检查 Takeprofit 级别是否有变化 bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp); //--- 如果级别有任何变化 if(PriceOpenChanged || StopLossChanged || TakeProfitChanged) return(true); // 顺序可以修改 //--- 开仓、止损和获利水平没有变化 else //--- 错误通知 PrintFormat("Order #%d already has levels of Open=%.5f SL=%.5f TP=%.5f", ticket,orderinfo.PriceOpen(),orderinfo.StopLoss(),orderinfo.TakeProfit()); } //------结束,顺序不变 return(false); // 没有必要修改 } Rashid Umarov 2017.06.22 12:00 #27 Alain Verleyen:3°与上述第 2° 点的错误类似。同样的错误也出现在 OrderModifyCheck() mql4 版本中。全部修复,谢谢! Rashid Umarov 2017.06.22 12:08 #28 Alain Verleyen:2°bool OrderModifyCheck(ulong ticket,double price,double sl,double tp) { //--- 按机票选择订单 if(orderinfo.Select(ticket)) { //--- 挂单的点位大小和符号名称 string symbol=orderinfo.Symbol(); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); //--- 检查公开价格是否有变化 bool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point); //--- 检查止损水平是否有变化 bool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);其他逻辑错误。允许将 SL/TP 更改 1 点。应该是 >=在我的记忆中,我们使用这种做法只是为了在我们的交易请求到达服务器时,不会因为价格变化 而被交易服务器拒绝。这样做更安全。 Rashid Umarov 2017.06.22 12:14 #29 Alain Verleyen:2°bool OrderModifyCheck(ulong ticket,double price,double sl,double tp) { //--- 按机票选择订单 if(orderinfo.Select(ticket)) { //--- 挂单的点位大小和符号名称 string symbol=orderinfo.Symbol(); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); //--- 检查公开价格是否有变化 bool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point); //--- 检查止损水平是否有变化 bool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point); //--- 检查 Takeprofit 级别是否有变化 bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp); //--- 如果级别有任何变化 if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)+错字,应为"-tp)>=point);" 谢谢!已修复 Ziheng Zhuang 2017.06.23 05:35 #30 bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp);//--bool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-tp)>point); 12345678910...26 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我是说把它做成一个面板,然后用这种方式检查? 或者怎么做?
现在只需手动打开任何交易,该 EA 就会附加到图表上的开仓单。
好的
如果您自己编写了这个工具,您可以在 INIT 中的测试器中打开一个交易,助手会对其进行管理。
如果 Expert Advisor 通过了终端测试并打开了交易, 那么在自动检查中会写入一个错误,即没有打开任何交易(交易对和 TF 相同),分别是它没有通过 "自动检查"。
巧合吗?我不这么认为!
怎么办?
MetaQuotes 是否有可能为开发人员生成一个模板?这将使开发人员更容易,也节省了 MetaQuotes检查 提交的 EA 所需的大量资金和资源。
在代码库中为开发人员提供模板
https://www.mql5.com/zh/code/mt4/experts/best
这是一篇有趣的文章,但遗憾的是,其中有太多错误(建议代码中的错字甚至逻辑错误),在某些地方可能会让更多人感到困惑,而不是有所帮助。
1°
1°
逻辑错误。如果尚未建仓,则仍需检查挂单量并计算允许成交量。如果没有建仓,而未考虑挂单,则该代码返回 allowed_volume=0,为什么?
2°
+缺少参数(PrintFormat 有 %,但只提供了 3 个参数)。
谢谢!已修复
3°
与上述第 2° 点的错误类似。
同样的错误也出现在 OrderModifyCheck() mql4 版本中。
全部修复,谢谢!
2°
其他逻辑错误。允许将 SL/TP 更改 1 点。应该是 >=
在我的记忆中,我们使用这种做法只是为了在我们的交易请求到达服务器时,不会因为价格变化 而被交易服务器拒绝。
这样做更安全。
2°
+错字,应为"-tp)>=point);"
//--