S.B.H.

A current version of the Stochastic Bars Hybrid.

If we get a move back up, I think it will be thrown into the brown box (the wick of the professional volume candle). Otherwise, the red strip is the main obstacle, but a fresh consolidation move it about.

//+------------------------------------------------------------------+
//+ Stochastic Bars Hybrid Current 04/2025                           +
//+------------------------------------------------------------------+
#property  copyright "Macdulio"
#property  link      "https://forexfore.blog/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_maximum 1
#property indicator_minimum 0

extern int indicator_window = 1;
extern bool plot_r1_s1 = true;

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double RSI2[];
//double ma[];

//
//
//
//
//

extern int    K_Period  = 25;
extern int    K_Period2  = 60;
extern int    K_Period3  = 100;
extern int    D_Period  = 3;
extern int    Slowing  = 3;
extern int    TopBorder=90;
extern int    BotBorder=10;
extern int    BotBorder2=5;
extern int    BotBorder3=3;
extern string TypeMA    = "SMA=0, EMA=1, SMMA=2, LWMA=3";
extern int    MAType    =  0;
//extern int    MAShift   =  0;
extern string TypePrice = "0 - Low/High, 1 - Close/Close";
extern int    PriceType =  0;
double ExtMapBuffer[];
//
//
//
//
//

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

bool starterup[], starterdn[];

int init()
{
   IndicatorBuffers(4);
      SetIndexBuffer(0,ExtMapBuffer1);
      SetIndexBuffer(1,ExtMapBuffer2);
      SetIndexBuffer(2,ExtMapBuffer3);
 //     SetIndexBuffer(3,ma);
      SetIndexStyle(0,DRAW_HISTOGRAM);
      SetIndexStyle(1,DRAW_HISTOGRAM);
      SetIndexStyle(2,DRAW_HISTOGRAM);
      
      
      
   return(0);
}

int start()
{ 
   double weight;
   int      counted_bars=IndicatorCounted();
   int      limit,i,i2,j,j2;
   string symbol = Symbol();
      
   
ArrayResize(RSI2, Bars);
ArrayInitialize(RSI2, 0);
ArrayResize(starterup, Bars);
ArrayInitialize(starterup, false);
ArrayResize(starterdn, Bars);
ArrayInitialize(starterdn, false);
ArrayResize(ExtMapBuffer, Bars);
ArrayInitialize(ExtMapBuffer, 0);
  
 double ATRA = 0;
   for (i=1; i<=3; i++){ 
     ATRA = ATRA+iATR(NULL,1440,14,i);}
 

   i=0;
   while (i<200){
      if (ChoppinessIndex(12*4,i)>53 && ChoppinessIndex(12*4,i+1)<53) break;
   i++;
  }
 

   
   if (i<200) weight=(iHigh(symbol,15,i)+iLow(symbol,15,i))/2;

deletetxt1("First");
deletetxt1("Winner");
deletetxt1("Dinner");
deletetxt1("Pinner");
deletetxt1("Bacadi");
deletetxt1("Dalton");

for(i = 220; i >= 0; i--){
 RSI2[i]=iRSI(symbol,0,2,PRICE_MEDIAN,i);
}
   

   if(counted_bars < 0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = Bars-counted_bars;

 //    for(i = limit; i >= 0; i--) ma[i]=iMA(NULL,0,MAPeriod,MAShift,MAType,PriceType,i);
   for(i = limit; i >= 0; i--)
   {  
      double St=iStochastic(NULL,0,K_Period,D_Period,Slowing,MAType,PriceType,MODE_MAIN,i);
      double St2=iStochastic(NULL,0,K_Period2,D_Period,Slowing,MAType,PriceType,MODE_MAIN,i);
      double St3=iStochastic(NULL,0,K_Period3,D_Period,Slowing,MAType,PriceType,MODE_MAIN,i);
      ExtMapBuffer1[i] = EMPTY_VALUE;
      ExtMapBuffer2[i] = EMPTY_VALUE;
      ExtMapBuffer3[i] = EMPTY_VALUE;
        // if (St>BotBorder && St<TopBorder) ExtMapBuffer1[i] = 1;
         if (St2<BotBorder2 && (St<BotBorder || St3<BotBorder3)) ExtMapBuffer2[i] = 1;
         if (St>TopBorder) ExtMapBuffer3[i] = 1;       
   }
   

for(i = 1920; i >= 0; i--){
 ///starter candle up
 if (High[i+1]-Open[i+1]>40*Point && High[i+1]-Close[i+1]>40*Point && High[i+2]<High[i+1] && High[i]<High[i+1] &&
 High[i+1]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)
 && iHigh(symbol,0,i+1)>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,7,i+2))
 && Close[i]<Close[i+1]
 ){
    ObjectCreate("Dalton"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+1], High[i+1]+20*Point); 
        ObjectSetText("Dalton"+DoubleToStr(i), "ST", 22, "Impact", DimGray);
   starterup[i+1]=true;
 }
 
 ///runner down
 if (starterup[i+2]
 && iLow(symbol,0,i)<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,7,i+1))-20*Point
 ){
//    ObjectCreate("Dalton"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+2], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,14,i+1))+50*Point); 
//        ObjectSetText("Dalton"+DoubleToStr(i), "RUNNER", 22, "Impact", Crimson );
 }
 
 ///eraser down
