如果价格触及对象,如何获得?可以说,该对象是手动绘制的干草叉或趋势线。我想,它应该以这种方式开始:
if(Bid==?)
如果价格触及对象,如何获得?可以说,该对象是手动绘制的干草叉或趋势线。我想,它应该以这种方式开始:
if(Bid==?)
让我们一步一步来讲述这个故事。
{ Ask, Bid }
- 虽然大多数技术分析都是从Bid
基于角度的角度得出的,但必须经历过某些 XTO 事件与Ask
价格水平相关。
为简单起见,让我们保留Bid
唯一的价格,而框架可以扩展为具有完全的PriceDOMAIN
对偶性。
听起来很奇怪?好吧,这并不奇怪,MetaTrader 终端 4 图形不允许任意放置 GUI 对象。虽然这不需要从一开始就实现,但如果试图将 GUI 对象放置在精确的TimeDOMAIN
坐标上,将会失败。PriceDOMAIN
坐标不受限制,但如果 GUI 对象定义点之一落在遥远或不久的将来,则会出现额外的惊喜,但相应的市场会话在管理上关闭(FRI/MON 间隙,午夜间隙,DE . 30/DAX post-Market/pre-Market-gap 等)在实时到达“未来”时间点之前。如果没有完全跳出屏幕,这些对象就会变形。
除此之外,TimeFrames 的概念还引入了另一个问题——if(Bid....)
我们只是要组装的条件——在D1
、H4
、和H1
中是否成立并产生完全相同的结果?虽然这似乎只是简单地决定(而且它不是在实践中,另一个糟糕的惊喜正在等待)但可以肯定的是,满足条件星座的坐标确实并且会有所不同,具体取决于时间帧,在哪个时间帧上GUI对象被放置并用算法挑战。M5
M1
PriceDOMAIN
TimeDOMAIN
简单地说,虽然 GUI 对象被绘制为“连续的”,但它们不是。它们在生态系统中的内部表示MQL4
是离散的,因此我们宁愿忘记线性和二次对象的所有代数。
最好的方法是将 GUI 对象想象为一组有序的[x-TimeDOMAIN, y-PriceDOMAIN]
坐标——是的,一组有序的点,其中x
(无论是否令人惊讶)在视觉上最容易误导——条形表示的中间不是“中间” “时间的真实流动,但行政市场的挂钟——时间的开始Bar
。
为了至少从 MQL4 方面获得一些帮助,有一些实用函数可以做到这一点:
int ObjectGetShiftByValue( string anObjectNAME, // ...
double aTargetPriceLEVEL // a price to reach
)
加
double ObjectGetValueByShift( string anObjectNAME, // guess what
int aShiftInTimeDOMAIN // bar index
)
这对方便的功能可以省去很多麻烦,但仍然必须小心处理周末/市场缺口(“现在”可见的条形空间,但会在附近“消失”未来并敢于拥有定义点“被遗忘”的GUI对象......)。
==
......不仅在if(Bid...)
猜猜每个花了一些时间构建自定义指标的人,也遇到了 IEEE-float numeric (im) precision的阴暗面。平滑和深度卷积计算迟早会引入这种现象,并且急救( double-precision float )
并不能消除这些非整数值表示必须遭受的数值精度的主要损失。
==
这就是说,人们应该故意使用不精确的数字并替换二进制严格相等测试(
#define EQUALITY_TOLERANCE 0.000005
if ( EQUALITY_TOLERANCE > MathAbs( Bid - aTargetPRICE ) )
{ // EQUAL
}
else
{
}
当然,同样的逻辑也适用于PriceDOMAIN
交叉测试和其他衍生{ >= | > | < | <= | != }
条件。