- 显示:
- 409
- 等级:
- 已发布:
- 2025.04.03 11:16
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
对于智能交易系统 (EA),当MetaTrader 收到新报价("tick") 时,终端会调用标准OnTick() 事件处理函数。但是,当一个新的条形(蜡烛)开始时,却没有标准的事件处理函数。
要检测这一点,您需要监控最近一栏的开盘时间。当它发生变化时,就表示新的条形开始了,这时就可以对情况做出反应并处理事件。以下代码示例与 MQL4 和 MQL5 兼容,演示了实现这一功能的方法之一:
// 标准滴答事件处理程序 void OnTick() { // 检查新条形图(与 MQL4 和 MQL5 兼容)。 static datetime dtBarraCorrente = WRONG_VALUE; datetime dtBarraPrecedente = dtBarraCorrente; dtBarraCorrente = iTime( _Symbol, _Period, 0 ); bool bEventoBarraNova = ( dtBarraCorrente != dtBarraPrecedente ); // 对新条形图做出反应并处理情况。 if( bEventoBarraNova ) { // 检测这是否是收到的第一个 tick,并处理这种情况。 /* 例如,当它首次应用于图表时, 。条形图处于进度的中间位置,而 并不是新条形图的真正开始。*/ if( dtBarraPrecedente == WRONG_VALUE ) { // 在第一个刻度线或条形图中间做一些事情... } else { // 当正常条形图出现时做一些事情... }; // 执行与前一个条件无关的操作... } else { // 做其他事情... }; // 做其他事情... };
在前面的代码中,即使从OnTick() 函数返回时,静态变量 也会跟踪条形图的打开时间。与普通局部变量不同的是,静态变量会记住其数据内容,在离开函数时也不会释放。这是检测当前条形图打开时间变化的关键。
还需要注意的是,当 EA 首次被放置在图表上时,之前的代码会像条形图刚刚打开一样做出反应。如果需要以不同方式处理这种情况,则需要特殊处理。
请注意,我所有CodeBase 出版物的源代码现在也可以通过MetaEditor 的 "公共项目 "以 "FMIC "的名义获取。
由MetaQuotes Ltd译自葡萄牙语
原代码: https://www.mql5.com/pt/code/41601