// if (starterup[i+2]
// && iLow(symbol,0,i)>=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,7,i+1))-20*Point
// ){
//    ObjectCreate("Dalton"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+2], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,14,i+1))+50*Point); 
//        ObjectSetText("Dalton"+DoubleToStr(i), "ERASER", 22, "Impact", Green);
// }
 
 
 ///hot fractal on top (must overhedge for the break)
     if (iFractals(symbol,0,MODE_UPPER,i) && ExtMapBuffer3[i]!=EMPTY_VALUE  && ExtMapBuffer3[i+1]!=EMPTY_VALUE 
     //&& ExtMapBuffer3[i+2]!=EMPTY_VALUE 
     && (Close[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) || Close[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1))
     
     )   {
        ObjectCreate("Daltoni"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+5], High[i]+20*Point); 
        ObjectSetText("Daltoni"+DoubleToStr(i), "CAT V BACK", 22, "Impact", DarkGreen);
 }
 
 ///hot fractal on bottom (must overhedge for the break)
     if (iFractals(symbol,0,MODE_LOWER,i) && ExtMapBuffer2[i]!=EMPTY_VALUE  && ExtMapBuffer2[i+1]!=EMPTY_VALUE 
     //&& ExtMapBuffer2[i+2]!=EMPTY_VALUE 
     && (Close[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i) || Close[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1))
     
     )   {
        ObjectCreate("Daltoni"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+5], Low[i]-20*Point); 
        ObjectSetText("Daltoni"+DoubleToStr(i), "CAT V BACK", 22, "Impact", Crimson);
 }
 
 
 ///starter candle dn
 if (Open[i+1]-Low[i+1]>50*Point && Close[i+1]-Low[i+1]>50*Point && Low[i+2]>Low[i+1] && Low[i]>Low[i+1] &&
 Low[i+1]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)
 && iLow(symbol,0,i+1)<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,7,i+2))
  && Close[i]>Close[i+1]
 ){
    ObjectCreate("Dalton"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+1], Low[i+1]-30*Point); 
        ObjectSetText("Dalton"+DoubleToStr(i), "ST", 22, "Impact", DimGray);
   starterdn[i+1]=true;
 }
 
 
 
 ///rat poison going up
 if (Close[i]>Open[i] && Close[i+1]>Open[i+1] 
 && (Close[i+2]>Open[i+2] || Close[i+2]>Low[i+2]+120*Point) 
 && High[i]-Low[i]<360*Point
 && High[i+2]-Low[i+2]<340*Point
 && High[i]>High[i+1]
 && High[i+1]>High[i+2]
 && Low[i+1]>Low[i+2]
 && Low[i+3]>Low[i+2]
 && (Low[i+9]>iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i+9) || High[i+9]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i+9)) 
 && ((Open[i+2]-Low[i+2]>50*Point && Close[i+2]-Low[i+2]>50*Point && Low[i+2]<iMA(symbol,0,16,0,MODE_EMA,PRICE_OPEN,i+2) && iMA(symbol,0,16,0,MODE_EMA,PRICE_OPEN,i)<iMA(symbol,0,8,0,MODE_EMA,PRICE_MEDIAN,i) && High[i+2]-Low[i+2]<400*Point) 
  || (Open[i+3]-Low[i+3]>50*Point && Close[i+3]-Low[i+3]>50*Point && Low[i+3]<iMA(symbol,0,16,0,MODE_EMA,PRICE_OPEN,i+3)  && iMA(symbol,0,16,0,MODE_EMA,PRICE_OPEN,i)<iMA(symbol,0,8,0,MODE_EMA,PRICE_MEDIAN,i) && High[i+3]-Low[i+3]<400*Point)  )
){
       ObjectCreate("Firstrat"+IntegerToString(i), OBJ_TREND, 0,  Time[i+3], Open[i]-40*Point, Time[i], Open[i]-40*Point);
       ObjectSetInteger(0,"Firstrat"+IntegerToString(i),OBJPROP_COLOR,clrYellow);
                     ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_BACK,0);
                     ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
                     ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_WIDTH,3);  
                     
                      ObjectCreate("Firstrats"+IntegerToString(i), OBJ_TREND, 0,  Time[i+3], Close[i]-20*Point, Time[i], Close[i]-20*Point);
       ObjectSetInteger(0,"Firstrats"+IntegerToString(i),OBJPROP_COLOR,clrGreen);
                     ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_BACK,0);
                     ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
                     ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_WIDTH,6); 
                     
        ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+6], Close[i]+20*Point);  
          ObjectSetText("Bacadiy"+DoubleToStr(i), "RPBUY @"+DoubleToStr(NormalizeDouble(Close[i]-20*Point,4),4), 17, "Impact", MediumOrchid);                  
   if (High[i]-Low[i]<140*Point && High[i+1]-Low[i+1]<140*Point && High[i+2]-Low[i+2]<140*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "NOT ENOUGH VOLATILIY", 17, "Impact", Gray);   
   if (High[i]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i))<800*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "NO RAT, NOT OUTSIDE...", 17, "Impact", DimGray);                  
 }

