What To Know

I have given this lesson many times, the bumper line is a 100-pip displacement with a 20x 4H delay

 if (High[i+20]>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i+21))) upperbumper[i]=High[i+20]+1000*Point;
    if (Low[i+20]<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i+21))) lowerbumper[i]=Low[i+20]-1000*Point;

The head and the right shoulder tend to have this relationship on EUR/USD. I cannot say anything similar about any other instrument.

Now take a look at where we are, that teal trendline is the very defining low of this current uptrend, I left the connection points lit, so you can see where it started.

Pay attention to how meager the bounce has been.

What are they selling and what are they buying.

I would say that in the last 72 hours, they typically sold after the 3rd hourly close above the E-44 and bought after a red volume print, mostly the undercut.

Now, triangular bells / fractal evaluation.

A gray triangle warns that bull aggression should be measured next. The undercut would likely be 3-30 pips lower. If they bought 3 pips out, they are very aggressive; if they bought 30 pips lower, they are pretty relaxed.

The current squeeze would most likely result in a volatility breakout. The rectangular strips show the numbers where the break could occur, depending on the manner of the approach (outside an expanding BB30 will do), and then you should be targeting the W3M numbers.

These numbers get adjusted when the consolidation mean gets re-adjusted. Do you have any clue about the breakout numbers for any other instrument? I don’t. It took me 12 years to figure these out.

Keep Out, Lock Out

The one example that I had until today for a peak/low coinciding with a stochastic bar print (momentum present) was this:

Note that the market speed print (distance achieved outside the 30 BB) did not coincide with the actual low print. The thin magenta line was the 3-hour span that made a support box for the price in the future, insisting on going lower.

This raises the possibility of a legitimate high made today.

The momentum high and the separation high here are also separated, and there is still momentum showing at the peak, yet it is a tired move for an extra 6 pips thanks to inertia.

I believe that the new magenta box is a sell and may be a sell more than once.

What is important in terms of a swing high getting confirmed in is that the price would close 91+ pips below the 1.1572 high for the week.

Here

…is what I think will happen next.

I think a divergent leg up is missing (arrow).

Divergent in terms of the distance achieved beyond the upper 30BB. Since we are talking 20 pips or so (the scale is set back by 20 pips inside the BB) it would have to be multiple pushes up or a motion that starts the expansion gradually first.

Although after 120 hours of rest, the 1.1473 is no longer safe, I do not think this would get there. The game would start at 1.1429 and could get within 10 pips of the break level, so 1.1457. Can’t narrow it further. That high should be the rest before returning below the daily E-9.

The scissor between the 30-min E-414L and the S-712 is currently 91 pips. I have not seen a larger number. It would be merely impossible to cross. A major consolidation would be necessary below the E-9 before being able to cross that.

I am on the side of Brent Johnson, thinking that the Dollar would make a new higher high next. I think the 1.30-1.40 Euro calls are utter rubbish.

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);
}  }  

Sequence

When you get a momentum loss (CAT EXIT) combined with a counter-directional move of strength (thick magenta diagonal), the next call point is the 30-sample BB plus 5 pips.

From there, there are different paths to take. My guess is a back test of the 1.1150-1.1130 zone. This would also coincide with the 120 BB (blue line) top. A leg up is a good likelihood.

///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);
  }  
}


Usually, a disco track / EDM becomes popular. This time, they started listening to an Oasis parody.

Parabolic Features

The Clutch

This is where they put the gear in parabolic.

/// 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+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);                  
   }

The exit needs to meet 2 criteria: the move has to end in a capitulation that bounces back 100+ pips within 2 hours, and the momentum has to be gone = absence of a stochastic bar.

A couple of things I did not know the right answer to until today:

The flick flack around the BB is not a prerequisite; a rat poison sequence followed by a clutch is enough. However, I think you want to see the clutch pressed far enough from the consolidation weight i.e., past the “180 break” line. This means 96 pips.

As long as there is momentum still, further capituation moves can & will follow.

Now, let’s talk about the other catastrophic feature, the CAT HOT V. This is a fractal that is preceded by stochastic bar prints.

