Expert Advisor 和 MQL4 指标之间的交互

Interactions between Expert Advisor and Indicators on MQL4

是否可以通过专家顾问读取预建指标的变化(例如:其值变化),当然 - 根据这些读数自动执行交易?

负责执行此操作的函数是什么?

我曾尝试在 Google 上查找此内容,但似乎我只能执行跟踪对象创建或删除之类的操作...称为 Chart Events...也许我缺少什么?

是的,有可能。

MetaTrader4 终端 是一个软件平台,允许您启动

  • 1x soloist Expert Advisor - 作为事件驱动代码- 每个 MT4.Graph
  • 的执行算法
  • Nx并发自定义指标-s事件驱动限制代码-每个基础 MT4.Graph
  • 1x soloist Script 每个异步代码执行单元 MT4.Graph

这个清单很重要,因为除了这个你没有其他方法可以自动化复杂的交易算法。

技术指标在一个公共线程下执行,这对实时稳健性造成了限制,而且一些限制适用于可能在指标中编码/编译/执行的允许/禁止操作(所有这些都是为了避免任何和所有可能的阻塞情况(ref. solo-thread for all ...))

这就是说,您可能已经注意到,Expert AdvisorTechnical Indicator-s 都是外部同步的(暂时忘记具有主要纳秒级异步性的非并行、共享线程执行由于资源/代码执行调度)并以到达信号的形式绑定到外部发布的anFxMarketEVENT(一旦价格变动,MT4.Server发送QUOTE下行消息到MT4.Terminal,a.k.a.一个Tick ),一旦 ( if ) 收到,就会在 localhost:

上触发 MQL4 代码执行工具
  • OnTick(){ ...} # in case of Expert Advisor
  • OnCalculate(){...} # in case of Custom Technical Indicator

负责这个的函数是什么?

直接? None.

间接? 您构建并负责注册/监视此类值的变化(无论是在 MQL4 域内部还是通过分布式处理模型在外部, 包括 GPU-集群一用于要求更高的处理,其中内部共享线程执行无法满足时序约束:

bool hasAnIndicatorChanged( double aTol = 0.00001 ){    // DERIVATION
     static double prevVALUE = EMPTY_VALUE;             // .DEF
            double aNewVALUE = iBWMFI( _Symbol,         //      .SYM
                                       PERIOD_CURRENT,  //      .PERIOD
                                       0                //      .HOT[0]
                                       );               // .STO "current"
     if (  MathAbs( aNewVALUE - prevVALUE ) <= aTol ){
           prevVALUE = aNewVALUE;
           return( False ); // JIT/RET --> --> --> --> --> non-MISRA-C JIT/RET
     }
     else {
           prevVALUE = aNewVALUE;
           return( True );  // JIT/RET --> --> --> --> --> non-MISRA-C JIT/RET
     }
}

能做原理

人们可能会创建一个类似的微不足道或更复杂一点的 PID 监视器,并在每次调用 OnTick() 时从 Expert Advisor 询问(因此使代码执行与内部事件处理程序保持一致无需额外费用)。

void OnTick(){
     if (  hasAnIndicatorChanged() ){
           ... 
     }
     ...
}

好的,我找到了。

为了在专家顾问内部使用自定义指标作为购买/交易决策的工具,函数是 iCustom()