/// clutch on the upside
   if (Open[i]<Close[i] && High[i]>High[i+1] && Open[i+1]>Close[i+1] && Open[i+2]<Close[i+2] && Open[i+3]<Close[i+3]  && Open[i+4]<Close[i+4]
         && High[i+2]>High[i+3] && High[i+3]>High[i+4] && Low[i+2]>Low[i+3] && Low[i+3]>Low[i+4]
     //  && High[i+2]-Low[i+2]<240*Point
     && (Close[i]>Open[i+1] || Close[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1))
       && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)
       //&& Close[i]>High[i]-(High[i]-Low[i])/5
       // && High[i+1]>weight+960*Point 
         ){
           ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+6], Close[i]+20*Point);  
             ObjectSetText("Bacadiy"+DoubleToStr(i), "CLUTCH!!!", 47, "Impact", MediumSeaGreen);                  
             
                  ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i+4], Low[i+4], Time[i], Close[i]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Khaki); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
   }



/// clutch on the downide
   if (Open[i]>Close[i] && Low[i]<Low[i+1] && Open[i+1]<Close[i+1] && Open[i+2]>Close[i+2] && Open[i+3]>Close[i+3]  && Open[i+4]>Close[i+4]
         && Low[i+2]<Low[i+3] && Low[i+3]<Low[i+4] && Low[i+4]<Low[i+5] && High[i+2]<High[i+3] && High[i+3]<High[i+4] && High[i+4]<High[i+5]
        && Low[i]<Low[i+2]
        && High[i+4]-Low[i+4]<250*Point
        //&& Low[i+1]<weight-960*Point 
         ){
           ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+6], Close[i]+20*Point);  
             ObjectSetText("Bacadiy"+DoubleToStr(i), "CLUTCH!!!", 47, "Impact", Crimson);                  
             
                 ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i+4], High[i+4], Time[i], Close[i]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Khaki); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
   }