The take back of the high/low is a continuation entry, although when things aren’t hopping, price may need to return twice before the ball gets rolling again.

The V works wonders during a thrust/capitulation move.

 ///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);
 }

Now, check out what happens when a capitulation is qualified & sticks.

Within 9 hours, a consolidation takes place, and the E-16 gets touched. Since during the parabolic move, full consolidation does not

There may or may not be an echo move triggered here. Obviously, the capitulation / catastrophic terminal isn’t gonna be reached, but the price could come within 10 pips of it.

After the E-16 affair and/or the lastful reach, I would say the next call point would exceed the 30BB on the opposite end by 10 pips.

I liked today’s price action as well as the new lessons I was taught.

Live To Sell

Pro volume arrived.

The arrows are new plots, candles closing back 3/5th and 2/5th. Yet another bounce off of the green support (at 1/3 of the hourly candle).

///reversal wick - upside

       if (High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && (High[i]-Low[i])>180*Point && Close[i]<High[i]-(High[i]-Low[i])/5*3 && Open[i]<High[i]-(High[i]-Low[i])/3
       && High[i]>High[i+1]
       ){
      ObjectCreate("Goal"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], High[i]-(High[i]-Low[i])/3+30*Point); 
        ObjectSetText("Goal"+IntegerToString(i), CharToStr(220), 38, "Wingdings", Red); 
  }    
  
  
  ///reversal wick - downside
         if (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i) 
         && Low[i]<Low[i+1]
         //&& (High[i]-Low[i])>140*Point
          && Close[i]>Low[i]+(High[i]-Low[i])/5*3 && Open[i]>Low[i]+(High[i]-Low[i])/3){
      ObjectCreate("Goal"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], Low[i]+(High[i]-Low[i])/3+30*Point); 
        ObjectSetText("Goal"+IntegerToString(i), CharToStr(220), 38, "Wingdings", Green); 
  }   
  
   ///reversal wick - downside, between 2 candles
  if (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i) 
         && Low[i]<Low[i+1]
         && Close[i]>Open[i]
         //&& (High[i]-Low[i])>140*Point
          && Close[i]>Low[i]+(High[i+1]-Low[i])/5*2 
          //&& Open[i+1]>Low[i+1]+(High[i]-Low[i])/3
          ){
      ObjectCreate("Goal"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], Low[i]+(High[i+1]-Low[i])/3+30*Point); 
        ObjectSetText("Goal"+IntegerToString(i), CharToStr(220), 38, "Wingdings", Green); 
  }   

Due to the increased volatility, I trade on a quarter lot basis and try not to hold more than 2 naked lots for a longer period.

I am constantly taking profits to boost the equity bottom line.

This is not the only way, but it is my way. I don’t aim for home runs.

Yesterday, I made $1214.58; today, I’m at $996.97, so that’s 2.2k I did not have on Friday. I had 70-80 closed-out trades per day. Started with full hedge, aiming to close with a full hedge. In terms of money, what I am doing can be done with an 8-9k account.

If you want to know, my biggest daily Forex gain was 27k, and the best month brought 87k.

Parabolic Recap

So, the primary exit was about the pro volume candle’s high, and once this condition was met, the secondary exit at the 120-sample BB. Both highlighted with an orange marker.

Now, let’s figure out some filters for the parabolic move in real time.

