首页 系统交易 帖子

MetaTrader 5 新K线检测简单代码分享

附件
49018.zip (977 bytes, 下载 0次)

大家好!今天我想和大家分享一段简单的代码,用于在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)
  {
//---

  }
//+------------------------------------------------------------------+

希望这段代码能对大家有所帮助!如果你有任何问题或者想法,欢迎在评论区留言,我们一起交流学习!

相关帖子

评论 (0)