///rat poison going down
 if (Close[i]<Open[i] && Close[i+1]<Open[i+1] 
 && (Close[i+2]<Open[i+2] || Close[i+2]<High[i+2]-120*Point) 
 && High[i]-Low[i]<360*Point
 && High[i]<High[i+1]
 && High[i+1]<High[i+2]
 && Low[i+1]<Low[i+2]
 //&& Low[i+3]<Low[i+2]
 && ((High[i+2]-Open[i+2]>50*Point && High[i+2]-Close[i+2]>50*Point && High[i+2]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+2) && iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i)>iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i) && High[i+2]-Low[i+2]<400*Point) 
  || (High[i+3]-Open[i+3]>50*Point && High[i+3]-Close[i+3]>50*Point && Low[i+3]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+3)  && iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i)>iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i) && High[i+3]-Low[i+3]<400*Point)  
 )){
       ObjectCreate("Firstrat"+IntegerToString(i), OBJ_TREND, 0,  Time[i+3], Open[i]+40*Point, Time[i], Open[i]+40*Point);
       ObjectSetInteger(0,"Firstrat"+IntegerToString(i),OBJPROP_COLOR,clrYellow);
                     ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_BACK,0);
                     ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
                     ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_WIDTH,3);  
                     
                      ObjectCreate("Firstrats"+IntegerToString(i), OBJ_TREND, 0,  Time[i+3], Close[i]+20*Point, Time[i], Close[i]+20*Point);
       ObjectSetInteger(0,"Firstrats"+IntegerToString(i),OBJPROP_COLOR,clrRed);
                     ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_BACK,0);
                     ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
                     ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_WIDTH,6); 
                     
        ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+6], Close[i]-20*Point);  
          ObjectSetText("Bacadiy"+DoubleToStr(i), "RPSELL @"+DoubleToStr(NormalizeDouble(Close[i]+20*Point,4),4), 17, "Impact", MediumOrchid);                  
          if (High[i]-Low[i]<140*Point && High[i+1]-Low[i+1]<140*Point && High[i+2]-Low[i+2]<140*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "NOT ENOUGH VOLATILIY", 17, "Impact", Gray);                 
         if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i))-Low[i]<800*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "NO RAT, NOT OUTSIDE...", 17, "Impact", DimGray);                  
         
         if (High[i+1]-Low[i+1]>200*Point && Low[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1))
         ObjectSetText("Bacadiy"+DoubleToStr(i), "RPSELL INTO BB30 ONLY from "+DoubleToStr(NormalizeDouble(Close[i]+20*Point,4),4), 17, "Impact", MediumOrchid);                       
   
 }
 
 
 
 ///cat exit on top
 if (High[i]>=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,20,i+1))-40*Point && 
 (Low[i]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i)+40*Point 
 ||  Low[i+1]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i+1)+40*Point)
   && 
 i>0 && iFractals(symbol,0,MODE_UPPER,i) && ExtMapBuffer3[i]==EMPTY_VALUE && ExtMapBuffer3[i-1]==EMPTY_VALUE){
    j=i+2;
    while (j<i+30){
      if (iFractals(symbol,0,MODE_UPPER,j) && (ExtMapBuffer3[j]!=EMPTY_VALUE || ExtMapBuffer3[j-1]!=EMPTY_VALUE)) break;
      j++;
    }
    if (iFractals(symbol,0,MODE_UPPER,j) && j<i+30){
      
      ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+3], High[i]+20*Point);  
          ObjectSetText("Bacadiy"+DoubleToStr(i), "CAT EXIT @"+DoubleToStr(NormalizeDouble(High[i],4),4), 27, "Impact", Magenta); 
            if (i>1 && Low[i-2]<Low[i-1]){ 
      ObjectDelete("Pinner"+IntegerToString(i));
      ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], High[i], Time[i-2], Low[i-2]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
          
          if (High[i]-Close[i]>500*Point && High[i]-Open[i]>500*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "Runway Candle @"+DoubleToStr(NormalizeDouble(High[i],4),4), 17, "Impact", Green); 
          if (High[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && High[i]>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,20,i+1))) ObjectSetText("Bacadiy"+DoubleToStr(i), "TEMP CAT EXIT @"+DoubleToStr(NormalizeDouble(High[i],4),4)+" Back In at 3/4 BB", 17, "Impact", Orange); 
          ObjectCreate("Bacadiyy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+3], iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i)-80*Point);  
          ObjectSetText("Bacadiyy"+DoubleToStr(i), "-> BB30L-10 RES, (BB30L+10 means break)", 17, "Impact", Crimson); 
          if (High[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)) ObjectSetText("Bacadiyy"+DoubleToStr(i), "-> doji queue, resumption", 17, "Impact", OrangeRed);
      
          
    } 
    
     
 }
 
 ///cat exit on bottom
 if (Low[i]<=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,20,i)) &&     
 i>0 && iFractals(symbol,0,MODE_LOWER,i) && ExtMapBuffer2[i]==EMPTY_VALUE && ExtMapBuffer2[i-1]==EMPTY_VALUE){
    j=i+2;
    while (j<i+30){
      if (iFractals(symbol,0,MODE_LOWER,j) && (ExtMapBuffer2[j]!=EMPTY_VALUE || ExtMapBuffer2[j-1]!=EMPTY_VALUE)) break;
      j++;
    }
    if (iFractals(symbol,0,MODE_LOWER,j) && j<i+30){
      
      ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+3], Low[i]+20*Point);  
          ObjectSetText("Bacadiy"+DoubleToStr(i), "CAT EXIT @"+DoubleToStr(NormalizeDouble(Low[i],4),4), 27, "Impact",Magenta);                  
            ObjectCreate("Bacadiyy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+3], iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i)+80*Point);  
          ObjectSetText("Bacadiyy"+DoubleToStr(i), "-> BB30L+10 SUP, (BB30L-10 means break)", 17, "Impact", Green); 
          if (i>2){ 
      ObjectDelete("Pinner"+IntegerToString(i));
      ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], Low[i], Time[i-2], High[i-2]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
      
  } 
          
    } 
     
 }
 
 ///support made
 if (High[i+1]-Low[i+1]>140*Point && Close[i+1]<Open[i+1] 
 && Low[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1) 
 && Close[i]>Open[i] && Close[i]-Open[i]>(Open[i+1]-Close[i+1])*.51)
 {
    if (Open[i+1]-Close[i+1]<50*Point) ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Low[i+1]+20*Point, Time[i+1], Low[i+1]);
       else ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]+20*Point, Time[i+1], Close[i+1]);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrBlue); 
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
      }
      
  ///support with doji made
 if (High[i+2]-Low[i+2]>140*Point && Close[i+2]<Open[i+2] 
 && Low[i+2]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+2) 
 && (Close[i+1]-Open[i+1]<20*Point && Open[i+1]-Close[i+1]<20*Point)
 && Close[i]>Open[i] && Close[i]-Open[i]>(Open[i+2]-Close[i+2])*.51)
 {
    if (Open[i+1]-Close[i+1]<50*Point) ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Low[i+1]+20*Point, Time[i+1], Low[i+1]);
       else ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+2]+20*Point, Time[i+1], Close[i+2]);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrBlue); 
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
      }     
      
   
  
 ///s0 made
 if (Low[i+1]<Low[i+2] && High[i+1]-Low[i+1]>140*Point && Close[i+1]<Open[i+1] && Low[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1) && Close[i]>Open[i] && Close[i]-Open[i]>(Open[i+1]-Close[i+1])*.55)
 {
      ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]+20*Point, Time[i+1], Close[i+1]);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrGray); 
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
      }
       
      
      
  ///resistance made
 if (High[i+1]-Low[i+1]>120*Point && Close[i+1]>Open[i+1] 
 && High[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1) && Close[i]<Open[i] && Open[i]-Close[i]>(Close[i+1]-Open[i+1])*.55)
 {
      if (Close[i+1]-Open[i+1]<50*Point) ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], High[i+1]-20*Point, Time[i+1], High[i+1]);
    else 
      
      ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]-20*Point, Time[i+1], Close[i+1]);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrRed); 
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
      }     
      
     ///resistance made (dark cloud)
 if (i>0 && High[i]-Low[i]>210*Point && Close[i+1]>Open[i+1] && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && Close[i]<Open[i] && Open[i]-Close[i]>(Close[i+1]-Open[i+1])*.25 && Close[i-1]<Low[i+1])
 {
      ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]-20*Point, Time[i+1], Close[i+1]);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrRed); 
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
      }        
      
      
 
   ///resistance with doji made
 if (High[i+2]-Low[i+2]>140*Point && Close[i+2]>Open[i+2] && High[i+2]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+2) 
 && (Close[i+1]-Open[i+1]<20*Point && Open[i+1]-Close[i+1]<20*Point)
 && Close[i]<Open[i] && Open[i]-Close[i]>(Close[i+1]-Open[i+1])*.55)
 {
      ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+8], Close[i+2]-20*Point, Time[i+2], Close[i+2]);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrRed); 
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
      }     
      
 
  ///r0 made
 if (High[i+1]>High[i+2] && High[i+1]-Low[i+1]>140*Point && Close[i+1]>Open[i+1] && High[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1) && Close[i]<Open[i] && Open[i]-Close[i]>(Close[i+1]-Open[i+1])*.55)
 {
      ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]-20*Point, Time[i+1], Close[i+1]);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrGray); 
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
      ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
      }     
 
 ///45+pips rejection
  if (i>1 && iFractals(symbol,0,MODE_UPPER,i) && High[i]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i))
  && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)
  ){
  if (High[i]-Low[i-1]>450*Point){ 
      ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], High[i], Time[i-1], Low[i-1]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
  if (Low[i-2]<Low[i-1] && High[i]-Low[i-2]>450*Point){ 
      ObjectDelete("Pinner"+IntegerToString(i));
      ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], High[i], Time[i-2], Low[i-2]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
      if (ExtMapBuffer3[i]==EMPTY_VALUE) ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
  } 
 
   if (i>2 && iFractals(symbol,0,MODE_LOWER,i) && Low[i]==iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i))
   && Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)
   ){
  if (High[i-1]-Low[i]>450*Point){ 
      ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], Low[i], Time[i-1], High[i-1]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
  if (High[i-2]>High[i-1] && High[i-2]-Low[i]>450*Point){ 
      ObjectDelete("Pinner"+IntegerToString(i));
      ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], Low[i], Time[i-2], High[i-2]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
  if (High[i-3]>High[i-1] && High[i-3]-Low[i]>310*Point){ 
      ObjectDelete("Pinner"+IntegerToString(i));
      ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], Low[i], Time[i-3], High[i-3]);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta); 
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
      ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
      if (ExtMapBuffer2[i]==EMPTY_VALUE) ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
  }  
}
   


