mql5语言的特点、微妙之处以及技巧 - 页 131

 
fxsaber:

内存释放 是唯一的原因。

如果是多余的,那么reserve_size=-1 就足够了,前面已经说过了。 只是那里的人显然在速度测量上出了问题(我猜是测试条件不正确)。

 

我注意到一种有趣的可能性,我将其称为指标递归。

当你能从自身计算出一个指标。

handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);  
for(int i=0;i<N;i++) handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);

它可能对指标爱好者有用...

如果这个话题已经涉及,重复是学习之母。

为了演示这一功能,我专门在QB中写一个指标

 
Nikolai Semko:

我注意到一种有趣的可能性,我将其称为指标递归。

当你能从自身计算出一个指标时。

它可能对指标爱好者有用...

如果这个话题已经涉及,重复是学习之母。

为了演示这一功能,我专门在QB中写一个指标

是的...我不认为这是一个特殊的功能。一旦我需要它,我就这样写,只是为手柄做了不同的变量名。以为每个人在需要的时候都会使用它......

 
Alexey Viktorov:

是的...我不认为这是一个特点。一旦我需要它,我就像这样写,但用不同的变量名来处理。以为每个人在需要的时候都会使用它......

我现在才想到要把它放在一个循环中。你可以将指标复制100次,但只有一个手柄。

 
Nikolai Semko:

我刚刚才想到要把它放到一个循环中。你至少可以复制该指标100次,但只有一个手柄。

这不是一个单一的手柄,你有一个变量。你已经失去了以前的手柄的价值。那你如何关闭它们呢?

 
Alexey Navoykov:

这不是一个单一的手柄,你有一个变量。你已经失去了以前的手柄的价值。那你如何关闭它们呢?

嗯...

它消耗了大量的内存。真的,只有通过改变TF,你才能释放不再需要的内部指标缓冲区。))

没有办法在ArrayFree中拧动。

 
Nikolai Semko: 真的,只有通过改变TF,你才能释放不需要的内部指标缓冲区。))

没有办法附加ArrayFree。

改变TF会创建一个新的指标副本,并销毁旧的指标。

 
Igor Makanu:

改变TF会创建一个新的指标副本并销毁旧的。

嗯,这是可以理解的。

我只是看了一下在我的指标的最大设置下加载时的内存使用情况(滑块向右到边缘)。内存从50MB增加到400MB左右。但当我把指标调回最小值时(滑块向左),内存仍然挂在400Mb。

这意味着所有的100个计算指标都挂在内存中,尽管它们没有被使用。
改变TF可以清除它。

 
Nikolai Semko:

嗯,这是可以理解的。

只是我根据我的指示器的最大设置(滑块向右到边缘)看了一下启动时的内存使用情况。从50MB的内存增加到400MB左右。但当我把指标调回最小值时(滑块向左),内存仍然挂在400Mb。

因此,所有100个计算过的指标都挂在内存中,尽管它们不再被使用。
改变TF可以清除它。

将其包裹在类计算指标中--将缓冲区与类字段绑定在一起

 
Igor Makanu:

将指标计算包裹在一个类中 - 将缓冲区与类的字段绑定在一起

是的,我必须要试一试。谢谢你。