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 Advisor
和 Technical 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()
是否可以通过专家顾问读取预建指标的变化(例如:其值变化),当然 - 根据这些读数自动执行交易?
负责执行此操作的函数是什么?
我曾尝试在 Google 上查找此内容,但似乎我只能执行跟踪对象创建或删除之类的操作...称为 Chart Events...也许我缺少什么?
是的,有可能。
MetaTrader4 终端 是一个软件平台,允许您启动
1x
soloist Expert Advisor - 作为事件驱动代码- 每个 MT4.Graph 的执行算法
Nx
并发自定义指标-s事件驱动限制代码-每个基础 MT4.Graph1x
soloist Script 每个异步代码执行单元 MT4.Graph
这个清单很重要,因为除了这个你没有其他方法可以自动化复杂的交易算法。
技术指标在一个公共线程下执行,这对实时稳健性造成了限制,而且一些限制适用于可能在指标中编码/编译/执行的允许/禁止操作(所有这些都是为了避免任何和所有可能的阻塞情况(ref. solo-thread for all ...))
这就是说,您可能已经注意到,Expert Advisor
和 Technical 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()