deletetxt1("Eclipse");



   j2=1;
   while (j2<500 ){
    j=j2+3; 
      if (iFractals(Symbol(),0,MODE_LOWER,j2)) 
         while (j<j2+16){
               if (RSI2[j2]<RSI2[j] && iFractals(Symbol(),0,MODE_LOWER,j)   ) break;
         j++;}
         
         
    if (iFractals(Symbol(),0,MODE_LOWER,j) && iFractals(Symbol(),0,MODE_LOWER,j2) && RSI2[j2]<RSI2[j] && Low[j2]>=Low[j]-10*Point ) break;
          j2++;}  

    

///first lower continuation divergence         
                if (Period()==60 && plot_r1_s1){  
           if (j2>2) {
             ObjectCreate("Eclipset"+DoubleToStr(j), OBJ_TRIANGLE, 0, Time[j2-3],  Low[j2]+90*Point, Time[j2-3], Low[j2]-420*Point, Time[j2], Low[j2]);
             ObjectSet("Eclipset"+DoubleToStr(j),OBJPROP_COLOR,clrNavy);
             ObjectSet("Eclipset"+DoubleToStr(j),OBJPROP_BACK,0);
             ObjectSet("Eclipset"+DoubleToStr(j),OBJPROP_WIDTH,1);
             ObjectSet("Eclipset"+DoubleToStr(j),OBJPROP_STYLE,1);
        
            ObjectCreate("Eclipse3_3ffx",OBJ_TEXT, 0, Time[j2-3], Low[j2]-400*Point);
            ObjectSetText("Eclipse3_3ffx", " S1:"+DoubleToStr(NormalizeDouble(Low[j2]-410*Point,4),4), 17, "Impact", clrWhite);
             ObjectCreate("Eclipse3_3ffy",OBJ_TEXT, 0, Time[j2-3], Low[j2]-400*Point);
            ObjectSetText("Eclipse3_3ffy", "S1:"+DoubleToStr(NormalizeDouble(Low[j2]-410*Point,4),4), 17, "Impact", clrBlue);
            
            
            
              ObjectCreate("Eclipse33_3ffx",OBJ_TEXT, 0, Time[j2-3], Low[j2]-ATRA*0.43);
            ObjectSetText("Eclipse33_3ffx", " S2:"+DoubleToStr(NormalizeDouble(Low[j2]-ATRA*0.43,4),4), 17, "Impact", clrWhite);
             ObjectCreate("Eclipse33_3ffy",OBJ_TEXT, 0, Time[j2-3], Low[j2]-ATRA*0.43);
            ObjectSetText("Eclipse33_3ffy", "S2:"+DoubleToStr(NormalizeDouble(Low[j2]-ATRA*0.43,4),4), 17, "Impact", clrBlue);
           
           }
           
                 }             
     

 i2=1;
   while (i2<500){
      i=i2+3;
      if (iFractals(Symbol(),0,MODE_UPPER,i2))     
      while (i<i2+16 ){
            if ( RSI2[i2]>RSI2[i] && iFractals(Symbol(),0,MODE_UPPER,i) && High[i2]<=High[i]-10*Point ) break;
         i++;}
      if (iFractals(Symbol(),0,MODE_UPPER,i)  && iFractals(Symbol(),0,MODE_UPPER,i2) && RSI2[i2]>RSI2[i] && High[i2]<=High[i]-10*Point) break;
               i2++;}  

 

