大家好!今天我想和大家分享一段简单的代码,用于在MetaTrader 5中检测新K线的生成。这个功能对每位交易者来说都非常重要,能够帮助我们及时掌握市场动态。
这段代码的基本原理非常简单。首先,代码会存储上一个K线的时间(Time of the previous bar)。然后,我们在这个时间上加上60秒(即1分钟,当然你也可以根据需要调整时间),这样就得到了当前K线的收盘时间。
当当前时间等于当前K线的收盘时间时,就意味着新K线已经生成。
在这段代码中,使用了一个布尔类型的变量NewBarReceived来避免多次调用代码块,也就是说这段代码每次K线生成时只会执行一次。你可以在代码中看到使用了Comment();和PlaySound("ok.wav");来检查代码的准确性,如果不需要可以删除。
当当前时间超过当前K线的收盘时间时,标记会重置为false,以便检查下一根K线的到来。(具体可以查看代码中的注释)。
//+------------------------------------------------------------------+ //| 新K线检测.mq5 | //| 作者:H A T Lakmal | //| https://t.me/Lakmal846 | //+------------------------------------------------------------------+ bool NewBarReceived = false; // 用于控制的标志。 //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int OnInit() { //--- 创建定时器 EventSetTimer(60); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 专家去初始化函数 | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- 销毁定时器 EventKillTimer(); } //+------------------------------------------------------------------+ //| 专家每个Tick的处理函数 | //+------------------------------------------------------------------+ void OnTick() { datetime TimePreviousBar = iTime(_Symbol,PERIOD_M1,1); datetime TimeCurrentClose = TimePreviousBar + 60; // 当前K线的收盘时间。 datetime Time_Current = TimeCurrent(); if(Time_Current == TimeCurrentClose && NewBarReceived == false) { PlaySound("ok.wav"); // 用于确认是否正常工作。 NewBarReceived = true; // 更新标志以避免多次调用。 // 在这里添加你的代码 ----- (执行某些操作) } else if(Time_Current > TimeCurrentClose) { NewBarReceived = false; // 重置标志以准备下一根K线。 // 在这里添加你的代码 ----- (执行某些操作) } Comment(" " + " " + "当前K线时间 -: " + TimeToString(TimePreviousBar,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " + "当前收盘时间 -: " +TimeToString(TimeCurrentClose,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " + "当前时间 -: " + TimeToString(Time_Current,TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " +" " + "新K线到达 -: " + NewBarReceived); // 用于检查计算结果 } //+------------------------------------------------------------------+ //| 定时器函数 | //+------------------------------------------------------------------+ void OnTimer() { //--- } //+------------------------------------------------------------------+ //| 交易函数 | //+------------------------------------------------------------------+ void OnTrade() { //--- } //+------------------------------------------------------------------+ //| 图表事件函数 | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- } //+------------------------------------------------------------------+
希望这段代码能对大家有所帮助!如果你有任何问题或者想法,欢迎在评论区留言,我们一起交流学习!