EA 交易与 MQL4 指标之间的交互

Lir*_*anC 1 trading algorithmic-trading forex metatrader4 mql4

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

负责执行此操作的功能是什么?

我试图在谷歌上查找这个,但似乎我只能做跟踪对象创建或删除之类的事情......称为图表事件......也许我错过了什么?

use*_*197 5

对的,这是可能的。

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

  • 1xsoloist Expert Advisor- 作为每个事件驱动的代码执行算法MT4.Graph
  • Nx并发Custom Indicator-s 每个事件驱动的受限代码库MT4.Graph
  • 1xScript每个单独的异步代码执行单元MT4.Graph

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

技术指标在一个公共线程下执行,这对实时鲁棒性造成了限制,另外一些限制适用于可能在指标中编码/编译/执行的允许/禁止操作(所有这些都旨在避免任何和所有可能的阻塞情况(参考) . 所有人的单线程... ) )

这就是说,你可能已经注意到,这两个Expert AdvisorTechnical Indicator-s在外部同步(忘了有关非平行的时刻,异步的,由于资源/代码执行调度主要纳秒范围内共享线程执行),并绑定到发行在外anFxMarketEVENT的到达信号的一种形式(一旦价格移动,MT4.Server就会向 发送QUOTE下游消息MT4.Terminal,也就是Tick),一旦(如果)收到,就会触发 上的MQL4代码执行设施localhost

  • OnTick(){ ...} # in case of Expert Advisor
  • OnCalculate(){...} # in case of Custom Technical Indicator

对此负责的功能是什么?

直接地?没有任何。

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

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
     }
}
Run Code Online (Sandbox Code Playgroud)

能做原则

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

void OnTick(){
     if (  hasAnIndicatorChanged() ){
           ... 
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)