mql5语言的特点、微妙之处以及技巧 - 页 237 1...230231232233234235236237238239240241242243244...247 新评论 Nikolai Semko 2023.11.15 06:33 #2361 Alain Verleyen #:我可能遗漏了什么,但我使用了您的脚本来检查 PeriodSeconds(仅)。我的结果与您的测试结果一致:2023.11.15 00:26:58.896 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 29.78 наносекунд - PeriodSecondsFastFXS 2023.11.15 00:26:59.056 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 16.03 наносекунд - PeriodSecondsFast 2023.11.15 00:26:59.477 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 42.08 наносекунд - Расчет через PeriodSeconds 2023.11.15 00:26:59.477 DDD__ (EURUSD,M1) ======================================================================== 2023.11.15 00:27:16.018 DDD__ (EURUSD,M1) =====LOOP=10000000 2023.11.15 00:27:16.318 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 29.99 наносекунд - PeriodSecondsFastFXS 2023.11.15 00:27:16.474 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 15.59 наносекунд - PeriodSecondsFast 2023.11.15 00:27:16.901 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 42.74 наносекунд - Расчет через PeriodSeconds 2023.11.15 00:27:16.901 DDD__ (EURUSD,M1) ======================================================================== 2023.11.15 00:27:25.206 DDD__ (EURUSD,M1) =====LOOP=10000000 2023.11.15 00:27:25.508 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 30.14 наносекунд - PeriodSecondsFastFXS 2023.11.15 00:27:25.666 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 15.77 наносекунд - PeriodSecondsFast 2023.11.15 00:27:26.110 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 44.47 наносекунд - Расчет через PeriodSeconds 2023.11.15 00:27:26.110 DDD__ (EURUSD,M1) ======================================================================== 2023.11.15 00:27:40.780 DDD__ (EURUSD,M1) =====LOOP=10000000 2023.11.15 00:27:41.089 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 30.90 наносекунд - PeriodSecondsFastFXS 2023.11.15 00:27:41.249 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 15.98 наносекунд - PeriodSecondsFast 2023.11.15 00:27:41.676 DDD__ (EURUSD,M1) контрольная сумма - 34192800000000, время выполнения 1 иттерации = 42.72 наносекунд - Расчет через PeriodSeconds 2023.11.15 00:27:41.676 DDD__ (EURUSD,M1) ======================================================================== 0 errors, 0 warnings, 234 msec elapsed, cpu='AVX2 + FMA3' 我不太喜欢测试本身,因为测试中进行了 1000 万次相同的计算。在这种情况下,无法保证编译器在优化代码时不会出现意外。 而这些值必须除以 21,因为总共有 21*10 000 000 次迭代。不过,这个测试也证实了我的结论,但针对的是我的处理器,因为我的处理器似乎更新颖,因此最大限度地使用了现代性能特性,也因此更客观,因为它更与时俱进。我很想知道其他人的测试结果。 Slava 2023.11.15 07:37 #2362 fxsaber #:看了一下格式。可能不会加快速度。不过,我听说了开关的神奇速度。 稀疏切换不会带来奇迹般的速度。 最惊人的速度将出现在以 1 为增量、从 0 到 255 的开关中。 fxsaber 2023.11.15 11:36 #2363 Slava #:稀疏开关不会带来惊人的速度。最令人惊叹的速度将出现在以 1 为增量、从 0 到 255 的开关中。 谢谢。 Alain Verleyen 2023.11.15 14:43 #2364 Nikolai Semko # :我的测试结果我不太喜欢测试本身,因为测试中出现了 1000 万次相同的计算。在这种情况下,无法保证编译器在试图优化代码时不会出现意外。 而这些值应该除以 21,因为总共有 21*10 000 000 次迭代。不过,这个测试也证实了我的结论,但针对的是我的处理器,它似乎更新颖,因此最大限度地使用了现代性能特性,也因此更客观,因为它更与时俱进。我很想知道其他人的测试结果。 谢谢。 昨天我发布不带编译器优化的结果时已经很晚了。 下面是使用 cpu='AVX2 + FMA3' 和最大优化时的结果。 fxsaber 2023.11.15 14:56 #2365 Nikolai Semko #:这种算法的主要难点在于计算月份的开始时间(以绿色标出)。 这是代码中最有趣的地方,在讨论中几乎没有涉及。 Nikolai Semko 2023.11.15 15:19 #2366 fxsaber #:代码中最有趣的事情,在讨论中几乎没有触及。 在这里,一年的开始时间是 3 月 1 日,而不是 1 月 1 日。这是我在 stackoverflow 上看到的提示。这是个很好的建议。我不得不写一个脚本来找到 30.68 因子 fxsaber 2023.11.26 10:33 #2367 我必须以 mqh-library 的形式保存非常简短的代码(< 15 行)。 template <typename T1, typename T2> T1* New( const string &ClassName ) { return((typename(T2) == ClassName) ? new T2 : NULL); } template <typename T1, typename T2> T1* New( string ClassName, const T2 &FuncNew[] ) { T1* Res = NULL; #ifdef __MQL5__ ClassName = "class " + ClassName; #endif // #ifdef __MQL5__ for (uint i = ArraySize(FuncNew); (Res == NULL) && (bool)i--;) Res = FuncNew[i](ClassName); return(Res); } 这是被迫采取的措施,因为指向函数的指针只能指向全局 scopus 中的函数。 您使用的库有多短? fxsaber 2023.11.27 09:38 #2368 模板函数的签名可能取决于其调用的位置。 交易、自动交易系统和交易策略测试论坛 错误、错误、问题 fxsaber, 2023.11.26 23:26 template <typename T> void Func( void ) { Print(__FUNCSIG__); } void OnStart() { Func<int>(); // void "void OnStart()"::Func<int>() } fxsaber 2023.12.10 23:47 #2369 如果我没理解错的话,在这种情况下,A::f() 方法是内联在 g() 中的。 class A { void f() {} void g() { this.f(); } }; 而这里没有。 class A { virtual void f() {} void g() { this.f(); } }; 在第二种情况下,如果代码中没有创建 A 类的后代对象,编译器是否会将 A::f() 内联? fxsaber 2023.12.17 02:35 #2370 有时您需要在展示台的某个位置设置断点。为此,我使用了这样一个函数。 bool IsManualChangeTester() { static const bool IsVisual = MQLInfoInteger(MQL_VISUAL_MODE); static ENUM_CHART_MODE PrevChartMode = (ENUM_CHART_MODE)ChartGetInteger(0, CHART_MODE); bool Res = false; if (IsVisual) { const ENUM_CHART_MODE ChartMode = (ENUM_CHART_MODE)ChartGetInteger(0, CHART_MODE); if (Res = (ChartMode != PrevChartMode)) PrevChartMode = ChartMode; } return(Res); }有了这个应用程序if (IsManualChangeTester()) DebugBreak();当我需要创建这种条件时,我只需在可视化器中更改图形显示 模式。 然后在 ME 中分析 Expert Advisor 的行为。 1...230231232233234235236237238239240241242243244...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我可能遗漏了什么,但我使用了您的脚本来检查 PeriodSeconds(仅)。
我的结果与您的测试结果一致:
0 errors, 0 warnings, 234 msec elapsed, cpu='AVX2 + FMA3'
我不太喜欢测试本身,因为测试中进行了 1000 万次相同的计算。在这种情况下,无法保证编译器在优化代码时不会出现意外。
而这些值必须除以 21,因为总共有 21*10 000 000 次迭代。
不过,这个测试也证实了我的结论,但针对的是我的处理器,因为我的处理器似乎更新颖,因此最大限度地使用了现代性能特性,也因此更客观,因为它更与时俱进。
我很想知道其他人的测试结果。
看了一下格式。
可能不会加快速度。不过,我听说了开关的神奇速度。
稀疏切换不会带来奇迹般的速度。
最惊人的速度将出现在以 1 为增量、从 0 到 255 的开关中。
稀疏开关不会带来惊人的速度。
最令人惊叹的速度将出现在以 1 为增量、从 0 到 255 的开关中。
谢谢。
我的测试结果
我不太喜欢测试本身,因为测试中出现了 1000 万次相同的计算。在这种情况下,无法保证编译器在试图优化代码时不会出现意外。
而这些值应该除以 21,因为总共有 21*10 000 000 次迭代。
不过,这个测试也证实了我的结论,但针对的是我的处理器,它似乎更新颖,因此最大限度地使用了现代性能特性,也因此更客观,因为它更与时俱进。
我很想知道其他人的测试结果。
谢谢。
昨天我发布不带编译器优化的结果时已经很晚了。
下面是使用 cpu='AVX2 + FMA3' 和最大优化时的结果。
这种算法的主要难点在于计算月份的开始时间(以绿色标出)。
这是代码中最有趣的地方,在讨论中几乎没有涉及。
代码中最有趣的事情,在讨论中几乎没有触及。
我必须以 mqh-library 的形式保存非常简短的代码(< 15 行)。
这是被迫采取的措施,因为指向函数的指针只能指向全局 scopus 中的函数。
您使用的库有多短?
交易、自动交易系统和交易策略测试论坛
错误、错误、问题
fxsaber, 2023.11.26 23:26
如果我没理解错的话,在这种情况下,A::f() 方法是内联在 g() 中的。
而这里没有。
在第二种情况下,如果代码中没有创建 A 类的后代对象,编译器是否会将 A::f() 内联?
有了这个应用程序
当我需要创建这种条件时,我只需在可视化器中更改图形显示 模式。
然后在 ME 中分析 Expert Advisor 的行为。