///parabolic break up
      if ((High[i+3]>High[i+4] || High[i+4]>High[i+5]) 
      && Close[i+3]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+3) 
      && High[i+1]-Low[i+1]<900*Point
      && (High[i+2]-Low[i+2]>400*Point || (Close[i+4]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+4) && Close[i+5]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+5)))
      && High[i+2]<High[i+3] && Close[i+2]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+2)
      && Close[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1) && High[i+1]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,4,i+1))
      && High[i+1]>iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)
      ) 
            
      {
          ObjectCreate("Bitera"+IntegerToString(i), OBJ_TEXT, 0, Time[i+12], High[i+1]+50*Point); 
            ObjectSetText("Bitera"+IntegerToString(i), "PARABOLIC MOVE!!! "+DoubleToStr(NormalizeDouble(Close[i+1],4),4) , 21, "Impact", Navy);  
      }
      
      ///parabolic break down
            if ((Low[i+3]<Low[i+4] || Low[i+4]<Low[i+5]) 
      && Close[i+3]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+3) 
      && High[i+1]-Low[i+1]<900*Point
      && (High[i+3]-Low[i+3]>400*Point || (Close[i+4]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+4) && Close[i+5]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+5)))
      && Low[i+2]>Low[i+3] && Close[i+2]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+2)
      && Close[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1)+20*Point 
      && Low[i+1]<=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,i+1))+20*Point
      && Low[i+1]<iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,i+1)
      ) 
      {
          ObjectCreate("Bitera"+IntegerToString(i), OBJ_TEXT, 0, Time[i+12], Low[i+1]-30*Point); 
            ObjectSetText("Bitera"+IntegerToString(i), "PARABOLIC MOVE!!! "+DoubleToStr(NormalizeDouble(Close[i+1],4),4) , 21, "Impact", Navy);  
      }

One common denominator is that things can go awry beyond the 120-sample BB. The exit condition would be an FFF++ distance (end of the Pendulum) unless the price is already outside of it. The first example was something that went outside and never cared to consolidate, so I had to find usable conditions with an unknown playfield.

Let’s write an overhedger that would put you in a 20% extra directional holding even if you are asleep.

// Parabolic Overhedger by Macdulio

#include <stdlib.mqh>
extern double Equity = 400;
extern int magic_number = 98;
extern int magic_number2 = 99;
extern double Ratio = .6;
extern double overhedge = 120;
extern double MarginCallPercentage = 100;
extern double FSize=32;
#property copyright "by Macdulio in 2025" 
#property link      "https://forexfore.blog" 
#property description "Parabolic Overhedger"  

int profits;

  double nakedshorts[];
  double nakedlongs[];
  
  
  double open_price;
  double stop_loss_price;
  double take_profit_price;
  
  double open_price2;
  double stop_loss_price2;
  double take_profit_price2;
  

 double OrderOpenPrice;
 double OrderProfit;
  string symbol = Symbol();   
int init() {
   return(0);
}

int deinit() {
  return(0);
}

int start() {

  
int i, counter;
int counted_bars=IndicatorCounted();
int longcount, shortcount;
double nlongs;
double nshorts;
double longaveragebuffer;
double shortaveragebuffer;
int order_type;
  
profits = 0;
 int hstTotal=OrdersHistoryTotal();

 counter = 0;

 // Print("Ratio = ", Ratio);

 for(i=OrdersTotal()-1; i>=0 ; i--)
 {   
   
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
        { 
           Print("Access to orders list failed with error (",GetLastError(),")");
           break;
        }
             if (OrderType() == OP_BUY) 
             {
               nlongs = nlongs+OrderLots();
               longcount = longcount+1;
               longaveragebuffer = longaveragebuffer+(OrderOpenPrice()*OrderLots()); 
                  
             }  
               
             if (OrderType() == OP_SELL )
             {
               nshorts = nshorts+OrderLots(); 
               shortcount = shortcount+1;         
               shortaveragebuffer = shortaveragebuffer+(OrderOpenPrice()*OrderLots()); 
             }
         }
   
   if (nlongs!=nshorts){
   
          

  // Parabolic break up OverHedge for shorts
  if (nlongs<nshorts && (High[3]>High[4] || High[4]>High[5]) 
      && Close[3]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,3) 
      && High[1]-Low[1]<900*Point
      && (High[2]-Low[2]>400*Point || (Close[4]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,4) && Close[5]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,5)))
      && High[2]<High[3] && Close[2]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,2)
      && Close[1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,1) && High[1]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,4,1))
      && High[1]>iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,1)
      ) {
  
    RemoveStopsandTargets();
    open_price2 = NormalizeDouble(Ask, Digits);
    stop_loss_price2 = NormalizeDouble(0.00,Digits);
    take_profit_price2 = NormalizeDouble(0,Digits);

 for (i = OrdersTotal() - 1; i >= 0; i--)

      if (OrderSelect(i, SELECT_BY_POS))
        if (OrderMagicNumber() == magic_number2) {
          order_type = OrderType();
          if (order_type == ORDER_TYPE_BUY) {
            if ((NormalizeDouble(OrderOpenPrice(), Digits) != open_price2) || (NormalizeDouble(OrderStopLoss(), Digits) != stop_loss_price2) || (NormalizeDouble(OrderTakeProfit(), Digits) != take_profit_price2)) {
              if (!OrderModify(OrderTicket(), open_price2, stop_loss_price2, take_profit_price2, OrderExpiration()))
                Print("Error: ", ErrorDescription(_LastError));
                
            }
            break;
          }
          else if (order_type == ORDER_TYPE_BUY)
            break;
        }
    if (i < 0)
      if (OrderSend(symbol, OP_BUY,  NormalizeDouble((nshorts-nlongs)*overhedge/100,2), open_price2, 3, stop_loss_price2, take_profit_price2, magic_number2+" EQUITY HEDGER BUY 0/0",  magic_number2) < 0)
        
               Print("Error: ", ErrorDescription(_LastError));
  }
  else
    for (i = OrdersTotal() - 1; i >= 0; i--)

      if (OrderSelect(i, SELECT_BY_POS))
        if (OrderMagicNumber() == magic_number2 )
          if (OrderType() == ORDER_TYPE_BUY_STOP)
            if (!OrderDelete(OrderTicket()))
              Print("Error: ", ErrorDescription(_LastError));              
              
 
              
              
              
              
