算法、解决方法、其性能的比较 - 页 20 1...1314151617181920212223 新评论 Sergey Dzyublik 2017.12.11 11:21 #191 Реter Konow:我不知道你为什么要在一个理想的解决方案中加入实体。我看不出有什么意义。你不可能同时戴两顶帽子。这又是为什么呢?首先,解释一下这个问题。))"你在折磨人,让他们受苦,在道德和心理上降低他们....。"被诅咒的世界》(合集)作者:德米特里-加宁 Реter Konow 2017.12.11 11:37 #192 Sergey Dzyublik: "你确实在折磨人,让他们受苦,你在道德和心理上降低了他们....。"被诅咒的世界》(合集)作者:德米特里-加宁我真诚地向每一个我无意中使其在道德和心理上受到伤害的人道歉。除了为某一特定问题找到完美的解决方案外,没有其他目的,我没有追求。相反,我自己却遭受了无法理解的攻击和无动机的攻击。 显然,这是任何不想 "跟上 "社会步伐的人所付出的代价。 好吧,我已经做出了自己的选择,我不会责怪任何人......。 Alexandr Andreev 2017.12.11 11:40 #193 Реter Konow:我不知道你为什么要在一个理想的解决方案中加入实体。也许现在谈论你的代码作为一个理想的解决方案还为时过早。这里是实际收集的帽子 Реter Konow 2017.12.11 11:47 #194 Alexandr Andreev: 也许现在谈论你的代码是一个完美的解决方案还为时过早我只是笼统地说了一下,可以这么说..."为什么,对一个理想的解决方案(任何解决方案),要增加实体。"我必须说,许多人给了我非常宝贵的想法,并指出了正确的错误。1.一个字符计数错误。2.由一个共同的字符串内的子字符串的碰撞引起的错误。3.为每个特定字符串分配的内存溢出。(4) 错误地认为改变阵列大小 会导致数据被删除。非常感谢大家指出这些错误! Реter Konow 2017.12.11 11:56 #195 Реter Konow:...非常感谢大家指出这些错误!客观地说,最后一个,即理想的解决方案,属于每个人,因为,我是通过指出错误,与人沟通和交流而得到的。 Alexandr Andreev 2017.12.11 12:00 #196 Реter Konow:客观地说,最后一个,即理想的解决方案,属于每个人,因为,我是通过指出错误,与人沟通和交流而得出的。再一次,最后一个选项只是一个选项,之前的东西根本就不是一个选项。而事实上,它是完美的,这是一个有争议的问题。 Реter Konow 2017.12.11 12:02 #197 Alexandr Andreev: 再一次,最后一个选项只是一个选项,之前的东西根本就不是一个选项。而事实上,它是完美的,这一点是没有意义的。 好的,很好。只让它对我来说是完美的。每个人都可以根据自己的尺度来判断。 Alexandr Andreev 2017.12.11 12:05 #198 我建议我们继续讨论DEBAG印刷品和彗星--谁有什么想法? Igor Makanu 2019.10.12 10:48 #199 测试的运行时间,如果该函数是。 1.被包裹在一个类中 2.包裹在一个类中,使用new操作符 创建一个类的实例。 3. 不使用包装器直接调用函数 //+------------------------------------------------------------------+ #define SpeedTest(count_x10,msg,EX) {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \ printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);} //+------------------------------------------------------------------+ class COpen { private: string m_symbol; public: COpen(const string symbol): m_symbol(symbol) {} double getOpen(const int bar) const { return(iOpen(m_symbol, 0, bar)); } }; //+------------------------------------------------------------------+ void OnStart() { #define loop_x10 9 //1. COpen sym1(_Symbol); srand(GetTickCount()); SpeedTest(loop_x10, "1. COpen", sym1.getOpen(rand())); //2. srand(GetTickCount()); SpeedTest(loop_x10, "2. new COpen", COpen *sym2 = new COpen(_Symbol); sym2.getOpen(rand()); delete sym2; ); //3. srand(GetTickCount()); SpeedTest(loop_x10, "3. iOpen",iOpen(NULL,0,rand());); } //_______________________________________________________________________ 2019.10.12:39:29.802 SpeedTst_class (EURUSD,M1) 1.COpen: loops=1000000000 ms=41016 2019.10.12:41:05.352 SpeedTst_class (EURUSD,M1) 2. New COpen: loops=1000000000 ms=95562 2019.10.12:41:45.939 SpeedTst_class (EURUSD,M1) 3. iOpen: loops=1000000000 ms=40578 测试1和3在性能方面是并列的,即函数调用包裹到类中并不关键,测试2由于构造器和析构器的调用而增加了时间。 Igor Makanu 2019.12.11 17:19 #200 SymbolInfoDouble() 执行速度测试 #property version "1.00" // количество итераций теста #define LOOPx10 8 #define SpeedTest(count_x10,msg,EX) {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \ printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);} //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double lot; srand(GetTickCount()); SpeedTest(LOOPx10, "calcNormVol_my()", lot = rand() / 1000.0; calcNormVol_my(lot)) srand(GetTickCount()); SpeedTest(LOOPx10, "calcNormVol_alexeyvik()", lot = rand() / 1000.0; calcNormVol_alexeyvik(lot)) srand(GetTickCount()); SpeedTest(LOOPx10, "calcNormVol_fxsaber()", lot = rand() / 1000.0; calcNormVol_fxsaber(lot)) srand(GetTickCount()); SpeedTest(LOOPx10, "calcNormVol_my_2()", lot = rand() / 1000.0; calcNormVol_my_2(lot)) } //+------------------------------------------------------------------+ double calcNormVol_my(const double value) { const static string sym = _Symbol; return(NormalizeDouble(fmax(fmin(SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP) * round(value / SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP)), SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX)), SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN)), 2)); } //+------------------------------------------------------------------+ double calcNormVol_alexeyvik(const double value) { // const string sym = _Symbol; return( NormalizeDouble(fmax(fmin(SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP) * round(value / SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP)), SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX)), SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN)), 2) ); } //+------------------------------------------------------------------+ const double VolumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP); const double VolumeMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX); const double VolumeMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); const int O_DigitsInVolumeStep = 2; double calcNormVol_fxsaber( const double value ) { return((value > VolumeMax) ? VolumeMax : ((value < VolumeMin) ? VolumeMin : NormalizeDouble(VolumeStep * (int)(value / VolumeStep + 0.5), O_DigitsInVolumeStep))); } //+------------------------------------------------------------------+ double calcNormVol_my_2( const double value ) { const static double volumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP); const static double volumeMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX); const static double volumeMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); const static int o_digitsInVolumeStep = 2; return((value > volumeMax) ? volumeMax : ((value < volumeMin) ? volumeMin : NormalizeDouble(volumeStep * (int)(value / volumeStep + 0.5), o_digitsInVolumeStep))); } //+------------------------------------------------------------------+ 2019.12.11 21:13:08.896 tst_volum (EURUSD,W1) calcNormVol_my(): loops=100000000 ms=173406 2019.12.11 21:15:45.425 tst_volum (EURUSD,W1) calcNormVol_alexeyvik(): loops=100000000 ms=156531 2019.12.11 21:15:45.533 tst_volum (EURUSD,W1) calcNormVol_fxsaber(): loops=100000000 ms=110 2019.12.11 21:15:45.916 tst_volum (EURUSD,W1) calcNormVol_my_2(): loops=100000000 ms=390 1...1314151617181920212223 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我不知道你为什么要在一个理想的解决方案中加入实体。我看不出有什么意义。
你不可能同时戴两顶帽子。这又是为什么呢?
首先,解释一下这个问题。))
"你在折磨人,让他们受苦,在道德和心理上降低他们....。"
被诅咒的世界》(合集)作者:德米特里-加宁
"你确实在折磨人,让他们受苦,你在道德和心理上降低了他们....。"
被诅咒的世界》(合集)作者:德米特里-加宁
我真诚地向每一个我无意中使其在道德和心理上受到伤害的人道歉。
除了为某一特定问题找到完美的解决方案外,没有其他目的,我没有追求。
相反,我自己却遭受了无法理解的攻击和无动机的攻击。
显然,这是任何不想 "跟上 "社会步伐的人所付出的代价。
好吧,我已经做出了自己的选择,我不会责怪任何人......。
我不知道你为什么要在一个理想的解决方案中加入实体。
也许现在谈论你的代码作为一个理想的解决方案还为时过早。
这里是实际收集的帽子
也许现在谈论你的代码是一个完美的解决方案还为时过早
我只是笼统地说了一下,可以这么说...
"为什么,对一个理想的解决方案(任何解决方案),要增加实体。"
我必须说,许多人给了我非常宝贵的想法,并指出了正确的错误。
1.一个字符计数错误。
2.由一个共同的字符串内的子字符串的碰撞引起的错误。
3.为每个特定字符串分配的内存溢出。
(4) 错误地认为改变阵列大小 会导致数据被删除。
非常感谢大家指出这些错误!
...
非常感谢大家指出这些错误!
客观地说,最后一个,即理想的解决方案,属于每个人,因为,我是通过指出错误,与人沟通和交流而得到的。
客观地说,最后一个,即理想的解决方案,属于每个人,因为,我是通过指出错误,与人沟通和交流而得出的。
再一次,最后一个选项只是一个选项,之前的东西根本就不是一个选项。而事实上,它是完美的,这是一个有争议的问题。
再一次,最后一个选项只是一个选项,之前的东西根本就不是一个选项。而事实上,它是完美的,这一点是没有意义的。
我建议我们继续讨论DEBAG印刷品和彗星--谁有什么想法?
测试的运行时间,如果该函数是。
1.被包裹在一个类中
2.包裹在一个类中,使用new操作符 创建一个类的实例。
3. 不使用包装器直接调用函数
2019.10.12:39:29.802 SpeedTst_class (EURUSD,M1) 1.COpen: loops=1000000000 ms=41016
2019.10.12:41:05.352 SpeedTst_class (EURUSD,M1) 2. New COpen: loops=1000000000 ms=95562
2019.10.12:41:45.939 SpeedTst_class (EURUSD,M1) 3. iOpen: loops=1000000000 ms=40578
测试1和3在性能方面是并列的,即函数调用包裹到类中并不关键,测试2由于构造器和析构器的调用而增加了时间。
SymbolInfoDouble() 执行速度测试
2019.12.11 21:13:08.896 tst_volum (EURUSD,W1) calcNormVol_my(): loops=100000000 ms=173406
2019.12.11 21:15:45.425 tst_volum (EURUSD,W1) calcNormVol_alexeyvik(): loops=100000000 ms=156531
2019.12.11 21:15:45.533 tst_volum (EURUSD,W1) calcNormVol_fxsaber(): loops=100000000 ms=110
2019.12.11 21:15:45.916 tst_volum (EURUSD,W1) calcNormVol_my_2(): loops=100000000 ms=390