Plot Previous OHLC

Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains open prices of each barSeries array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains open prices of each barSeries array that contains close prices for each bar
1 Views
0 Downloads
0 Favorites
Plot Previous OHLC
//+------------------------------------------------------------------+
//|                                           Plot Previous OHLC.mq5 |
//|                             https://www.mql5.com/en/users/phade/ |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, https://www.mql5.com/en/users/phade/"
#property link      "https://www.mql5.com/en/users/phade/"
#property version   "1.01"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots 4
#property indicator_label1 "Previous High"
#property indicator_label2 "Previous Low"
#property indicator_label3 "Previous Open"
#property indicator_label4 "Previous Close"
#property indicator_type1 DRAW_LINE
#property indicator_type2 DRAW_LINE
#property indicator_type3 DRAW_LINE
#property indicator_type4 DRAW_LINE
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
#property indicator_style3 STYLE_SOLID
#property indicator_style4 STYLE_SOLID
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2


// Define buffers
double HighBuffer[];
double LowBuffer[];
double OpenBuffer[];
double CloseBuffer[];

// global vars
datetime timeToUse;
bool valuesCalculated = false;
ENUM_TIMEFRAMES prevTimeFrame = PERIOD_CURRENT;

// inputs  
input ENUM_TIMEFRAMES timeFrameSelector = PERIOD_D1; // Choose period to find the previous highs and lows
input color resistanceLineColor = clrDarkTurquoise; // Color of the previous highs
input color supportLineColor = clrDarkGray; // Color of the previous lows
input color candleOpenColor = clrLightGray; // Color of the previous candle open
input color candleCloseColor = clrPeachPuff; // Color of the previous candle close

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(){

   // Set the indicator label
   IndicatorSetString(INDICATOR_SHORTNAME, "PrevDayHighLow");

   // Create buffers
   SetIndexBuffer(0, HighBuffer);
   SetIndexBuffer(1, LowBuffer);
   SetIndexBuffer(2, OpenBuffer);   
   SetIndexBuffer(3, CloseBuffer);      
   PlotIndexSetInteger(0,PLOT_LINE_COLOR, resistanceLineColor);
   PlotIndexSetInteger(1,PLOT_LINE_COLOR, supportLineColor);
   PlotIndexSetInteger(2,PLOT_LINE_COLOR, candleOpenColor);
   PlotIndexSetInteger(3,PLOT_LINE_COLOR, candleCloseColor);
             
    if (timeFrameSelector != prevTimeFrame) {
      prevTimeFrame = timeFrameSelector;
      ResetBuffers();
   }
   
   timeToUse = iTime(_Symbol, timeFrameSelector, 1);
      
   // Return initialization result
   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[]){
                
                
    // Check if the timeframe has changed
   if (ChartPeriod() != prevTimeFrame){
   
      prevTimeFrame = ChartPeriod();
      ResetBuffers(); // Reset indicator buffers when the timeframe changes
      valuesCalculated = false; // Reset the flag
   }
                
                
   // Calculate and store the previous day's high and low in the buffers
   if (!valuesCalculated){
   
      for (int i = 0; i < rates_total; i++){
      
         HighBuffer[i] = prevDayHigh(timeToUse, timeFrameSelector);
         LowBuffer[i] = prevDayLow(timeToUse, timeFrameSelector);
         OpenBuffer[i] = prevDayOpen(timeToUse, timeFrameSelector);
         CloseBuffer[i] = prevDayClose(timeToUse, timeFrameSelector);
      }
      
      valuesCalculated = true; // Set the flag to true
   }
         
   return rates_total;
}
  
  
void ResetBuffers(){
   ArrayInitialize(HighBuffer, 0); // Reset the HighBuffer to 0
   ArrayInitialize(LowBuffer, 0);  // Reset the LowBuffer to 0
   ArrayInitialize(OpenBuffer, 0);  // Reset the LowBuffer to 0
   ArrayInitialize(CloseBuffer, 0);  // Reset the LowBuffer to 0
}


double prevDayHigh(const datetime prevDay, const ENUM_TIMEFRAMES timeFrame){

    int prevBar = iBarShift(_Symbol, timeFrame, prevDay); // Get the bar index of the previous day
    double highPrice = iHigh(_Symbol, timeFrame, prevBar); // Get the high price of the previous day
    
    return highPrice;
}

double prevDayLow(const datetime prevDay, const ENUM_TIMEFRAMES timeFrame){

    int prevBar = iBarShift(_Symbol, timeFrame, prevDay); // Get the bar index of the previous day
    double lowPrice = iLow(_Symbol, timeFrame, prevBar); // Get the low price of the previous day
    
    return lowPrice;
}

double prevDayOpen(const datetime prevDay, const ENUM_TIMEFRAMES timeFrame){

    int prevBar = iBarShift(_Symbol, timeFrame, prevDay); // Get the bar index of the previous day
    double openPrice = iOpen(_Symbol, timeFrame, prevBar); // Get the low price of the previous day
    
    return openPrice;
}

double prevDayClose(const datetime prevDay, const ENUM_TIMEFRAMES timeFrame){

    int prevBar = iBarShift(_Symbol, timeFrame, prevDay); // Get the bar index of the previous day
    double closePrice = iClose(_Symbol, timeFrame, prevBar); // Get the low price of the previous day
    
    return closePrice;
}

Comments