// Parabolic break down OverHedge For Longs
 if (nshorts<nlongs && (Low[3]<Low[4] || Low[4]<Low[5]) 
      && Close[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,3) 
      && High[1]-Low[1]<900*Point
      && (High[3]-Low[3]>400*Point || (Close[4]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,4) && Close[5]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,5)))
      && Low[i]>Low[3] && Close[2]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,2)
      && Close[1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,1)+20*Point 
      && Low[1]<=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,1))+20*Point
      && Low[1]<iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,1))
      {
    RemoveStopsandTargets();
    open_price2 = NormalizeDouble(Bid, Digits);
    stop_loss_price2 = NormalizeDouble(0,Digits);
    take_profit_price2 = NormalizeDouble(0,Digits);
    for (i = OrdersTotal() - 1; i >= 0; i--)
      if (OrderSelect(i, SELECT_BY_POS))
        if (OrderMagicNumber() == magic_number2) {
          order_type = OrderType();
          if (order_type == ORDER_TYPE_SELL) {
            if ((NormalizeDouble(OrderOpenPrice(), Digits) != open_price2) || (NormalizeDouble(OrderStopLoss(), Digits) != stop_loss_price2) || (NormalizeDouble(OrderTakeProfit(), Digits) != take_profit_price2)) {
              if (!OrderModify(OrderTicket(), open_price2, stop_loss_price2, take_profit_price2, OrderExpiration()))
                Print("Error: ", ErrorDescription(_LastError));
            }
            break;
          }
                    else if (order_type == ORDER_TYPE_SELL)
            break;
        }
    if (i < 0)
      if (OrderSend(symbol, OP_SELL, NormalizeDouble((nlongs-nshorts)*overhedge/100,2), open_price2, 3, stop_loss_price2, take_profit_price2, magic_number2+" EQUITY HEDGER SELL 0/0", magic_number2) < 0)
        Print("Error: ", ErrorDescription(_LastError));
  }
  else
    for (i = OrdersTotal() - 1; i >= 0; i--)
      if (OrderSelect(i, SELECT_BY_POS))
        if (OrderMagicNumber() == magic_number2)
          if (OrderType() == ORDER_TYPE_SELL_STOP)
            if (!OrderDelete(OrderTicket()))
              Print("Error: ", ErrorDescription(_LastError));              
 
 

        
  return(0);
}
}

