初学者的问题 MQL5 MT5 MetaTrader 5 - 页 818

 
Vladimir Karputov:

我希望你在OnInit()中一次性创建指标句柄?

计算深度取决于指标。罕见的指标强行限制了深度--作为一项规则,所有的指标都计算整个历史。因此,以下变体可能是有用的:在指标中引入负责深度的变量,然后通过专家顾问中的iCustom传递这个参数。

1.是的,我明白,以一种好的方式,它应该在启动时做一次。但问题是,指标输入参数 可能有所不同。例如,在频谱分析中,谐振频率被计算出来,计算的结果是所用MA的周期。而如果你为一个新的维度申请MA数据,就是一个新的手柄。实际上,频率不会在每个柱子上发生变化,所以同一个MA手柄使用的时间足够长(~分钟)。但是,还是会有一个时间,手柄会发生变化。然后我要么需要使用一堆手柄,要么使用一个手柄,但定期重新计算。这就是经济的作用。

2.我已经掌握了iCustom。但如何限制指标中的计算深度?我无法在技术上做到这一点。显然,我将不得不创建大量的技术指标的自定义克隆。当然,这很烦人,但它应该是有效的。谢谢你的提示。这是个好主意。谢谢你。

 
User_mt5:

1.是的,我知道这通常是在内部进行一次。但问题是,指标的输入参数 可以改变。

开发人员可以编写SB,其中的指标可以用MQL4风格处理,而不失其效率。也就是说,所有的缓存和手柄都隐藏在SB中。

 
User_mt5:

1.是的,我知道这通常是在内部进行一次。但问题是,指标的输入参数 可能有所不同。例如,在频谱分析中,计算谐振频率,计算的结果是所用MA的周期。而如果你为一个新的维度申请MA数据,就是一个新的手柄。实际上,频率不会在每个柱子上发生变化,所以同一个MA手柄使用的时间足够长(~分钟)。但是,还是会有一个时间,手柄会发生变化。然后我要么需要使用一堆手柄,要么使用一个手柄,但定期重新计算。这就是经济的作用。

2.我已经掌握了iCustom。但如何限制指标中的计算深度?我无法在技术上做到这一点。显然,我将不得不创建大量的技术指标的自定义克隆。当然,这很烦人,但它应该是有效的。谢谢你的提示。这是个好主意。谢谢你。


1.在这种情况下,杀死一个未使用的句柄并创建一个新的句柄可能会更好(最主要的是控制,这样就不会把一百万个句柄塞进OnTick():)).

2.创建一个内置指标的副本,但要有不同的名称(例如,在其名称中加入 "历史深度"),并引入一个新参数:InpDepthHistory。也就是说,你需要编写新的自定义指标。

 
User_mt5:

1.是的,我知道这通常是在内部进行一次。但问题是,指标的输入参数 可能有所不同。例如,在频谱分析中,计算谐振频率,计算的结果是所用MA的周期。而如果你为一个新的维度申请MA数据,就是一个新的手柄。实际上,频率不会在每个柱子上发生变化,所以同一个MA手柄使用的时间足够长(~分钟)。但是,还是会有一个时间,手柄会发生变化。然后我要么需要使用一堆手柄,要么使用一个手柄,但定期重新计算。这就是经济的作用。

2.我已经掌握了iCustom。但如何限制指标中的计算深度?我无法在技术上做到这一点。显然,我将不得不创建大量的技术指标的自定义克隆。当然,这很烦人,但它应该是有效的。谢谢你的提示。这是个好主意。谢谢你。

据我所知,你想像mql4那样使用iCustom()只获得1个值,但你没有考虑到mql4在第一次使用时也为整个历史深度重新计算指标。同样,在至少一个参数发生变化时,它也会重新计算。

因此,我们的结论是:你不应该打扰。如果不需要这个 "旧 "指标,你可以简单地删除它,然后用其他参数获得一个指标的句柄。

 
fxsaber:

开发人员可以编写一个SB,其中指标可以用MQL4风格处理,而不会失去效率。也就是说,所有的缓存和手柄都隐藏在SB中。

对不起,我不明白。这里的开发者一词是创造MT的人,还是我是一个有罪的应用?而SB是......?

 
Vladimir Karputov:

1.在这种情况下,杀死一个未使用的句柄并创建一个新的句柄可能会更好(最主要的是要确保你不会把一百万个句柄塞进OnTick():)).

2.创建一个内置指标的副本,但要有不同的名称(例如,在其名称中加入 "历史深度"),并引入一个新参数:InpDepthHistory。也就是说,你应该编写新的自定义指标。

1.是的,到目前为止,我已经得到了一个只有手柄的3维数组。但现在,显然,我将重新安排这一切。

2.是的,几乎有所有技术指标的代码。而且你可以写你自己的。

谢谢你。

 
User_mt5:

对不起,我不明白。这里的开发者是创造MT的人,还是我是一个有罪的应用者?而SB是......?

如果需要,MetaQuotes可以创建这样一个标准库。最大的问题是,它是否需要?

 
Alexey Viktorov:

在我看来,你想像mql4那样使用iCustom()只获得1个值,但你没有考虑到mql4在第一次使用时也为整个历史深度重新计算指标。以同样的方式,当至少一个参数发生变化时,它将被重新计算。

因此,结论是:不需要麻烦。如果一个 "过时 "的指标不再需要,你可以简单地删除它,并得到一个具有不同参数的处理指标。

也许,我确实想这样做。但现在我不想了。你是对的。如果你不需要一个过时的指标,你应该把它们像蟑螂一样碾碎 :)

一个好的解决方案是限制技术克隆的深度。这将节省资源和时间。所以,这就是我现在要做的。

谢谢你。

 
fxsaber:

如果需要,MetaQuotes可以创建这样一个标准库。最大的问题是,它是否需要?

这是为了子孙后代。我看了图书馆的一些例子。数千行未加注释的代码。我不知道任何人,但我不能这样做。因此,感谢你的想法,但在我的情况下,这是不可以接受的。
 
User_mt5:
这是为了子孙后代。我看了图书馆的一些例子。数千行未加注释的代码。我不知道任何人,但我不知道如何做到这一点。因此,感谢你的想法,但在我的情况下,这是不可以接受的。

这在MT5中已经可以使用

关于交易、自动交易系统和交易策略测试的论坛

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

fxsaber, 2018.01.09 10:20

对于MQL4的专家来说,有一个古老的方法来处理MQL5中的TFs

也许有人会发现MQL4的方法在处理tick历史方面也很有用

if (Tick[0].bid > Tick[100].bid) // сравниваем текущий и исторический тики
  Print("Hello World!");

if (High[0] > Close[100]) // https://www.mql5.com/ru/forum/42122/page24#comment_2904023
  Print("Hello World!");

从技术上讲,没有什么能阻止你用指标做一次同样的事情(在不损失效率的情况下)并把解决方案放在SB中。