///first upper continuation divergence    
      if (Period()==60 && plot_r1_s1){       
             if (i2>2) {
             ObjectCreate("Eclipset"+DoubleToStr(i), OBJ_TRIANGLE, 0, Time[i2-3],  High[i2]-90*Point, Time[i2-3], High[i2]+420*Point, Time[i2], High[i2]);
             ObjectSet("Eclipset"+DoubleToStr(i),OBJPROP_COLOR,clrNavy);
             ObjectSet("Eclipset"+DoubleToStr(i),OBJPROP_BACK,0);
             ObjectSet("Eclipset"+DoubleToStr(i),OBJPROP_WIDTH,1);
             ObjectSet("Eclipset"+DoubleToStr(i),OBJPROP_STYLE,1);
        
            ObjectCreate("Eclipse3_1ffx",OBJ_TEXT, 0, Time[i2-3], High[i2]+450*Point);
            ObjectSetText("Eclipse3_1ffx", " R1:"+DoubleToStr(NormalizeDouble(High[i2]+410*Point,4),4), 17, "Impact", clrWhite);
             ObjectCreate("Eclipse3_1ffy",OBJ_TEXT, 0, Time[i2-3], High[i2]+450*Point);
            ObjectSetText("Eclipse3_1ffy", "R1:"+DoubleToStr(NormalizeDouble(High[i2]+410*Point,4),4), 17, "Impact", clrBlue);
           
           
            ObjectCreate("Eclipse33_1ffx",OBJ_TEXT, 0, Time[i2-3], High[i2]+ATRA*0.43+40*Point);
            ObjectSetText("Eclipse33_1ffx", " R2:"+DoubleToStr(NormalizeDouble(High[i2]+ATRA*0.43,4),4), 17, "Impact", clrWhite);
             ObjectCreate("Eclipse33_1ffy",OBJ_TEXT, 0, Time[i2-3], High[i2]+ATRA*0.43+40*Point);
            ObjectSetText("Eclipse33_1ffy", "R2:"+DoubleToStr(NormalizeDouble(High[i2]+ATRA*0.43,4),4), 17, "Impact", clrBlue);
           
           }   
               
          }   
 