double RemoveStopsandTargets()
{
   int i;
   for (i = OrdersTotal() - 1; i >= 0; i--){
   if( OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) 
    if( OrderType()==OP_BUYSTOP && MathAbs(OrderOpenPrice()-Ask)<.003) 
       OrderDelete( OrderTicket() );
       else if( OrderType()==OP_SELLSTOP && MathAbs(OrderOpenPrice()-Bid)<.003) 
                 OrderDelete(OrderTicket());}
                 
 
 for (i = OrdersTotal() - 1; i >= 0; i--){
  
   if( OrderSelect(i,SELECT_BY_POS)){

  

          if (OrderType() == OP_SELL 
          //&& OrderMagicNumber()!=magic_number3
          ){
              if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(0,4),  NormalizeDouble(0,4), OrderExpiration()))
                Print("Error: ", ErrorDescription(_LastError));
           }
   
     if (OrderType() == OP_BUY 
     //&& OrderMagicNumber()!=magic_number3
     ) { 
                   
              if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(0,4),  NormalizeDouble(0,4), OrderExpiration()))
                Print("Error: ", ErrorDescription(_LastError));
          }
     }     
   }
 return(0);
 
}

I am baffled by people who think they can trade everything. I am barely starting to develope some understanding for one single instrument’s behavior.

Market Types

This front part is my first thoughts about the differences between the parabolic and anabolic markets, how to identify them, and what exits to look for.

The market type is determined by the initial speed burst (intake) and the presence or lack of a follow-up enthusiasm

The parabolic market is all about high volume dumps & double pumps
Particularly interesting are the pro-candles outside the BB
The primary exit is anywhere beyond a pro volume with a counter directional color
The secondary exit is the 120BB
This market is prone to cause capitulation(s)

The anabolic market is about divergences & taper
A slow divergence to match and a quick taper for an extra 30 pips

You want to see the time gap between the switching off market speed prints, 10 hours at least between 25+ reads. An opening print is qualified with a 25+ read (15+ pips beyond the 30BB HL2).

This is a serious acceleration to the downside, which is at 51 already.

Achilles Dent: Radioactivity (C-boyed)

El Capitan

The Four Tops (Outside 3BBs Fractal) and the Loco In Acapulco (professionals dumping longs on that doji).

Now, watch my hand because I’m cheating. A capitulation comes with a major reversal, typically a 100-pip bounce. The driven thrusts can build on each other; see how the second one is outside the 30-BB from the get-go. I would target the lower BB with the shorts since the second thrust brought on a reversal.

#property copyright "Copyright © 2025, Macdulio" 
#property link      "https://forexfore.blog" 
#property description "V1.0"
#property description "Market Speed"


//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1  clrDarkGreen
#property indicator_color3  clrMagenta
#property indicator_color2  clrCrimson
#property indicator_level1 10
#property indicator_level2 20
#property indicator_level3 30
#property indicator_level4 40
#property indicator_level5 50
#property indicator_level6 60
#property indicator_levelcolor clrBlue
#property indicator_levelstyle STYLE_DOT

double E44[], ExtMovingBuffer[];
double ExtLowerBuffer[];
extern double valuemonitor = 24;
extern int lookback = 800;
extern int indicator_window = 3;
extern int sample = 200;
extern double FSize=32;
double upper[], middle[], lower[];
double avg;
double FMax = FSize*6/5;
double iHi4[];
double iLo4[];    
  string symbol = Symbol();  
double ExtATRBuffer[],ExtATRBuffer2[],ExtATRBuffer3[],ExtATRBuffer4[],ExtATRBuffer5[],stoch60[];
double corr[],corr2[], RSI2[], squeeze[];

int init(){
  
   SetIndexBuffer(0,ExtATRBuffer);   
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,4,indicator_color1);
   SetIndexBuffer(1,ExtATRBuffer2);   
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,4,indicator_color2);
   SetIndexBuffer(2,ExtATRBuffer3);   
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,4,indicator_color3);


   return(0);
}

