向市场发布交易机器人时出现验证错误。 - 页 6 12345678910 新评论 Artyom Trishkin 2020.07.23 18:36 #51 Andrey Kaunov:你以为我不检查。地段大小在一个单独的函数中检查这里不需要限制,因为止损和止盈在交易开始时都等于零。RefreshRates()在计算手数时更新数据。当然,在每个条目之前没有检查连接等,但这不是重点。如果OrderSend发送了一个请求,会有一个具体的错误:130、131,等等。但我所拥有的是。 根本不是想发一个订单来开。甚至在最后一次测试中,当我在OnInit()函数 中设置一个检查位置时。这是有可能的。但我已经仔细检查了一切。我不知道下一步该去哪里。 在批量归一化功能中,你在对批量进行检查后将其四舍五入到最大/最小值。 Andrey Kaunov 2020.07.23 18:39 #52 Artyom Trishkin: 在批量归一化功能中,你在对批量进行检查后将其四舍五入到最大/最小值。 嗯,是的,我知道。MathRound(); P.S. 我认为你必须从输入参数中挖掘,因为恰好它通过了。对每个参数做一个 "万无一失 "的检查。 Andrey Kaunov 2020.07.24 07:41 #53 我不是在说验证器的测试日志。但至少那些没有被验证的参数可能会被发送。根本就没有什么可抓的,可以修复代码。我理解选择测试参数的可变性可能是无限的。你可以将一个int类型的变量设置为+50000或-45000。但我不能简单地将一些输入参数限制在某个值的范围内。不同的工具会有不同的情况。 Artyom Trishkin 2020.07.24 08:50 #54 Andrey Kaunov: 我甚至不是在谈论验证者的测试日志。但至少那些没有被验证的参数可能会被发送。根本就没有什么可抓的,可以修复代码。我理解选择测试参数的可变性可能是无限的。你可以将一个int类型的变量设置为+50000或-45000。但我不能简单地将一些输入参数限制在某个数值范围 内,因为对于不同的乐器来说,它将是不同的。 你需要确保交易批次在所有情况下都是有效的。我指出,在你的代码中,在检查了有效的尺寸范围后,你改变了地段,这不是没有道理的。 而且是必须对绝对愚蠢的输入参数进行检查。 Andrey Kaunov 2020.07.24 09:09 #55 该地段没有任何问题。它被检查为最大/最小。在四舍五入之前,它被除以步骤,然后四舍五入的整数 再乘以步骤。我们获得了一个完全正确的批次。 //+------------------------------------------------------------------+ //| Функция нормализации лота | //+------------------------------------------------------------------+ 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()*0.95; 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); } _lot(0.568)/step(0.01)=56.8 MathRound(56.8)=57 57*step(0.01)=0.57 接下来,它检查是否有足够的自由保证金来打开。验证人根本没有说很多脏话。它没有看到交易功能,显然是由于输入参数不正确。专家顾问根本就没有用某种组合来做交易!这并不像我有一个无条件的马丁,或者一个在每个烛台上都能打开的网格锁。 我如何向验证者解释,EA在逻辑上不做某些参数的交易? Artyom Trishkin 2020.07.24 09:45 #56 Andrey Kaunov:该地段没有任何问题。它被检查为最大/最小。在四舍五入之前,它被除以步骤,然后四舍五入的整数 再乘以步骤。我们获得了一个完全正确的批次。_lot(0.568)/step(0.01)=56.8MathRound(56.8)=5757*step(0.01)=0.57接下来,要检查是否有足够的自由保证金来打开。验证人根本没有骂人的意思。它没有看到交易功能,显然是由于输入参数不正确。专家顾问根本就没有用某种组合来做交易!这并不像我有一个无条件的马丁,或者一个在每个烛台上都能打开的网格锁。 我如何向验证者解释EA在逻辑上不使用某些参数进行交易? 不要解释,而是让EA纠正错误的输入参数。最好是向期刊提供关于其无效值和修正为有效值的信息。 而且,如果出于某种原因,你想让用户对在现实世界中输入不正确的参数负责,应该通知用户不正确的参数。 但是对于测试人员来说,他们也需要被纠正--这样EA才会交易。 Andrey Kaunov 2020.07.24 10:17 #57 那么,如果有一些参数适用于欧元兑美元,而另一些则适用于黄金,例如,如何调整它们。现在,默认设置对主要货币对来说或多或少是可以容忍的,但对黄金来说,它们将完全不起作用。那里将没有交易。这就是参数存在的原因(按我的理解),以使它们适应每件乐器。如果一切都那么简单,我就会把所有的参数嵌入到专家顾问中,而不会向外部发送任何东西。 验证器的另一个错误是,它根本看不到其他时间框架。我已经绕过了它,但在一定程度上损害了算法。专家顾问从其他时间段获取数据,从周、D1、H4等到M1。但数据是空的,正如我通过无数次的实验发现的那样。我们对此无能为力,我们只能绕过它。为什么我们要修改专家顾问而损害了算法?难道不是相反吗? 验证器应该适应测试。否则,测试一个完美工作的EA就会变成一种艰苦的劳动! Maxim Kuznetsov 2020.07.24 10:27 #58 Andrey Kaunov: 那么,如果有一些参数适用于欧元兑美元,而另一些则适用于黄金,例如,如何调整它们。现在,默认设置对主要货币对来说或多或少是可以容忍的,但对黄金来说,它们将完全不起作用。那里将没有交易。这就是参数存在的原因(按我的理解),以使它们适应每件乐器。如果一切都那么简单,我就会把所有的参数嵌入到专家顾问中,而不会向外部发送任何东西。 你在OrderSend 之前放了一个除以0的除法--出现了这样的错误。因此,它到达了OrderSend,但没有打开。也就是说,地段/保证金/限额/价格,其中有些东西是无法计算的 Andrey Kaunov 2020.07.24 10:31 #59 Maxim Kuznetsov: 你已经在OrderSend之前输入了除以0,而且出现了这种错误。所以它进入了OrderSend,但没有打开。因此,地段/利润/限制/价格,其中一些没有被计算在内 马克西姆,如果这些东西中的任何一项没有得到说明,验证者会给出一个 非常明确的错误:130、131、134、145等等。这里的情况不是这样的! P.S. 相信我,我在4天内已经发送了一百多份验证,并尝试了很多选项。 Andrey Kaunov 2020.07.24 10:49 #60 是的,它立即达到除以0(因此是OrderSend)。并且产生了一个错误。 但是,如果我发送检查专家顾问的代码中没有除以0,它不知何故神奇地设置了参数,在指定的时期内根本没有打开交易,并返回一个错误。这是我对正在发生的事情的看法,但显然与事实相差无几。 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你以为我不检查。地段大小在一个单独的函数中检查
这里不需要限制,因为止损和止盈在交易开始时都等于零。RefreshRates()在计算手数时更新数据。当然,在每个条目之前没有检查连接等,但这不是重点。如果OrderSend发送了一个请求,会有一个具体的错误:130、131,等等。但我所拥有的是。
根本不是想发一个订单来开。甚至在最后一次测试中,当我在OnInit()函数 中设置一个检查位置时。
这是有可能的。但我已经仔细检查了一切。我不知道下一步该去哪里。
在批量归一化功能中,你在对批量进行检查后将其四舍五入到最大/最小值。
嗯,是的,我知道。
MathRound();
P.S. 我认为你必须从输入参数中挖掘,因为恰好它通过了。对每个参数做一个 "万无一失 "的检查。我甚至不是在谈论验证者的测试日志。但至少那些没有被验证的参数可能会被发送。根本就没有什么可抓的,可以修复代码。我理解选择测试参数的可变性可能是无限的。你可以将一个int类型的变量设置为+50000或-45000。但我不能简单地将一些输入参数限制在某个数值范围 内,因为对于不同的乐器来说,它将是不同的。
你需要确保交易批次在所有情况下都是有效的。我指出,在你的代码中,在检查了有效的尺寸范围后,你改变了地段,这不是没有道理的。
而且是必须对绝对愚蠢的输入参数进行检查。
该地段没有任何问题。它被检查为最大/最小。在四舍五入之前,它被除以步骤,然后四舍五入的整数 再乘以步骤。我们获得了一个完全正确的批次。
_lot(0.568)/step(0.01)=56.8
MathRound(56.8)=57
57*step(0.01)=0.57
接下来,它检查是否有足够的自由保证金来打开。验证人根本没有说很多脏话。它没有看到交易功能,显然是由于输入参数不正确。专家顾问根本就没有用某种组合来做交易!这并不像我有一个无条件的马丁,或者一个在每个烛台上都能打开的网格锁。 我如何向验证者解释,EA在逻辑上不做某些参数的交易?
该地段没有任何问题。它被检查为最大/最小。在四舍五入之前,它被除以步骤,然后四舍五入的整数 再乘以步骤。我们获得了一个完全正确的批次。
_lot(0.568)/step(0.01)=56.8
MathRound(56.8)=57
57*step(0.01)=0.57
接下来,要检查是否有足够的自由保证金来打开。验证人根本没有骂人的意思。它没有看到交易功能,显然是由于输入参数不正确。专家顾问根本就没有用某种组合来做交易!这并不像我有一个无条件的马丁,或者一个在每个烛台上都能打开的网格锁。 我如何向验证者解释EA在逻辑上不使用某些参数进行交易?
不要解释,而是让EA纠正错误的输入参数。最好是向期刊提供关于其无效值和修正为有效值的信息。
而且,如果出于某种原因,你想让用户对在现实世界中输入不正确的参数负责,应该通知用户不正确的参数。
但是对于测试人员来说,他们也需要被纠正--这样EA才会交易。
那么,如果有一些参数适用于欧元兑美元,而另一些则适用于黄金,例如,如何调整它们。现在,默认设置对主要货币对来说或多或少是可以容忍的,但对黄金来说,它们将完全不起作用。那里将没有交易。这就是参数存在的原因(按我的理解),以使它们适应每件乐器。如果一切都那么简单,我就会把所有的参数嵌入到专家顾问中,而不会向外部发送任何东西。
验证器的另一个错误是,它根本看不到其他时间框架。我已经绕过了它,但在一定程度上损害了算法。专家顾问从其他时间段获取数据,从周、D1、H4等到M1。但数据是空的,正如我通过无数次的实验发现的那样。我们对此无能为力,我们只能绕过它。为什么我们要修改专家顾问而损害了算法?难道不是相反吗? 验证器应该适应测试。否则,测试一个完美工作的EA就会变成一种艰苦的劳动!
那么,如果有一些参数适用于欧元兑美元,而另一些则适用于黄金,例如,如何调整它们。现在,默认设置对主要货币对来说或多或少是可以容忍的,但对黄金来说,它们将完全不起作用。那里将没有交易。这就是参数存在的原因(按我的理解),以使它们适应每件乐器。如果一切都那么简单,我就会把所有的参数嵌入到专家顾问中,而不会向外部发送任何东西。
你已经在OrderSend之前输入了除以0,而且出现了这种错误。所以它进入了OrderSend,但没有打开。因此,地段/利润/限制/价格,其中一些没有被计算在内
马克西姆,如果这些东西中的任何一项没有得到说明,验证者会给出一个 非常明确的错误:130、131、134、145等等。这里的情况不是这样的!
P.S. 相信我,我在4天内已经发送了一百多份验证,并尝试了很多选项。
是的,它立即达到除以0(因此是OrderSend)。并且产生了一个错误。
但是,如果我发送检查专家顾问的代码中没有除以0,它不知何故神奇地设置了参数,在指定的时期内根本没有打开交易,并返回一个错误。这是我对正在发生的事情的看法,但显然与事实相差无几。