【问题标题】:MQL4 how to get if a price hits an object?如果价格触及对象,MQL4 如何获得?
【发布时间】:2016-04-30 20:11:48
【问题描述】:

如果价格触及对象,如何获取?可以说,该对象是手动绘制的干草叉或趋势线。我想,应该是这样开始的:

if(Bid==?)

【问题讨论】:

    标签: trading algorithmic-trading quantitative-finance mql4 forex


    【解决方案1】:

    不错的猜测

    让我们一步一步看故事。

    价格:。 . .哪一个?

    { 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....) 是否成立——在D1H4 中是否成立并产生完全相同的结果、H1M5M1?虽然这似乎是在PriceDOMAIN 中简单决定的(实际上并没有,但另一个坏的惊喜正在角落里等待),但可以肯定的是,TimeDOMAIN 坐标 when 是一个条件星座满足并会有所不同,具体取决于放置 GUI 对象并使用算法挑战的时间帧。

    简单地说,虽然 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 交叉测试和其他派生的{ >= | > | < | <= | != } 条件。

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2021-09-15
      • 2023-03-03
      • 2021-12-21
      • 2020-10-05
      • 2021-07-30
      相关资源
      最近更新 更多