欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

EA 中的新柱事件 - MetaTrader 4 专家

author emer | 677 人阅读 | 0 人评论 |

很多人都想要:

如何检测是否存在新的钢筋。

这非常简单,特别是如果您想在当前时间范围内检测新的柱,

空白开始(){
  静止的 日期时间tmp;
  如果(tmp!=时间[0]) {
    tmp = 时间[0];
    //在这里做你的代码  }
}


但是其他时间范围事件呢?这并不太难,但有一些限制:

MT4不支持onBar事件,但您可以将上涨次数放入数组中,并在每个价格变动时检查数组次数,如果到达正确的时间,则执行新的柱事件。
这意味着如果您运行例如:在 M5 时间范围上进行回测,您可以捕获 M6 M7...D1 事件。
为什么你只能检测到上升趋势?答案是一个问题:如何产生打钩 数据经过元交易者A1,A2,A3,...

在 D1 时间范围之前,它会更加困难,因为一周开始于例如:周日 20:45(特定于经纪商) 开始 本月的可以开始在中间 一周...等等
我认为这个信息不太相关,所以我不发布它......

所以有一个话题对于这个问题,但我认为很多人不阅读文章和论坛,所以我发布了这段代码。

一些解释:

在 init 函数中,您用启动时间填充时间数组:

  curIndex = utils.periodToPeriodIndex(时期());
  次数[curIndex] = 时间[0];
  为了整数我=当前索引+1;我<最大值;我++)
    次数[i] = 次数[curIndex]-数学模块(times[curIndex],utils.periodIndexToPeriod(i)*60);


在启动函数中,您检查了现在是否已经过去了足够的时间,然后执行事件

  如果(时间[curIndex] != 时间[0]) {
    次数[curIndex] = 时间[0];
    酒吧(时期());
    为了整数我=当前索引+1;我<最大值;我++){
      整数周期 = utils.periodIndexToPeriod(i),
          秒 = 周期*60,
          time0   = 次数[curIndex] -数学模块(次[curIndex],秒);
      如果(时间[i]!=时间0){
        次[i] = 时间0;
        onBar(句点);
      }
    }
  }


将您的代码写入

空白onTick() { 
}

空白酒吧(整数时期) {
}

这就是大家。

更新1.1: 谢谢WH罗德为了清晰的代码


附件下载

📎 ea_symr_newBar.mq4 (2.61 KB)

Source: MQL5 #10370

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录