从专业人员到超级专业人员的任何问题 - 1。 - 页 35

 
我不知道MQL4的情况,但当我在C++中运行比赛时,我注意到你先运行的代码比第二个代码要慢。当然,先分配内存 是需要时间的。通常会慢5%。
 
double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global,GetTick_local,GetTick_global;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
   GetTick_local = GetTickCount();
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTick_global = GetTickCount();
//---------------------   
   Print("локальный массив: " , GetTick_local-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick_global-start_global, " миллисекунд.");
return(0);
}

在日志中。

2012.03.23 13:40:50 test EURUSD,H1: 全局阵列:1406毫秒。

2012.03.23 13:40:50 test EURUSD,H1: 本地阵列:1344毫秒。

现在明白了:全局变量 花的时间长一点,局部变量快一点;虽然我认为这没有什么区别,但我应该在被调用的函数中测量一下,也许还有其他区别

 
IgorM:

在日志中。

2012.03.23 13:40:50 test EURUSD,H1: 全局阵列:1406毫秒。

2012.03.23 13:40:50 test EURUSD,H1: 本地阵列:1344毫秒。

现在明白了:全局变量花的时间长一点,局部变量快一点;虽然我认为这没有什么区别,但我应该在被调用的函数中测量一下,也许还有其他的区别。

我想如果你把它们换来换去,结果会保持不变。
 
Zhunko: 我想如果你把它们换来换去,结果会保持不变。

改变,并将start()复制到func(),之后打印出 start func()。

2012, 03.23 14:11:15 test EURUSD,H1: 本地阵列:1313 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: 全局阵列:1359毫秒。

2012.03.23 14:11:15 test EURUSD,H1: call function.....

2012.03.23 14:11:18 test EURUSD,H1: ph-action, local array: 1312 milliseconds.

2012.03.23 14:11:18 test EURUSD,H1: f-ction, global array: 1328 milliseconds.




 
IgorM:

改变,并将start()复制到func(),之后打印出start func()。

2012, 03.23 14:11:15 test EURUSD,H1: 本地阵列:1313 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: 全局阵列:1359毫秒。

2012.03.23 14:11:15 test EURUSD,H1: call function.....

2012.03.23 14:11:18 test EURUSD,H1: ph-action, local array: 1312 milliseconds.

2012.03.23 14:11:18 test EURUSD,H1: f-ction, global array: 1328 milliseconds.

交换了全局和局部?现在是先本地,后全球。应该是反过来。
 
IgorM:

改变,并将start()复制到func(),之后打印出start func()。

2012, 03.23 14:11:15 test EURUSD,H1: 本地阵列:1313 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: 全局阵列:1359毫秒。

2012.03.23 14:11:15 test EURUSD,H1: call function.....

2012.03.23 14:11:18 test EURUSD,H1: ph-action, local array: 1312 milliseconds.

2012.03.23 14:11:18 test EURUSD,H1: f-ction, global array: 1328 milliseconds.

据推测,局部变量的地址是从函数调用点开始计算的,全局变量的地址是从程序调用点开始计算的,也就是说,为了访问全局变量,必须多做一个动作(增加一个偏移量)。
 
Zhunko: 调换全球和本地?现在先是本地的,然后是全球的。我应该把它反过来。

我这样做了,但结果没有变化,我还在一个单独的函数中声明了一个数组,调用该函数并与全局数组的调用进行比较

alsu,这是一个相当合乎逻辑的假设,但我的实验让我产生了一个有趣的想法:mql4是为跛子准备的,你按照你想要的方式声明,正如他们在游戏中所说的那样。))).如果我不忘记的话,也许我会用mql5做一些实验,这只是在讨论MT5的性能,也许有些东西会变得清晰。

 

有没有人把FANN移植到mql?http://leenissen.dk/fann/wp/download/, 或者用NS的类似代码移植到mql。

ZS:通过搜索和谷歌,我找不到一个现成的NS,我用FANN插了一个.dll,效果还不错,但我希望它没有.dll。

 
IgorM:

有没有人把FANN移植到mql?http://leenissen.dk/fann/wp/download/, 或者用NS的类似代码移植到mql。

ZS:通过搜索和谷歌,我找不到一个现成的NS,我用FANN插入了一个.dll,效果还不错,但我希望它没有.dll。


最好是在专门的软件中训练网络。 它要快得多。而且最好在代码中使用它
 
Vinin: 最好是在专门的软件中训练网络。 它要快得多。而且最好在代码中使用它
我知道,但我真的需要它,而且......。我想在我的专家顾问中做一个自动优化器,没有.dll :)