//+------------------------------------------------------------------+
//|                                                  InsideBar.mq5   |
//|              Inside Bar - فقط رنگ کندل عوض میشه                |
//+------------------------------------------------------------------+
#property copyright   "Inside Bar Indicator"
#property version     "2.00"
#property description "Only recolors Inside Bar candles, nothing else"
#property indicator_chart_window

#property indicator_buffers 5
#property indicator_plots   1

#property indicator_label1  "Open;High;Low;Close"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_color1  clrDodgerBlue, clrOrangeRed, clrGold

//--- Input Parameters
input color  BullishColor = clrDodgerBlue;  // رنگ Inside Bar صعودی
input color  BearishColor = clrOrangeRed;   // رنگ Inside Bar نزولی
input color  DojiColor    = clrGold;        // رنگ Inside Bar دوجی

//--- Buffers
double BufferOpen[];
double BufferHigh[];
double BufferLow[];
double BufferClose[];
double BufferColor[];

//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0, BufferOpen,  INDICATOR_DATA);
   SetIndexBuffer(1, BufferHigh,  INDICATOR_DATA);
   SetIndexBuffer(2, BufferLow,   INDICATOR_DATA);
   SetIndexBuffer(3, BufferClose, INDICATOR_DATA);
   SetIndexBuffer(4, BufferColor, INDICATOR_COLOR_INDEX);

   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);

   //--- رنگ‌ها از input بخونه
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 0, BullishColor);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 1, BearishColor);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 2, DojiColor);

   IndicatorSetString(INDICATOR_SHORTNAME, "Inside Bar");
   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[])
  {
   if(rates_total < 2)
      return 0;

   int start = (prev_calculated <= 1) ? 1 : prev_calculated - 1;

   for(int i = start; i < rates_total; i++)
     {
      bool isIB = (high[i] <= high[i-1] && low[i] >= low[i-1]);

      if(isIB)
        {
         BufferOpen[i]  = open[i];
         BufferHigh[i]  = high[i];
         BufferLow[i]   = low[i];
         BufferClose[i] = close[i];

         if     (close[i] > open[i]) BufferColor[i] = 0; // Bullish
         else if(close[i] < open[i]) BufferColor[i] = 1; // Bearish
         else                        BufferColor[i] = 2; // Doji
        }
      else
        {
         BufferOpen[i]  = EMPTY_VALUE;
         BufferHigh[i]  = EMPTY_VALUE;
         BufferLow[i]   = EMPTY_VALUE;
         BufferClose[i] = EMPTY_VALUE;
         BufferColor[i] = EMPTY_VALUE;
        }
     }

   return rates_total;
  }
//+------------------------------------------------------------------+
