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

 

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

虫子,虫子,问题

fxsaber, 2017.02.07 13:41

指标中的SymbolInfoTick与EA的工作方式完全不同。

在一个指标中,它总是返回作为OnCalculate调用发起者的tick。而指标中的这些启动点不应该被跳过--这是开发者的意识形态。问题是在形成这些小数点的队列中。

在专家顾问中,OnTick中的SymbolInfoTick并不返回启动OnTick调用的tick,而是对当前状态进行完整的请求。

 
fxsaber:

换句话说。

当一个刻度线批次到达时,指标将显示整个数据包中的第一个刻度线,而EA将显示最后一个刻度线。

我没看错吧?

 
阿尔乔姆-特里什金

换句话说。

当一包蜱虫到达时,指标将显示整个包的第一个蜱虫,而EA将显示最后一个蜱虫。

我弄得对吗?

是的,OnCalculate不会 队列顺序中的每一个tick 包都被调用。
 
fxsaber:
是的,OnCalculate不会 数据包的每个tick上 按照队列的顺序被调用。

在每一次打勾时?因为你并没有写...

事实证明,随着一包刻度线的到来,指标将按照收到的数据包中刻度线的顺序启动?

我想知道,如果数据包是在一个新的条形图开盘时收到的,那么在这一包刻度线中,指标会进行多少次全面的重新计算?

 
阿尔乔姆-特里什金

在每一次打勾时?因为你没有写...

可能没有写很多东西。

事实证明,随着一包蜱虫的到来,指标将按照进来的一包蜱虫的顺序启动?

我想知道,如果这组数据是在一个新条形的开端出现的--在这组刻度线中,指标会进行多少次全面的重新计算?

计算事件是在每一个刻度 上产生的。因此,有一个指标的勾选队列。如果达到一定量,期刊将收到一个警告,说指标太慢。

条形图本身的性质是指标,它们是由计算-事件形成的。因此,如果TF M1是10:15:00.020,并且有一个50毫秒的数据包,那么它的第一个刻度仍然有时间10:14:59.970。而所有的指标都会在这个计算事件中被首先调用--首先是时间序列指标,然后是带有这些时间序列的自定义指标。也就是说,在这个布局中,10:15-条还没有形成零条。而零条是10:14。


然后,当数据包开始通过计算事件解开时,10:15-条也会出现。我想我已经详细地说明了这一点。

 
fxsaber:

可能有很多东西我都没有写。

计算事件是在每一个刻度 上产生的。因此,有一个指标的勾选队列。如果达到一定量,日志中就会有警告说指标太慢。

条形图本身的性质是指标,是由计算事件形成的。因此,如果TF M1的时间是10:15:00.020,并且50毫秒的数据包即将到来,那么其中的第一个刻度线仍有时间10:14:59.970。而所有的指标都会在这个计算事件中被首先调用--首先是时间序列指标,然后是带有这些时间序列的自定义指标。也就是说,在这个布局中,10:15-条还没有形成零条。而零条是10:14。


然后,当数据包开始通过计算事件解开时,10:15-条也会出现。我想我已经详细地说明了这一点。

谢谢你。
 

因此,EA收到一个尚未形成的条形图的刻度是很正常的。但这是一个非常微妙的观点,即使是故意重现它也要花费很多精力。一般来说,它的理论性比实践性更强。


如果我们对速度有偏执 ,那么使用指示器(当然还有栏杆)就不是一种选择。一切都在EA中。

 

fxsaber:

然后,当数据包开始通过计算事件解开时,10:15-条也会出现。我想我已经详细地说明了这一点。

有趣的信息。
有什么方法可以确定一个包已经到达,忽略其中的第一个刻度,只取最后一个刻度进行处理?
 
Vasiliy Pushkaryov:
有没有办法检测到一个包进来了,忽略它的第一个刻度,只取最后一个刻度进行处理?
OnCalculate 中通过CopyTicks。
 
fxsaber:
在OnCalculate中通过CopyTicks。
谢谢你,我会好好考虑的。