//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
int start(){
  
  ArrayResize(ExtATRBuffer, Bars); 
  ArrayInitialize(ExtATRBuffer, 0);   
    ArrayResize(ExtATRBuffer2, Bars); 
  ArrayInitialize(ExtATRBuffer2, 0);   
      ArrayResize(ExtATRBuffer3, Bars); 
  ArrayInitialize(ExtATRBuffer3, EMPTY_VALUE);  
      ArrayResize(ExtATRBuffer4, Bars); 
  ArrayInitialize(ExtATRBuffer4, EMPTY_VALUE);  
     ArrayResize(ExtATRBuffer5, Bars); 
  ArrayInitialize(ExtATRBuffer5, EMPTY_VALUE);   
    ArrayResize(ExtMovingBuffer, Bars);
  ArrayInitialize(ExtMovingBuffer,0); 
       ArrayResize(ExtLowerBuffer, Bars);
  ArrayInitialize(ExtLowerBuffer,0); 
    ArrayResize(E44, Bars);
  ArrayInitialize(E44,EMPTY_VALUE);  
  ArrayResize(iHi4, Bars); 
  ArrayInitialize(iHi4, EMPTY_VALUE);   
  ArrayResize(iLo4, Bars); 
  ArrayInitialize(iLo4, EMPTY_VALUE);   
     ArrayResize(stoch60, Bars);   
 ArrayInitialize(stoch60,  EMPTY_VALUE);
  ArrayResize(RSI2, Bars);   
 ArrayInitialize(RSI2,  EMPTY_VALUE);
   ArrayResize(corr, Bars);   
 ArrayInitialize(corr,  EMPTY_VALUE);  
    ArrayResize(corr2, Bars);   
 ArrayInitialize(corr2,  EMPTY_VALUE);  
    ArrayResize(middle, Bars);   
 ArrayInitialize(middle,  EMPTY_VALUE);  
   ArrayResize(squeeze, Bars);   
 ArrayInitialize(squeeze,  0); 
  ArrayResize(upper, Bars);   
 ArrayInitialize(upper,  EMPTY_VALUE);  
 ArrayResize(lower, Bars);   
 ArrayInitialize(lower,  EMPTY_VALUE);  
    
   int i,j;
double std;
for (i=0; i<lookback; i++){  
   E44[i]=iMA(symbol,0,44,0,MODE_EMA, PRICE_MEDIAN,i);
      for (j=i; j<i+20; j++) 
      ExtMovingBuffer[i]=ExtMovingBuffer[i]+E44[j];
       ExtMovingBuffer[i]=ExtMovingBuffer[i]/20;
}      

deletetxt1("God");
 
   for (i=lookback-1; i>=0; i--)
   {  
       std = iStdDevOnArray(ExtMovingBuffer,0,10,0,0,i);                 
       ExtLowerBuffer[i]=ExtMovingBuffer[i]-std;
}

  for(i=Bars-100; i>=0; i--){ 
   
     if (Period()==240)   iHi4[i]=iMA(NULL,0,52,0,MODE_EMA, PRICE_HIGH,i);
     else if (Period()==30) iHi4[i]=iMA(NULL,0,414,0,MODE_EMA, PRICE_HIGH,i);
     else if (Period()==60) iHi4[i]=iMA(NULL,0,207,0,MODE_EMA, PRICE_HIGH,i);
     if (Period()==240)  iLo4[i]=iMA(NULL,0,52,0,MODE_EMA, PRICE_LOW,i);
     else if (Period()==30) iLo4[i]=iMA(NULL,0,414,0,MODE_EMA, PRICE_LOW,i);
     else if (Period()==60) iLo4[i]=iMA(NULL,0,207,0,MODE_EMA, PRICE_LOW,i);
      stoch60[i]=iStochastic(symbol,60,60,3,3,MODE_SMA,0,MODE_SIGNAL,i);
      RSI2[i]=iRSI(symbol,0,2,PRICE_MEDIAN,i);
}

deletetxt1("Pepper");
deletetxt1("Panace");
deletetxt1("PLOT");
deletetxt1("LINE");

for(i=lookback; i>=0; i--){ 
      middle[i] = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_TYPICAL, i);
      avg  = findAvg(20, i);
      upper[i] = middle[i] + avg;
      lower[i] = middle[i] - avg;
  
 if (High[i]>(iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)-50*Point)) {ExtATRBuffer[i]=(High[i]-iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i))*10000+10;
   if (ExtATRBuffer[i]>valuemonitor) ExtATRBuffer3[i]=ExtATRBuffer[i];
 }
 
 if (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)+50*Point) {ExtATRBuffer2[i]=(iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)-Low[i])*10000+10;
   if (ExtATRBuffer2[i]>valuemonitor) ExtATRBuffer3[i]=ExtATRBuffer2[i];
 }   
}


