错误、漏洞、问题 - 页 2823 1...281628172818281928202821282228232824282528262827282828292830...3184 新评论 Valeriy Yastremskiy 2020.08.10 18:53 #28221 Nikolai Semko:决定检查速度漫游的版本。 结果令人惊讶。 即使是预规范化的双倍数的比较,平均来说也比通过epsilon或通过转换为int的双倍数的比较要慢。 其结果是。我不排除很多事情取决于处理器的新颖性和架构,一些程序员可能会得到不同的结果。 令人惊讶的是,四舍五入函数返回的是一个实数,而不是一个整数,你必须把类型也四舍五入到一个整数。语言的逻辑在哪里? Nikolai Semko 2020.08.10 19:23 #28222 Nikolai Semko:比较两个双数的操作性能是否取决于变量本身的值?我怀疑这一点。 似乎是这样。这相当奇怪。 如果你替换上面例子中的一行 double test = 1.11; 至 double test = NormalizeDouble(1.11,2); 两个双数的简单比较比其他选项更快开始工作。虽然它可以是双倍的,也可以是两倍的。这看起来有什么区别呢?但由此产生的性能却快了两倍。这就像一个奇迹。 2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4) простое сравнение предварительно нормализированых double 1 - 552 микросекунд, всего совпадений = 507 2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4) простое сравнение предварительно нормализированых double 2 - 954 микросекунд, всего совпадений = 507 2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4) сравнение double через эпсилон - 778 микросекунд, всего совпадений = 507 2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4) сравнение double через преобразование в int - 854 микросекунд, всего совпадений = 507 附加的文件: TestCompareDouble.mq5 5 kb Nikolai Semko 2020.08.11 01:47 #28223 Alexey Navoykov:这个测试是不正确的。 为什么你只在最后 除以100000.0一次? 应该在每次迭代时进行,然后求和。 这是一个公平的比较。 但这根本不是归一化 - 你只是优化了你的测试算法。当然,它将更快、更准确(因为累积误差减少了)。 是的,你是对的。如果你在每次迭代时都进行除法,其精确度将与NormalizeDouble 相同。但速度仍然会比使用NormalizeDouble高。 2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4) простая сумма - 1394 микросекунд, сумма = -3604329.1567609389312565 2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4) сумма с NormalizeDouble - 5861 микросекунд, сумма = -3604329.1543100476264954 2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4) сумма, нормализированная через int - 2179 микросекунд, сумма = -3604329.1543100476264954 谢谢你。 Valeriy Yastremskiy 2020.08.11 08:43 #28224 一般来说,在四舍五入到一个整数后,返回一个非整数是不好的。早些时候,我在打印机上看到过几乎是整数的数字,小数点之后是零,最后是一,或者小数点之后是九。我以为这是一个错误。事实证明,这是开发商的一个不明确的立场。好吧,四舍五入到整数,你应该把二进制形式的小数点后的余数去掉,但显然很难/不可能把尾数归零。关于规范化就更复杂了,即使我们把逗号移到5位和二进制中的整数,反向四舍五入到双数也会产生与整数类型的 差异。 可悲的是,人们不得不在看似简单的比较操作上拄着拐杖。 不是python.)))) Alexey Navoykov 2020.08.11 16:13 #28225 Valeriy Yastremskiy:一般来说,在四舍五入到一个整数后,返回一个非整数是不好的。以前在打印机中,我看到过几乎是整数的小数点后有零,末尾有一,或者小数点后有九。我以为这是一个错误。事实证明,这是开发商的一个不明确的立场。好吧,四舍五入到整数,你应该把二进制形式的小数点后的余数去掉,但显然很难/不可能把尾数归零。关于规范化就更复杂了,即使我们把逗号移到5位和二进制中的整数,反向四舍五入到双数也会产生与整数类型的 差异。可悲的是,我们不得不对看似简单的比较操作进行紧缩。 四舍五入后的表达式可能包含对结果数据的一些其他操作,而且不一定是整数操作。然后我们将不得不把它从int转换回double,在现场产生一个开销。 没有人阻止你创建自己的函数RoundInt或RoundLong,它将返回所需类型。 Vladimir Pastushak 2020.08.11 16:34 #28226 市场上的测试器有一个问题。 如果我测试一个多货币的EA,测试器就会挂掉。 原因是:在分析金融工具的过程中,专家顾问偶然发现了没有历史记录的工具,或者工具的设计不恰当。 在标准终端中,它挂起了29秒,这是肯定的,它被检查了。 市场中的测试人员报告说测试时间太长。 我假设专家顾问会遇到几个这样的破损的金融工具。 这个问题已经写过好几次了,而且是在一年前,但它仍然存在....。 fxsaber 2020.08.11 16:42 #28227 Vladimir Pastushak:这个问题已经写过好几次了,而且是在一年前,但它仍然存在....。 这对我来说是行不通的。请附上你的源代码。 SEM 2020.08.11 16:53 #28228 你能评论一下为什么这个功能不能工作吗?它不会切换到0图。 ChartSetInteger(0,CHART_BRING_TO_TOP,0,true); 模式的 第二次和进一步的应用 复制了窗口 ChartApplyTemplate(0,"Template.tpl"); 这些功能在更新前是有效的。 Vladimir Pastushak 2020.08.11 17:15 #28229 fxsaber:这不是为我玩的。附上你的源代码。 在演示的Metakvotes服务器上测试 void OnStart() { int m_all_symbols = SymbolsTotal(false); string m_sym_name = ""; for(int i = 0; i < m_all_symbols; i++) { // ====================================================================== // === Получили имя символа if((m_sym_name = SymbolName(i, false)) != NULL) { // ====================================================================== // === Если символ не выбран в окне маркет ватч if(!SymbolInfoInteger(m_sym_name, SYMBOL_SELECT)) if(!SymbolSelect(m_sym_name, true)) Print(" SymbolSelect " + m_sym_name); ulong get = GetMicrosecondCount(); MqlRates rateM1[1440]; if(CopyRates(m_sym_name, PERIOD_M1, 0, 1440, rateM1) > 0) { Print(m_sym_name, " ", (GetMicrosecondCount() - get)); } else Print("Error ",m_sym_name, " ", (GetMicrosecondCount() - get)); } } } 2020.08.11 20:20:55.657 test (EURUSD,M15) MXNJPY 1998 2020.08.11 20:20:55.659 test (EURUSD,M15) NZDMXN 1979 2020.08.11 20:20:55.661 测试(EURUSD,M15) USDCOP 1973 2020.08.11 20:20:55.663 测试(EURUSD,M15) USDARS 2093 2020.08.11 20:20:55.665 测试(EURUSD,M15) USDCLP 1929 2020.08.11 20:21:25.259 test (EURUSD,M15) Error AUS200 29593673 2020.08.11 20:21:54.837 test (EURUSD,M15) Error FCHI40 29578404 2020.08.11 20:22:24.336 test (EURUSD,M15) Error GDAXIm 29498485 2020.08.11 20:22:53.949 test (EURUSD,M15) Error HSI50 29612968 2020.08.11 20:23:23.458 test (EURUSD,M15) Error Jap225 29509059 2020.08.11 20:23:52.919 test (EURUSD,M15) Error ND100m 29461316 2020.08.11 20:24:22.425 test (EURUSD,M15) Error SP500m 29505571 2020.08.11 20:24:51.860 test (EURUSD,M15) Error SPN35 29435460 2020.08.11 20:25:21.273 test (EURUSD,M15) Error STOX50 29412578 2020.08.11 20:25:50.663 test (EURUSD,M15) Error UK100 29389644 2020.08.11 20:26:20.205 test (EURUSD,M15) Error Brent 29542597 2020.08.11 20:26:49.667 test (EURUSD,M15) Error Crude 29462066 2020.08.11 20:27:19.194 test (EURUSD,M15) Error NatGas 29526780 Errors, bugs, questions Why my stop loss VPS not working fxsaber 2020.08.11 17:31 #28230 Vladimir Pastushak:在演示的Metacvots服务器上测试对不起,它现在挂断了.... 在我的机器上,这个脚本并没有导致终端机挂起。 1...281628172818281928202821282228232824282528262827282828292830...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
决定检查速度漫游的版本。
结果令人惊讶。
即使是预规范化的双倍数的比较,平均来说也比通过epsilon或通过转换为int的双倍数的比较要慢。
其结果是。
我不排除很多事情取决于处理器的新颖性和架构,一些程序员可能会得到不同的结果。
比较两个双数的操作性能是否取决于变量本身的值?我怀疑这一点。
似乎是这样。这相当奇怪。
如果你替换上面例子中的一行
至
两个双数的简单比较比其他选项更快开始工作。虽然它可以是双倍的,也可以是两倍的。这看起来有什么区别呢?但由此产生的性能却快了两倍。这就像一个奇迹。
这个测试是不正确的。 为什么你只在最后 除以100000.0一次? 应该在每次迭代时进行,然后求和。 这是一个公平的比较。 但这根本不是归一化 - 你只是优化了你的测试算法。当然,它将更快、更准确(因为累积误差减少了)。
是的,你是对的。如果你在每次迭代时都进行除法,其精确度将与NormalizeDouble 相同。但速度仍然会比使用NormalizeDouble高。
谢谢你。
一般来说,在四舍五入到一个整数后,返回一个非整数是不好的。早些时候,我在打印机上看到过几乎是整数的数字,小数点之后是零,最后是一,或者小数点之后是九。我以为这是一个错误。事实证明,这是开发商的一个不明确的立场。好吧,四舍五入到整数,你应该把二进制形式的小数点后的余数去掉,但显然很难/不可能把尾数归零。关于规范化就更复杂了,即使我们把逗号移到5位和二进制中的整数,反向四舍五入到双数也会产生与整数类型的 差异。
可悲的是,人们不得不在看似简单的比较操作上拄着拐杖。
不是python.))))
一般来说,在四舍五入到一个整数后,返回一个非整数是不好的。以前在打印机中,我看到过几乎是整数的小数点后有零,末尾有一,或者小数点后有九。我以为这是一个错误。事实证明,这是开发商的一个不明确的立场。好吧,四舍五入到整数,你应该把二进制形式的小数点后的余数去掉,但显然很难/不可能把尾数归零。关于规范化就更复杂了,即使我们把逗号移到5位和二进制中的整数,反向四舍五入到双数也会产生与整数类型的 差异。
可悲的是,我们不得不对看似简单的比较操作进行紧缩。
四舍五入后的表达式可能包含对结果数据的一些其他操作,而且不一定是整数操作。然后我们将不得不把它从int转换回double,在现场产生一个开销。
没有人阻止你创建自己的函数RoundInt或RoundLong,它将返回所需类型。
市场上的测试器有一个问题。
如果我测试一个多货币的EA,测试器就会挂掉。
原因是:在分析金融工具的过程中,专家顾问偶然发现了没有历史记录的工具,或者工具的设计不恰当。
在标准终端中,它挂起了29秒,这是肯定的,它被检查了。
市场中的测试人员报告说测试时间太长。
我假设专家顾问会遇到几个这样的破损的金融工具。
这个问题已经写过好几次了,而且是在一年前,但它仍然存在....。
这个问题已经写过好几次了,而且是在一年前,但它仍然存在....。
这对我来说是行不通的。请附上你的源代码。
你能评论一下为什么这个功能不能工作吗?它不会切换到0图。
模式的 第二次和进一步的应用 复制了窗口
这些功能在更新前是有效的。
这不是为我玩的。附上你的源代码。
在演示的Metakvotes服务器上测试
2020.08.11 20:20:55.657 test (EURUSD,M15) MXNJPY 1998
2020.08.11 20:20:55.659 test (EURUSD,M15) NZDMXN 1979
2020.08.11 20:20:55.661 测试(EURUSD,M15) USDCOP 1973
2020.08.11 20:20:55.663 测试(EURUSD,M15) USDARS 2093
2020.08.11 20:20:55.665 测试(EURUSD,M15) USDCLP 1929
2020.08.11 20:21:25.259 test (EURUSD,M15) Error AUS200 29593673
2020.08.11 20:21:54.837 test (EURUSD,M15) Error FCHI40 29578404
2020.08.11 20:22:24.336 test (EURUSD,M15) Error GDAXIm 29498485
2020.08.11 20:22:53.949 test (EURUSD,M15) Error HSI50 29612968
2020.08.11 20:23:23.458 test (EURUSD,M15) Error Jap225 29509059
2020.08.11 20:23:52.919 test (EURUSD,M15) Error ND100m 29461316
2020.08.11 20:24:22.425 test (EURUSD,M15) Error SP500m 29505571
2020.08.11 20:24:51.860 test (EURUSD,M15) Error SPN35 29435460
2020.08.11 20:25:21.273 test (EURUSD,M15) Error STOX50 29412578
2020.08.11 20:25:50.663 test (EURUSD,M15) Error UK100 29389644
2020.08.11 20:26:20.205 test (EURUSD,M15) Error Brent 29542597
2020.08.11 20:26:49.667 test (EURUSD,M15) Error Crude 29462066
2020.08.11 20:27:19.194 test (EURUSD,M15) Error NatGas 29526780
在演示的Metacvots服务器上测试
对不起,它现在挂断了....
在我的机器上,这个脚本并没有导致终端机挂起。