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

Not A Lot…

But this is starting to look like a big bull flag.

There’s a squeeze. Both sides are within 70 pips of the 200-sample extreme. No upper hand here. One quick stab from either side and the other one gets left behind in the shed for a beating. I decided to stop shorting for now.

The yellow trendline does not even get touched anymore.

Maybe a quick dip lower first, to the green support zone, but can’t see much reward here.

The 9-day EMA is too close for comfort as well.

The Game…

…played here is Fade or Escape.

The distance measured from the 200-hour low and the 200-hour high is plotted.

When both lines are outside the 93-pip line (purple) and they are both relatively close, the probability of a switch off becomes a possibility.

The odds favor the Fade, i.e. now that the longs have just escaped from the volaility compression zone, they are more likely to be put back into the woodshed (anywhere below the orange box).

1-3 stochastic bars are toxic. 3+ in a row is building up tolerance agaist poisioning.


Returning Home First

Once the market has made a Push and an Echo (Palm, House suggesting a return home) the minimum target would be the weekly S1 – 1.0704, before perhaps continuing with the next leg up.

The RSI2 picture (Nick Rhodes) similarly would suggest a lower low first, although this one is less optimistic and says Buy 1.0719, the back to the 20 SMA part already has happened on Thursday and Friday.

The speed taper received a quick fake out, but I do not like that the move has ended on strength. A divergence seems to be missing, a lower low fractal without a stochastic bar print.

That said, there is some chance that they buy a higher low below the E-44 (cyan) for another higher high first.

Bunch Of Things

Numero uno, I have invented a market speed indicator.

Remember when the market went berserk?

Well, the Wave 3 did not end util the initial stretch achieved was approached closely (plus the drop off of an extra 30 pips).

I use the 30BB HL2 and the numbers are pips. So, the 44 reading needed its pair at 42 to come about to show decreasing enthusiasm.

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

So now I am looking for a 29-30 print to go with the 32 on the left.

This current up move tagged the yellow trendline yet again. It was a bigger up move, because you had 3 of the outside all 3 BB fractals (ovals).

The indicator on the bottom is a hijacked Supertramp, as I am fed up with everyone else’s stupid ideas about a trending market. My filter is the E-44 HL2, the big brother of the E-16 HL2.

      if (Close[i]>iMA(symbol,0,44,0,MODE_EMA,PRICE_MEDIAN,i))  TrendDoA[i] = 1; 
            if (Close[i]<iMA(symbol,0,44,0,MODE_EMA,PRICE_MEDIAN,i))  TrendDoB[i] = 1; 

Five hours on one side and something may be up, a reversion may be afoot.

The 3rd thing is that this morning they bought the 3rd hour. See the yellow line on the close of the 3?

I have a ton more examples, and #3 has O, H, L, C readings, but the back tests seem to always immediately declare what the intentions are.


 if (High[i+1]>iMA(symbol,0,44,0,MODE_EMA,PRICE_MEDIAN,i+1) && 
    iRSI(symbol,0,2,PRICE_MEDIAN,i)<iRSI(symbol,0,2,PRICE_MEDIAN,i+1)-5 && iRSI(symbol,0,2,PRICE_MEDIAN,i+2)<iRSI(symbol,0,2,PRICE_MEDIAN,i+1)-2
      && TrendDoB[i+7] == 1 && TrendDoB[i+8] == 1 && High[i+1]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,8,i+1))
      )
   {
                 ObjectCreate("Mladen"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], High[i+1]+40*Point); 
                 ObjectSetText("Mladen"+IntegerToString(i), CharToStr(234), 42, "Webdings", clrRed);
   }

   if (Low[i+1]<iMA(symbol,0,44,0,MODE_EMA,PRICE_MEDIAN,i+1) && 
    iRSI(symbol,0,2,PRICE_MEDIAN,i)>iRSI(symbol,0,2,PRICE_MEDIAN,i+1)+5 && iRSI(symbol,0,2,PRICE_MEDIAN,i+2)>iRSI(symbol,0,2,PRICE_MEDIAN,i+1)-2
      && TrendDoA[i+7] == 1 && TrendDoA[i+8] == 1  && Low[i+1]==iLow(symbol,0,iLowest(symbol,0,MODE_LOW,8,i+1))
      )
   {
                 ObjectCreate("Mladen"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], Low[i+1]+10*Point); 
                 ObjectSetText("Mladen"+IntegerToString(i), CharToStr(234), 42, "Webdings", clrGreen);
   }