1

我是 MT4 新手,对 MQL4 的基本编程知之甚少。我在 UTC+5:30 交易印度股票。我只想要一小段代码来获取当前时间帧中今天的第一支蜡烛高​​低。我们的交易从 IST 上午 9:15 开始,到 IST 下午 3:30 结束。

例如,如果我选择 PERIOD_M15(15 分钟图表),那么我需要有一天的第一根蜡烛(即从上午 9:15 到上午 9:30)高和低。

提前致谢。

4

2 回答 2

4

欢迎来到 SOF!

您需要输入参数(一天中的时间开始):

input int InpTimeStartHour=9; input int InpTimeStartMinute=15; 这可以作为一个字符串,但为简单起见,此类字段

bool getHighLowFistCandle(double &high,double &low){
   //check if first candle (zero-current) is after 9:15
   datetime lastCandle=iTime(Symbol(),0,1);
   if(TimeHour(lastCandle)<InpTimeStartHour || 
      (TimeHour(lastCandle)==InpTimeStartHour && TimeMinute(lastCandle)<InpTimeStartMinute){
      return(false);
   }
   //looking for that time candle starting from day start
   datetime todayStart=iTime(Symbol(),PERIOD_D1,0);
   int shift=iBarShift(Symbol(),0,todayStart);
   for(int i=shift;i>0;i--){
      datetime iCandleTime=iTime(Symbol(),0,i);
      if(TimeHour(iCandleTime)==InpTimeStartHour &&
         TimeMinute(iCandleTime)==InpTimeStartMinute){
          high=iHigh(Symbol(),0,i);
          low=iLow(Symbol(),0,i);
          return(true);
      }
   }
  return(false);
}
于 2018-02-03T15:54:34.060 回答
0

下面是我的指标代码,

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2018, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020,ANKUR SONI."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property  indicator_buffers 1
#property indicator_chart_window
#property indicator_width1 5
#property  indicator_color1 clrYellow

double engulfing[];
input int InpTimeStartHour=8;
input int InpTimeStartMinute=45;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0, engulfing);
   SetIndexStyle(0, DRAW_ARROW);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   for(int i = (Bars - 2) ; i > 0 ; i--)
     {
      if(TimeHour(time[i]) == InpTimeStartHour && TimeMinute(time[i]) == InpTimeStartMinute)
        {
         double currentHigh = High[i];
         double currentLow = Low[i];
         double nextHigh = High[i-1];
         double nextLow = Low[i-1];
         if(nextHigh > currentHigh && nextLow < currentLow)
           {
            engulfing[i-1] = High[i-1] + 15;
           }
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
于 2020-06-27T15:27:27.073 回答