#property indicator_separate_window
//#property indicator_maximum 2
//#property indicator_minimum -2
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
//#property indicator_color3 DodgerBlue
//#property indicator_color4 Yellow
//#property indicator_level1 0
//#property indicator_levelcolor 1776411
//#property indicator_levelstyle 0

enum eco{Calc0,Calc1,Calc2,Calc3,Calc4};
input eco            Calc    = Calc1;
input int            Ma      = 50;
input ENUM_MA_METHOD ma_mode = MODE_EMA;

double B0[],B1[],B2[],B3[];

int init() {
   IndicatorBuffers(4);
   SetIndexBuffer(0,B0);
   SetIndexBuffer(1,B1);
   SetIndexBuffer(2,B2);
   SetIndexBuffer(3,B3);
   IndicatorShortName("Cloud_"+Calc+"_"+Ma);
   return (0);
}

int start(){int i,limit=Bars-IndicatorCounted()-1;

   for(i=limit;i>=0;i--){switch(Calc){case Calc0: B2[i]=(Close[i]-Low[i+1])*1000000;                                                      B3[i]=(High[i+1]-Close[i])*1000000;break;
                                      case Calc1: B2[i]=(Close[i]-MathMin(Low[i],Close[i+1]))*1000000;                                    B3[i]=(MathMax(High[i],Close[i+1])-Close[i])*1000000;break;
                                      case Calc2: B2[i]=(Close[i]-MathMin(Low[i],Close[i+1])-(MathMin(Open[i],Close[i])-Low[i]))*1000000; B3[i]=(MathMax(High[i],Close[i+1])-Close[i]-(High[i]-MathMax(Open[i],Close[i])))*1000000;break;
                                      case Calc3: B2[i]=(Close[i]-((High[i+1]+Low[i+1])/2))*1000000;                                      B3[i]=(((High[i+1]+Low[i+1])/2)-Close[i])*1000000;break;
                                      case Calc4: B2[i]=(MathMin(Open[i],Close[i])-Low[i])*1000000;                                       B3[i]=(High[i]-MathMax(Open[i],Close[i]))*1000000;break;}}

   for(i=limit;i>=0;i--){B0[i]=iMAOnArray(B2,0,Ma,0,ma_mode,i); B1[i]=iMAOnArray(B3,0,Ma,0,ma_mode,i);}

   return (0);
}