对的,这是可能的。
MetaTrader4 Terminal是一个软件平台,可让您启动
1x
独奏者Expert Advisor- 作为每个事件驱动的代码执行算法MT4.Graph
Nx
concurrent Custom Indicator-s 每个事件驱动的受限代码库MT4.Graph
1x
Script每个独奏者异步代码执行单元MT4.Graph
这个库存很重要,因为除了这个,您没有其他方法可以自动化复杂的交易算法。
技术指标在一个公共线程下执行,这对实时鲁棒性构成限制,另外一些限制适用于可能在指标中编码/编译/执行的允许/禁止操作(所有这些都旨在避免任何和所有可能的阻塞情况(参考. 所有人的单线程... ) )
这就是说,您可能已经注意到,Expert Advisor
和Technical Indicator
-s 都是外部同步的(暂时忘记非并行的共享线程执行,由于资源/代码执行调度而具有主要的纳秒级异步性)并且绑定到外部anFxMarketEVENT
发布到达信号的一种形式(一旦价格移动,将下游MT4.Server
消息QUOTE
发送给MT4.Terminal
MQL4
localhost
OnTick(){ ...}
# in case of Expert Advisor
OnCalculate(){...}
# in case of Custom Technical Indicator
对此负责的功能是什么?
直接地?没有任何。
间接?您构建并负责注册/监视此类值的更改的人(无论是在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 监视器,并在Expert Advisor
每次OnTick()
调用 an 时询问(因此无需额外成本将代码执行与内部事件处理程序对齐)。
void OnTick(){
if ( hasAnIndicatorChanged() ){
...
}
...
}