错误、漏洞、问题 - 页 2221

 

合成的工具。我导入 分钟条,每个分钟条相差1点(5位数)。

我关闭了带有符号的窗口,然后我重新打开这个窗口,要求从上一次加载的分钟条,我得到了

每一天的符号都是一样的。错误是什么?

 
elibrarius:

翻看Alglib包的代码。它充满了这些结构,使代码 更加难以阅读

这样不是更简单吗?

在我看来,执行速度会更高。

他们为什么要把代码弄得这么复杂?或者他们只是从另一种语言移植过来,没有做任何修改?但我还是想知道为什么在原作中会有这样的复杂情况?

这很可能是在原始代码中做的,正是为了加速事情的进展。

在MQL中是否会更快,必须进行测量,"似乎 "在这里不起作用。

 
Koldun Zloy:

这很可能 是为了加速而在原文中做的。

在MQL中是否会更快,必须进行测量,"似乎 "在这里不起作用。

"很有可能 "也是不行的。
这样的形式如何能更快地工作?你在说什么!?

多了两个循环,多了一个数组而不是一个变量。

 

Nikolai Semko:

多了两个循环,多了一个数组而不是一个变量。

这种原始的推理方式并不适合现代的处理器。

 
Koldun Zloy:

这种原始的推理方式并不适合现代的处理器。

你更清楚。你有更多的经验...

 


Koldun Zloy
:

这种原始的推理方式并不适合现代的处理器。

从本质上讲,我很抱歉,但你有妄想症。

今天存在的任何处理器都不会

for(i=0;i<=npoints-1;i++)

相比之下,速度更快。

for(i=0;i<npoints;i++)

而访问一个数组 永远不会比访问一个简单变量快。

三个相同的循环永远不会比一个组合循环快。


我没有偷懒,直接在原始的ALGLIB中测试了两个不同变体的速度,以免无法证实。

      e=0;
      double tmp1;
      ulong t=GetMicrosecondCount();
      for(i=0;i<npoints;i++)
        {
         v=0.0;
         for(i_=0;i_<nvars;i_++)
           {
            tmp1=xy[i][i_]-ct[xyc[i]][i_];
            v+=tmp1*tmp1;
           }
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("fast = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );



      e=0;
      t=GetMicrosecondCount();
      for(i=0;i<=npoints-1;i++)
        {
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=xy[i][i_];
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v=0.0;
         for(i_=0;i_<=nvars-1;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("slow = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );

结果。

2018.06.27 04:36:50.265 TestClasses (GBPUSD,M6) fast = 571 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.266 TestClasses (GBPUSD,M6) slow = 841 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.630 TestClasses (GBPUSD,M6) fast = 577 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.631 TestClasses (GBPUSD,M6) slow = 812 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.143 TestClasses (GBPUSD,M6) fast = 599 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.144 TestClasses (GBPUSD,M6) slow = 853 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.955 TestClasses (GBPUSD,M6) fast = 600 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.956 TestClasses (GBPUSD,M6) slow = 809 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) fast = 567 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.857 TestClasses (GBPUSD,M6) fast = 690 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.858 TestClasses (GBPUSD,M6) slow = 820 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.229 TestClasses (GBPUSD,M6) fast = 585 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.230 TestClasses (GBPUSD,M6) slow = 811 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.736 TestClasses (GBPUSD,M6) fast = 560 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.737 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40

也就是说,你可以看到速度的提升超过了40%。

附加的文件:
dataanalysis.mqh  1150 kb
TestClasses.mqh  2762 kb
 
Nikolai Semko:

好吧,从本质上讲,我很抱歉,但你有妄想症。

今天存在的任何处理器都不会

相比之下,速度更快。

而访问一个数组 永远不会比访问一个简单变量快。

三个相同的循环永远不会比一个组合循环快。


我没有偷懒,直接在原始的ALGLIB中测试了两个不同变体的速度,以免无法证实。

结果。

也就是说,你可以看到速度的提升超过了40%。

谢谢你的测试!我认为它不仅在MQL中,而且在所有语言中都会工作得更快。

我想到的原因是,编写程序的程序员不仅仅是为程序的运行付费,而是为行数付费。因为一个有500行的程序对客户来说并不像一个有5000行的程序那样令人印象深刻。很遗憾,代码的速度和可读性因此受到影响。

 
elibrarius:
我认为它不仅在MQL中,而且在所有语言中都会工作得更快。

当然。

 
我注意到在登录MQL时,出现了一个错误,在浏览器的状态中,有一个来自Facebook的长篇回答(可能是授权)。
 
SEM:

合成的工具。我导入分钟条,每个分钟条相差1点(5位数)。

我关闭了带有符号的窗口,然后重新打开这个窗口,要求从上一次加载的分钟条,我得到了

每一天的符号都是一样的。错误是什么?

稳定的播放?什么建筑?