deletetxt1("BverD");

if (Close[0]>weight+960*Point || Close[0]<weight-960*Point) 
ObjectCreate("BverD",OBJ_LABEL,indicator_window, 0,0);
ObjectSet("BverD",OBJPROP_CORNER,2);
    ObjectSet("BverD",OBJPROP_XDISTANCE,20);
  ObjectSet("BverD",OBJPROP_YDISTANCE,27);
ObjectSetText("BverD","Parabolic Market?",40,"Impact",DeepPink);



 
 ///parabolic rectangles
      ObjectCreate("Dinner", OBJ_RECTANGLE, 0,  Time[1], weight+960*Point, Time[5], weight+4960*Point);
      ObjectSetInteger(0,"Dinner",OBJPROP_COLOR,clrChartreuse);
      ObjectSet("Dinner",OBJPROP_BACK,1);
      ObjectSet("Dinner",OBJPROP_WIDTH,5);   
      ObjectCreate("Dinner_25", OBJ_TEXT, 0, Time[0], weight+960*Point+80*Point); 
      ObjectSetText("Dinner_25", "                              BRK: "+DoubleToStr(NormalizeDouble(weight+960*Point,4),4), 14, "Arial Black", Green);

 
      ObjectCreate("Dinners", OBJ_RECTANGLE, 0,  Time[1], weight-960*Point, Time[5], weight-4960*Point);
      ObjectSetInteger(0,"Dinners",OBJPROP_COLOR,clrRed);
      ObjectSet("Dinners",OBJPROP_BACK,1);
      ObjectSet("Dinners",OBJPROP_WIDTH,5);   
 
     ObjectCreate("Dinner_26", OBJ_TEXT, 0, Time[0], weight-960*Point+30*Point); 
      ObjectSetText("Dinner_26", "                              BRK: "+DoubleToStr(NormalizeDouble(weight-960*Point,4),4), 14, "Arial Black", Red);

   
   return(0);
}


 
double ChoppinessIndex(int period, int bar)
  {
    double Low0 = 0, High0 = 0, Close1 = 0;
    double TrueRangeLow = 0, TrueRangeHigh = 0, TrueRangeSum = 0, Input = 0;
    double PeriodTrueRangeLow = 999999999, PeriodTrueRangeHigh = 0, PeriodTrueRange = 0;

    for(int k=bar; k<bar+period; k++)
    {
      Low0   = iLow(NULL,15,k);
      High0  = iHigh(NULL,15,k);
      Close1 = iClose(NULL,15,k+1);

      if (Low0<Close1)  TrueRangeLow  = Low0;  else TrueRangeLow  = Close1;
      if (High0>Close1) TrueRangeHigh = High0; else TrueRangeHigh = Close1;
      
      if (TrueRangeLow <PeriodTrueRangeLow)  PeriodTrueRangeLow  = TrueRangeLow;  // find true low of period
      if (TrueRangeHigh>PeriodTrueRangeHigh) PeriodTrueRangeHigh = TrueRangeHigh; // find true high of period

      TrueRangeSum += TrueRangeHigh;
      TrueRangeSum -= TrueRangeLow;
    }

    PeriodTrueRange = PeriodTrueRangeHigh - PeriodTrueRangeLow;
    if (PeriodTrueRange==0) PeriodTrueRange = MathPow(10, -12); // avoid possibility of division by zero
    Input = TrueRangeSum / PeriodTrueRange;
    return ((logN(Input, 10, MathPow(10, -12)) / logN(period, 10, MathPow(10, -12))) * 100);
  }
  

double logN(double x, double base, double epsilon)
  {
    double integer = 0.0;
    if ((x < 1) || (base < 1)) return(0);

    while (x < 1)
    {
      integer -= 1;
      x *= base;
    }
  
    while (x >= base)
    {
      integer += 1;
      x /= base;
    }
  
    double partial = 0.5;
    x *= x;
    double decimal = 0.0;

    while (partial > epsilon)
    {
      if (x >= base)
      {
        decimal += partial;
        x = x / base;
      }
      partial *= 0.5;
      x *= x;
    }
    
    return (integer + decimal);
  } 


double StdDev(int shift, int samples)
  {
  double x0=0, x1=0, x2=0;
  for (int m=0; m<samples; m++)
    {
    x0 = ExtMapBuffer[m+shift];
    x1 += x0;
    x2 += MathPow(x0,2);
    }
  return(MathSqrt((x2-(x1*x1/samples))/(samples-1))); // minimum samples is 2, enforced in the init section
}

    void deletetxt1(string text){
   for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--){
      string   on = ObjectName(iObj);
      if(StringFind(on, text) == 0)  ObjectDelete(on);
}  }