来自一个 "傻瓜 "的问题 - 页 52

 

它必须要去什么地方吗?我不知道...

我的意思是,它在EMA上飞行,但它在iCustom上需要10倍的时间......

 

你永远不应该这样做。

void OnTick()
  {
   //--- безусловно создаем индикатор
   ma_handle = iMA(_Symbol,0, MA,0, MODE_EMA, PRICE_CLOSE);
  }

不要被骗说"获得 指标手柄",实际上你是在 "创建 一个新指标"。

此外,还存在着手柄的泄漏。

 
Karlson:

它必须要去什么地方吗?我不知道...

我的意思是,它在EMA上飞行,但运行iCustom需要10倍的时间...

我们应该把一堆 过时的手柄指示器放在哪里?我不知道。我没有这样工作过。 每一次打勾都会有越来越多的人。

如果我必须实施这样的策略,我会拒绝 通过iCustom() 调用一个准备好的自定义指标 ,而是将指标主体放在专家顾问的OnTick() 中。 而数据的计算将由专家顾问本身进行。

...如果指标是.ex5格式,而且没有代码,问题就会出现。

 

我记得:"IndicatorRelease() 函数用于从计算机内存中释放一个未使用的指标,该指标的句柄被传递给它"(我在专家顾问去初始化期间使用它)。

但是,所有这些都是一样的:每次打钩 都有一个新的手柄是很麻烦的。

 

关于手柄的积累,我会研究的。

这就是我打算做的,把火鸡放在EA里。

 
Karlson:

关于手柄的积累,我会研究的。

这就是我打算做的,把火鸡放在EA里。

你可以让指标保持原样,并在定时器中或通过事件创建它的副本。
 
Interesting:
你可以让指标保持原样,并在定时器中或通过事件创建它的副本。

在哪里创建指标的副本有什么区别:在OnTick()、OnTimer()还是在OnChartEvent()?在任何情况下,每一个特殊的激活都会产生一个 "指标的副本",使已经巨大的堆积物更加恶化。

或者说,我不明白你的逻辑。

 
Yedelkin:

在哪里创建指标的副本有什么区别:在OnTick()、OnTimer()还是在OnChartEvent()?在任何情况下,每一个特殊的激活都会产生一个 "指标的副本",使已经巨大的堆积物更加恶化。

或者说,我不明白你的逻辑。

诀窍是这样的--如果你不需要改变指标参数(不需要创建一个新的指标副本),那么在初始化块中创建 一次指标 是比较合理的。

但是,如果在操作过程中,指标参数应该自动改变,我们将不得不尽可能有效地做到这一点。

最有效的方法是在定时器中创建一个新的指标副本(不一定在每一个刻度上)。

最有效的方法是,当某些事件(几个事件)发生时,创建一个新的指示副本。

PS

有必要考虑到用于计算指标的时间,并确保摆脱 "不必要的 "副本。

 

这样的想法值得考虑......重新计算一个新的袋子,对我来说可以一天或一周做一次......设置一个定时器。

bool  EventSetTimer(
   int  seconds      // количество секунд
   );

真的被一天或一周内的秒数搞糊涂了......)))你也可以在新的每日一栏中进行...

OnTimer()函数 中,我首先用IndicatorRelease() 删除前一个指标,然后用新的周期创建一个新 的指标。

void OnTimer() 
{

IndicatorRelease( ma_handle );

ma_handle=iMA(Symbol(),0,newMA,0,MA_EMA,PRICE_CLOSE);

}

这只是一个大致的想法...

 
Renat:

你永远不应该这样做。

不要被骗说"获得 指标手柄",实际上你是在 "创建 一个新指标"。

此外,还有手柄的泄漏。

在MQL5的早期,人们讨论了很多问题,你削减了自动交易的重要发展部分,结果,人们用空的空间扼杀了你的超级优化的OnCalculate(),把计算放在事件中。这有点慢,但仍比为每个动态参数创建自己的句柄快。