问:我错过了什么?
MT4-Terminal,一种可编程的客户端交易访问设备,使用(出于历史原因)寄存器的时间反转索引,存储{ open, high, low, close, volume }
各个时间单位的实际/历史值(特定于每个 TimeFRAME 的持续时间)。
其他值从这些基值“导出”/计算(通过“预定义”(实施)指标{ iRSI(), iMFI(), ... }
或通过您的 MQL4 代码以编程方式)。
第一个常见问题是,时间过去了……(很明显……但令人惊讶的是,PriceDOMAIN 中存在一些人为的副作用,这些副作用出人意料地源自 TimeDOMAIN,由历史简化引入,以尽可能快地处理定价数据实时,这会导致麻烦,例如您的想法中风)。
一旦aNewBarEVENT
出现,就会发生一个非常特殊的情况(总是)......
寄存器open[0] == high[0] == low[0] == close[0] & volume[0] == 1
随着时间的流逝并通过随后anFxMarketEVENT
到达您的 MT4 终端软件,volume[0]
> 1 增长和寄存器close[0]
获得越来越新的值(通常不是open[0]
)
因此,该机制使任何与 的“刚刚存在”值绑定的决策“复杂化” ,因为(来自 Broker 的新/价格)close[0]
的下一次到达将寄存器值移动到其他值,而不是以前可能使用的值(milli -)第二。anFxMarketEVENT
Ask
Bid
这样,您的代码可能在(派生的)值iRSI( ..., PRICE_CLOSE, ... )
确实 > 70 的那一刻开始了一些活动,但是在anEndOfBAR
随后的价格朝着这样的方向发展之前的剩余时间内,“离开”柱时close[0]
的最后一个值iRSI()
远低于 70 ...(正如您似乎试图在您的(裁剪的不带刻度的)PrintScreen 中描绘的那样)
第二个问题似乎是“高于”蜡烛close[aBarPTR]
水平的标记的 aPriceDOMAIN 距离。
以&给出的价格进行了多头交易,但是图表将蜡烛价格显示为基于价格的价格,因此如果视觉距离等于XTO 时(其中值可能是恒定或可变大小,取决于您的经纪人条款和条件),多头交易入场的位置是公平和正确的。Bid
== close[0]
Spread
Bid
Spread
Spread
在这种情况下可能有效但不一定有效的第三个Strategy Tester问题是,称为 a 的 MT4 终端功能在回溯测试期间处理多 TimeFRAME 计算时不太公平和方便。几年前,我们的团队干脆放弃了使用内置函数,开始使用我们自己的寄存器处理来维护我们自己的、独立的、我们可以真正依赖的多 TimeFRAME 值。
问:我该如何解决?
由于处理热[0]
栏事件的性质,您的代码需要一些其他过滤器或其他指标,它们不会滞后(当触发交易决策时,不要及时添加额外的延迟和偏差)并且执行不会颤动(在同一条中重复触发)。
MQL4
提供了一些工具来做到这一点,如果需要获得更多,可以求助于额外的外部设施(完全分布式的多代理网格/云/基于 GPU 的计算)。
所以,享受 FX/MT4 的伟大世界吧。
所有这些可能性都触手可及。