向#define专家提问 - 页 8 123456789101112 新评论 Alexandr Andreev 2020.11.02 22:31 #71 void OnStart() { int mas[]; int mas1[300]; int mas2[300]; int mas3[300]; int mas4[300]; int mas5[300]; int mas6[300]; int z=300; int size=100000000; ArrayResize(mas,size); ulong r=0; ulong r1=0; ulong r2=0; int random; ulong max=100; int t=0; int tr=0; MathSrand(10); int num_steps=ArraySize(mas); double x, pi, sum=0.0; double step = 1.0/(double)num_steps; int v=size; ulong t1 = GetMicrosecondCount(); // for(ulong z=0; z<max; z++) { for(ulong i=0; i<ArraySize(mas); i++) { r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2=r2/10; } } ulong t2=GetMicrosecondCount(); //for(ulong z=0; z<max; z++) { for(ulong i=0; i<v; i++) { r1+=v; r1=r1/10; } } int pi2 = sum*step; ulong t3=GetMicrosecondCount(); Print(t2-t1," ",t3-t2," ",r," ",r1," ",r2," ",pi," ",pi2); // Templ(); } 即便如此,顶级代码有时也会获胜,但非常少,也就是说,链接是免费的 Roman 2020.11.02 22:39 #72 Alexandr Andreev:)好吧,这不是它的工作方式) 这就是它在C++中的工作原理 在mql中,我想它也是一样的,但有来自MQ的额外包装器 关于交易、自动交易系统和策略测试的论坛 初学者的常见问题 MQL5 MT5 MetaTrader 5 罗曼, 2019.12.11 14:02 你不需要考虑清楚,我为什么要...编译器会自己完成这些工作。)) C#不是C语言 请看一下关于__在线的视频。 它在那里解释了功能是如何在记忆中工作的,对于那些没有任何区别的人。 Alexandr Andreev 2020.11.02 22:59 #73 Roman: 在C++中是这样的 在mql中我认为也是这样的,但要有来自MQ的额外包装器 好了,现在重读这个主题和大量的声明和测试例子--那是有一些区别。而我们找到了))))。 Roman 2020.11.02 23:07 #74 Alexandr Andreev:那么现在重读这个主题和一堆声明和测试的例子--那是有区别的。他们还做了)))) 没有))我没有意愿重读它。 对我来说,这很明显是有区别的。 Alexandr Andreev 2020.11.02 23:26 #75 Roman:没有))我没有意愿重读它。 对我来说,这很明显是有区别的。 )))) 另一个IMHO。 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { int mas[]; int mas1[300]; int mas2[300]; int mas3[300]; int mas4[300]; int mas5[300]; int mas6[300]; int z=300; int size=1000000000; ArrayResize(mas,size); ulong r=0; ulong r1=0; ulong r2=0; int random; ulong max=100; int t=0; int tr=0; MathSrand(10); int num_steps=ArraySize(mas); double x, pi, sum=0.0; double step = 1.0/(double)num_steps; int v=size; ulong t1 = GetMicrosecondCount(); // for(ulong z=0; z<max; z++) { for(int i=0; i<ArraySize(mas); i++) { r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2+=ArraySize(mas2); r2+=ArraySize(mas3); r2+=ArraySize(mas4); r2+=ArraySize(mas5); r2+=ArraySize(mas6); r2+=ArraySize(mas1); r2++; r2=r2/100; } } ulong t2=GetMicrosecondCount(); //for(ulong z=0; z<max; z++) int sizem=ArraySize(mas); { for(int i=0; i<sizem; i++) { r1++; r1=r1/100; r1++; } } ulong t3=GetMicrosecondCount(); Print(t2-t1," ",t3-t2," ",r2," ",r1); // Templ(); } //+------------------------------------------------------------------+ //| void Funk(ulong &a){a++;} void FunkRand(ulong &a){a+=rand();} //+------------------------------------------------------------------+ 上面的方法几乎快了15%,这是非常重要的,如果一切都那么明显,请向我解释一下) Roman 2020.11.02 23:31 #76 Alexandr Andreev:)))) 另一个IMHO顶部的方式几乎快了20%,好吧,既然一切都那么明显,那就向我解释一下吧) 被比较的循环在正文中的代码方面是不一样的。 第一个循环的主体有一个代码,第二个循环的主体有另一个代码。 自然是不同的代码指令,自然是不同的执行时间。 在循环体中做同样的代码,只改变循环条件ArraySize 和size变量。 我们正在测试这部分,而不是身体。 Alexandr Andreev 2020.11.02 23:38 #77 Roman:被比较的循环在正文中的代码是不一样的。 第一个循环的主体有一个代码,第二个循环的主体有另一个代码。 自然,不同的代码指令和执行时间是不同的。 在循环体中做同样的代码,只改变循环条件ArraySize和size变量。 我们正在测试这部分,而不是身体。 你的测试更不正确,因为它取决于启动案例,再运行一次。在这两种情况下,都有一个增量和一个除数。好吧,再加上上面有几个额外的几百~ 几十亿的ArraySize调用。 顺便说一下,我们应该在正文中写出我们要测试的内容。因为被重复的是身体。我们正试图将其包入loop....,以获得一个结果也就是说,原来需要从正文中调用ArraySize。 Документация по MQL5: Операции с массивами / ArraySize www.mql5.com "Нулевое измерение = Размер массива / (Первое измерение * Второе измерение * Третье измерение)" Roman 2020.11.02 23:43 #78 Alexandr Andreev:你的测试更不正确,因为它取决于发射情况,再运行一次。这里,两种情况都有增量和一个除数。嗯,再加上上面有几百~ 几十亿的ArraySize调用。顺便说一下,我们应该在正文中写出我们的测试内容。因为被重复的是身体。我们正试图将其包入loop....,以获得一个结果也就是说,最初需要从主体中调用ArraySize 在每个迭代中,循环的条件已经包含了对i<ArraySize()或i<size 条件的检查,即在每个迭代中要么调用一个函数要么调用一个变量。 我们为什么要把被测试的物体放入体内? 逻辑本身促使我们决定哪一个会更快处理。对一个函数或对一个变量。 我不关心编译器怎么称呼它。我并不依赖编译器,我只是用我的常识来计算,从参考的角度来看,什么是更快的处理。 Alexandr Andreev 2020.11.02 23:46 #79 Roman:在每个迭代中,在循环的条件中,无论如何都要检查i<ArraySize()或i<size,这意味着在每个迭代中,要么访问一个函数,要么访问一个变量。 我们为什么要把被测试的对象放在身体里? 因为我们是拥有这种功能的幸运者,而这种功能可以是任何其他的功能。而它正好被放在身体里。我只是为了加强其效果和解决不同的阵列而重复了它。 但增加更复杂的任务是错误的,这些任务的计算误差可能会掩盖研究中的效果。顺便说一下,也有可能汇编在μl中不是恒定的。也就是说,当重新编译时可以得到稍微不同的数据(虽然这不是确切的,但它有点像用来防止黑客攻击的)所以一切都可以在你的代码上为你测试。看看结果是否有变化。 Mcl只是试图按照视频中的指示来替换代码。嗯,那里的情况有点不同。但一般来说。 而那些不知道会得到什么值的函数的说明--这就是js和php以及其他类似语言的工作方式,甚至μl也是这样工作的,但只在调试模式 下。 Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе www.mql5.com Информация о запущенной MQL5-программе - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Alexandr Andreev 2020.11.02 23:58 #80 Roman:在每个迭代中,在循环的条件中,无论如何都要检查i<ArraySize()或i<size,这意味着在每个迭代中要么调用一个函数,要么调用一个变量。 我们为什么要把被测试的物体放入体内? 逻辑本身促使我们决定哪一个会更快处理。对一个函数或对一个变量。我不关心编译器怎么称呼它。我不依靠编译器,我依靠常识,从参考的角度出发,弄清楚什么是更快处理的。 它并不总是有效。 关于交易、自动交易系统和交易策略测试的论坛 向#define专家提问 罗曼, 2020.11.02 19:44 改了我的帖子。 它是反过来的,也就是说,ArraySize现在比cnt快。 以前是反之亦然。也许增量cnt--影响,循环的主体是不同的,可能必须为负载发明其他东西。 void OnStart() { int arr[]; int sz = ArrayResize(arr, 100000000); ulong t = GetMicrosecondCount(); for(int i=0; i < ArraySize(arr); i++) { ArrayResize(arr, sz--); //какая то нагрузка } t = GetMicrosecondCount() - t; PrintFormat("Total time: %.3f ms", t / 1000.0); } 2020.11.02 21:33:22.863 TestScript (USDJPY,M1) Total time: 451.200 ms void OnStart() { int arr[]; int sz = ArrayResize(arr, 100000000); int cnt = ArraySize(arr); ulong t = GetMicrosecondCount(); for(int i=0; i < cnt; i++) { ArrayResize(arr, sz--); cnt--; } t = GetMicrosecondCount() - t; PrintFormat("Total time: %.3f ms", t / 1000.0); } 2020.11.02 21:56:26.591 TestScript (USDJPY,M1) Total time: 531.872 ms 123456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
即便如此,顶级代码有时也会获胜,但非常少,也就是说,链接是免费的
)好吧,这不是它的工作方式)
这就是它在C++中的工作原理
在mql中,我想它也是一样的,但有来自MQ的额外包装器
关于交易、自动交易系统和策略测试的论坛
初学者的常见问题 MQL5 MT5 MetaTrader 5
罗曼, 2019.12.11 14:02
你不需要考虑清楚,我为什么要...编译器会自己完成这些工作。))
C#不是C语言
请看一下关于__在线的视频。
它在那里解释了功能是如何在记忆中工作的,对于那些没有任何区别的人。
在C++中是这样的
在mql中我认为也是这样的,但要有来自MQ的额外包装器
好了,现在重读这个主题和大量的声明和测试例子--那是有一些区别。而我们找到了))))。
那么现在重读这个主题和一堆声明和测试的例子--那是有区别的。他们还做了))))
没有))我没有意愿重读它。
对我来说,这很明显是有区别的。
没有))我没有意愿重读它。
对我来说,这很明显是有区别的。
)))) 另一个IMHO。
上面的方法几乎快了15%,这是非常重要的,如果一切都那么明显,请向我解释一下)
)))) 另一个IMHO
顶部的方式几乎快了20%,好吧,既然一切都那么明显,那就向我解释一下吧)
被比较的循环在正文中的代码方面是不一样的。
第一个循环的主体有一个代码,第二个循环的主体有另一个代码。
自然是不同的代码指令,自然是不同的执行时间。
在循环体中做同样的代码,只改变循环条件ArraySize 和size变量。
我们正在测试这部分,而不是身体。
被比较的循环在正文中的代码是不一样的。
第一个循环的主体有一个代码,第二个循环的主体有另一个代码。
自然,不同的代码指令和执行时间是不同的。
在循环体中做同样的代码,只改变循环条件ArraySize和size变量。
我们正在测试这部分,而不是身体。
你的测试更不正确,因为它取决于启动案例,再运行一次。在这两种情况下,都有一个增量和一个除数。好吧,再加上上面有几个额外的几百~ 几十亿的ArraySize调用。
顺便说一下,我们应该在正文中写出我们要测试的内容。因为被重复的是身体。我们正试图将其包入loop....,以获得一个结果也就是说,原来需要从正文中调用ArraySize。
你的测试更不正确,因为它取决于发射情况,再运行一次。这里,两种情况都有增量和一个除数。嗯,再加上上面有几百~ 几十亿的ArraySize调用。
顺便说一下,我们应该在正文中写出我们的测试内容。因为被重复的是身体。我们正试图将其包入loop....,以获得一个结果也就是说,最初需要从主体中调用ArraySize
在每个迭代中,循环的条件已经包含了对i<ArraySize()或i<size
条件的检查,即在每个迭代中要么调用一个函数要么调用一个变量。
我们为什么要把被测试的物体放入体内?
逻辑本身促使我们决定哪一个会更快处理。对一个函数或对一个变量。
我不关心编译器怎么称呼它。我并不依赖编译器,我只是用我的常识来计算,从参考的角度来看,什么是更快的处理。
在每个迭代中,在循环的条件中,无论如何都要检查i<ArraySize()或i<size
,这意味着在每个迭代中,要么访问一个函数,要么访问一个变量。
我们为什么要把被测试的对象放在身体里?
因为我们是拥有这种功能的幸运者,而这种功能可以是任何其他的功能。而它正好被放在身体里。我只是为了加强其效果和解决不同的阵列而重复了它。
但增加更复杂的任务是错误的,这些任务的计算误差可能会掩盖研究中的效果。顺便说一下,也有可能汇编在μl中不是恒定的。也就是说,当重新编译时可以得到稍微不同的数据(虽然这不是确切的,但它有点像用来防止黑客攻击的)所以一切都可以在你的代码上为你测试。看看结果是否有变化。
Mcl只是试图按照视频中的指示来替换代码。嗯,那里的情况有点不同。但一般来说。
而那些不知道会得到什么值的函数的说明--这就是js和php以及其他类似语言的工作方式,甚至μl也是这样工作的,但只在调试模式 下。
在每个迭代中,在循环的条件中,无论如何都要检查i<ArraySize()或i<size
,这意味着在每个迭代中要么调用一个函数,要么调用一个变量。
我们为什么要把被测试的物体放入体内?
逻辑本身促使我们决定哪一个会更快处理。对一个函数或对一个变量。
我不关心编译器怎么称呼它。我不依靠编译器,我依靠常识,从参考的角度出发,弄清楚什么是更快处理的。
它并不总是有效。
关于交易、自动交易系统和交易策略测试的论坛
向#define专家提问
罗曼, 2020.11.02 19:44
改了我的帖子。
它是反过来的,也就是说,ArraySize现在比cnt快。
以前是反之亦然。也许增量cnt--影响,循环的主体是不同的,可能必须为负载发明其他东西。