deletetxt1("AveriD");
deletetxt1("AverD");

int twodigits=0;

if (ExtATRBuffer[0]!=0) twodigits = NormalizeDouble((High[0]-iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,0))*10000+10,0);

if (ExtATRBuffer2[0]!=0) twodigits  = NormalizeDouble((iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,0)-Low[0])*10000+10,0);


if (ExtATRBuffer[0]!=EMPTY_VALUE && twodigits>19) {
ObjectCreate("AverD",OBJ_LABEL,indicator_window, 0,0);
ObjectSet("AverD",OBJPROP_CORNER,2);
    ObjectSet("AverD",OBJPROP_XDISTANCE,20);
  ObjectSet("AverD",OBJPROP_YDISTANCE,27);
ObjectSetText("AverD","Abnormal",40,"Impact",DeepPink);
}

if (ExtATRBuffer2[0]!=EMPTY_VALUE && twodigits>15) {
ObjectCreate("AverD",OBJ_LABEL,indicator_window, 0,0);
ObjectSet("AverD",OBJPROP_CORNER,2);
    ObjectSet("AverD",OBJPROP_XDISTANCE,20);
  ObjectSet("AverD",OBJPROP_YDISTANCE,27);
ObjectSetText("AverD","Abnormal",40,"Impact",DeepPink);
}




int tens = round(twodigits/10);

int ones = twodigits-tens*10; 

string stens, sones;



switch(tens)
{
case  1:   stens=CharToStr(140);
        break;
case  2:   stens=CharToStr(141);
        break;
case  3:   stens=CharToStr(142);
        break;        
case  4:   stens=CharToStr(143);
        break;
case  5:   stens=CharToStr(144);
        break;
case  6:   stens=CharToStr(145);
        break;        
case  7:   stens=CharToStr(146);
        break;                
case  8:   stens=CharToStr(147);
        break;                        
case  9:   stens=CharToStr(148);
        break;                      
  default: stens=CharToStr(139);
      break;
  }
  
//deletetxt1("AverD");

switch(ones)
{
case  1:   sones=CharToStr(140);
        break;
case  2:   sones=CharToStr(141);
        break;
case  3:   sones=CharToStr(142);
        break;        
case  4:   sones=CharToStr(143);
        break;
case  5:   sones=CharToStr(144);
        break;
case  6:   sones=CharToStr(145);
        break;        
case  7:   sones=CharToStr(146);
        break;                
case  8:   sones=CharToStr(147);
        break;                        
case  9:   sones=CharToStr(148);
        break;                      
  default: sones=CharToStr(139);
      break;
  }

 
string jointstring=stens+sones;

ObjectCreate("AveriD",OBJ_LABEL,indicator_window, 0,0);

ObjectSet("AveriD",OBJPROP_CORNER,3);
    ObjectSet("AveriD",OBJPROP_XDISTANCE,20);
  ObjectSet("AveriD",OBJPROP_YDISTANCE,27);
  
ObjectSetText("AveriD",jointstring,40,"Wingdings",DimGray);
if (twodigits>15)  ObjectSetText("AveriD",jointstring,40,"Wingdings",Tomato);  
if (twodigits>19)  ObjectSetText("AveriD",jointstring,40,"Wingdings",DeepPink);  

 

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

   double findAvg(int period, int shift) {
      double sum=0;
      for (int x=shift;x<(shift+period);x++) {     
         sum += High[x]-Low[x];
      }
      sum = sum/period;
      return (sum);
   }