Maket Vol

Don’t ask why, but 14.5 pips is where the volatility tips the scale on the Euro (per hour), hence I made a plot for it.

 ///14.5-pip push up
 if ((Close[i+2]-Low[i+2])<140*Point && (Close[i+1]-Low[i+1])<140*Point && (Close[i]-Low[i])>145*Point && stoch60[i]>stoch60[i+1] ){
          ObjectCreate("Frogo"+IntegerToString(i), OBJ_RECTANGLE, 0,  Time[i+2], Low[i], Time[i+1], Close[i]);
          ObjectSetInteger(0,"Frogo"+IntegerToString(i),OBJPROP_COLOR,clrChartreuse);
          ObjectSet("Frogo"+IntegerToString(i),OBJPROP_BACK,0);
          ObjectSet("Frogo"+IntegerToString(i),OBJPROP_WIDTH,11);
 }
 

 ///14.5-pip push up
 if ((High[i+1]-Close[i+1])<140*Point && (High[i]-Close[i])>145*Point && stoch60[i]<stoch60[i+1]){
          ObjectCreate("Frogo"+IntegerToString(i), OBJ_RECTANGLE, 0,  Time[i+2], High[i], Time[i+1], Close[i]);
          ObjectSetInteger(0,"Frogo"+IntegerToString(i),OBJPROP_COLOR,clrTomato);
          ObjectSet("Frogo"+IntegerToString(i),OBJPROP_BACK,0);
          ObjectSet("Frogo"+IntegerToString(i),OBJPROP_WIDTH,11);
 }

I find this very useful, a minimal effort glance can provide you with a volatility V turn information, call attention to a continuation fact, and often give you the are to go long/short.


Udio was acting out and producing 80-90% junk for almost a week.

It always amazes me how different tastes the audience may have on various platforms. It’s either that or YouTube choosing between promoting or not makes or breaks anything.

Stochastic Unravelling

The question always ends up being about priorities.

What beats what then?

What is on the level?

It seems to me that the cornerstone is the severely overbought/oversold condition (60-sample stoch, 1H, last 4%).

Yes, I still have that 8-ball plot somewhere.

step #1

Write the program for the Stochastic unravelling. (Win Robbins Cup).

The severely OB/O  priority trade

(a mean reversion is likely underway upon 1, but certainly 2 gray Vax divergences)

stochastic unravelling to 13/25/momentum divg. 

<4 / >96 hourly disconnect

- from the fractal candle, the 2nd or 3rd hour's close is the entry

if there was directional excess outside the BB

or price rips beyond the 240 BB

dump the holdings on the 13th hour's close

in 13 hours #1 resistance prints after a hourly close outside 

if there was no directional access (overrun) after the numbers

- adjust the trail

- add holdings for 13 more hours at the back test kiss of hour #13

- dump on hour 25's close if it fails to get back outside the BB

- dump on a leg that comes from inside the 8 EMO and closes outside the BB after the 25th hour with the stochastic breaking into the opposite end

- if there was momentum (st. bar) AFTER 2 Fractal Prints on the inside, aim for a high volatility turn with 
an OverHedge to just outside the house (momentum divergence)

step #2

Who the hell is a rebel capitalist?


Preview for Album #88

Promoted Demoted

By calling upon Vax within the 30-minute window with a 398-sample dataset, the Fractal MFI divergence can receive an additional flag.

Looking at the Cumulative Volume Delta, you can see that Friday was a strong up day, buying from the start to the end, almost on the high.

Of course, still outside the prior volume block.

Now, my colored MFI divergence highlights are a good idea to start with, but it is tiresome going back and forth between 30-min and 1H just to get a picture of the volatility-compression readings. So, more text was my answer.

As you can see the red / bear line is over the bull line, which can be a crucial final information that tips the scale. The high of that candle is a promoted sell.

Next up, a Demoted buy.

Of course, things can get more nuanced than that.

For instance, a low volatility turn sequence plots first a “where” spike out of the 30 BB (triangular plots) then the “when” receives its plot (vertical highlights), and if the where block is unable to break through the peak of the triangle, that’s a priority turn.

As you can see, the Demoted supplementing flag was incorrect. 4 hours later, the Bears managed to overcome the Bulls. Time/sample size is just as important as the price level. No New HH.

Here’s one more example of a low-volatility turn.

No new LL.

///fractal MFI below
if (i>0  && Close[i+2]>Low[i] && Low[i+1]>Low[i] && Low[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)-20*Point && Low[i-1]>Low[i]-20*Point ){
   MFIDMEM[i]=MFI[i];
    ObjectCreate("Caligula"+IntegerToString(i),OBJ_TEXT, 3, Time[i],25);
    ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 16, "Impact", clrGray);
    if (MFIDMEM[i+1]<MFIDMEM[i] && MFI[i]<48 && MFI[i]>26 && (RSI2[i]<10 || RSI2[i]>20)) {ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 26, "Impact", clrGreen);
    ObjectCreate("Caligulas"+IntegerToString(i),OBJ_TEXT, 3, Time[i],95);
    ObjectSetText("Caligulas"+IntegerToString(i),"U-BB (S30Wide)/3BBx", 22, "Impact", clrBlue);
         if (ExtATRBuffer2[i+1]>ExtATRBuffer[i+1]) {
                 ObjectCreate("Caligulazz"+IntegerToString(i),OBJ_TEXT, 3, Time[i+8],25);
                 ObjectSetText("Caligulazz"+IntegerToString(i),"Promoted", 22, "Impact", clrMidnightBlue);
          }
          else {
                 ObjectCreate("Caligulazz"+IntegerToString(i),OBJ_TEXT, 3, Time[i+8],25);
                 ObjectSetText("Caligulazz"+IntegerToString(i),"Demoted", 22, "Impact", clrMidnightBlue);
          }
     ObjectCreate("Caligulasz"+IntegerToString(i),OBJ_TEXT, 3, Time[i],55);
    ObjectSetText("Caligulasz"+IntegerToString(i),"S4 -> E-", 22, "Impact", clrMidnightBlue);
     if (RSI2[i]<5) {ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 26, "Impact", clrAquamarine);
          if (ExtATRBuffer2[i+1]>ExtATRBuffer[i+1]) {
                 ObjectCreate("Caligulazz"+IntegerToString(i),OBJ_TEXT, 3, Time[i+8],25);
                 ObjectSetText("Caligulazz"+IntegerToString(i),"Promoted", 22, "Impact", clrMidnightBlue);
          }
          else {
                 ObjectCreate("Caligulazz"+IntegerToString(i),OBJ_TEXT, 3, Time[i+8],25);
                 ObjectSetText("Caligulazz"+IntegerToString(i),"Demoted", 22, "Impact", clrMidnightBlue);
          }
          
          
    ObjectSetText("Caligulas"+IntegerToString(i),"->3xBB,Vol,Fail/Fl-Stop", 22, "Impact", clrIndigo);
     }
    }
}

///fractal MFI above
if (i>0 && Close[i+2]<High[i] && High[i+1]<High[i] && High[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)+5*Point && High[i-1]<High[i]+20*Point){
   MFIUMEM[i]=MFI[i];
    ObjectCreate("Caligula"+IntegerToString(i),OBJ_TEXT, 3, Time[i],95);
    ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 16, "Impact", clrGray);
    if (MFI[i]>68 && MFI[i]<75 && RSI2[i]<96 ) ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 26, "Impact", clrBlue);
    if (MFIUMEM[i+1]<MFIUMEM[i] && MFI[i]>52 && MFI[i]<71 && RSI2[i]<96 ) {ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 26, "Impact", clrRed);
     if (ExtATRBuffer2[i+1]<ExtATRBuffer[i+1]) {
                 ObjectCreate("Caligulazz"+IntegerToString(i),OBJ_TEXT, 3, Time[i+8],75);
                 ObjectSetText("Caligulazz"+IntegerToString(i),"Promoted", 22, "Impact", clrMidnightBlue);
          }
          else {
                 ObjectCreate("Caligulazz"+IntegerToString(i),OBJ_TEXT, 3, Time[i+8],75);
                 ObjectSetText("Caligulazz"+IntegerToString(i),"Demoted", 22, "Impact", clrMidnightBlue);
          }
   }

If this is a low volatility turn – and I don’t think it is (- a stall), it would still have to test back into that triangle at least once. A lower low would mean a high volatility turn though.

There is a well-defined failure area between 1.1622 and 1.16, the prudent area to pick up a hedge / close shorts. The BRK level should remain untouched. If it blows past, you are in a Wave 3 down, and a new measuring leg just started printing.


After a while, it may pose a challenge to surprise yourself with what you can do in music. I am managing to do it still.


After a volatility compression anchor print, there should be a divergence, weaker compression achieved at a lower low.

4%

I’ll show you something neat. Remember the circled menu item?

Below was the inspiration for enlisting it.

This much about fractals, a 30-minute chart, and a 30-sample BB.

Next thing – 60 sample stochastic on the hourly. Highlights for the last 4-percentile.

 if (i>0  && stoch60[i]<4)
   {
       ObjectCreate("DOTS"+i,OBJ_TEXT, 1, Time[i+1],(ExtATRBuffer2[i])+25);
        ObjectSetText("DOTS"+i, DoubleToStr(NormalizeDouble(stoch60[i],1),1), 16, "Impact", clrDarkGreen);
   }  
   
  if (i>0  && stoch60[i]>96)
   {
       ObjectCreate("DOTS"+i,OBJ_TEXT, 1, Time[i+1],(ExtATRBuffer2[i])-15);
        ObjectSetText("DOTS"+i, DoubleToStr(NormalizeDouble(stoch60[i],1),1), 16, "Impact", clrCrimson);
   }  

It does not always prompt an immediate reaction, but the countermove also holds predictive value.

For instance, a shallow pullback to the E-30 is a great continuation entry.

Otherwise, I have a couple of examples with an 86-pip counter move first.

This is a tough call with the Bulls and the Bears converging, being neck & neck.

The Bull / Bear strength plotter I came up with yesterday. Not sure how it would be useful, but I felt the need for it.


if (ExtATRBuffer<30) bulls=(100-ExtATRBuffer+20)/30*25;
else if (ExtATRBuffer>=30 && ExtATRBuffer<47) bulls=(100-ExtATRBuffer+26)/17*9+25;
else if (ExtATRBuffer>=47 && ExtATRBuffer<135) bulls=(100-ExtATRBuffer+36)/88*41+25;


if (ExtATRBuffer2<30) bears=(100-ExtATRBuffer2+20)/30*25;
else if (ExtATRBuffer2>=30 && ExtATRBuffer2<47) bears=(100-ExtATRBuffer2+26)/17*9+25;
else if (ExtATRBuffer2>=47 && ExtATRBuffer2<135) bears=(100-ExtATRBuffer2+36)/88*41+25;


ObjectCreate("LEVELOPE"+29,OBJ_LABEL,3, 0,0);
  ObjectSet("LEVELOPE"+29,OBJPROP_CORNER,3);
    ObjectSet("LEVELOPE"+29,OBJPROP_XDISTANCE,0);
  ObjectSet("LEVELOPE"+29,OBJPROP_YDISTANCE,60);
  if (bulls>bears) ObjectSet("LEVELOPE"+29,OBJPROP_COLOR,clrGreen);
  else ObjectSet("LEVELOPE"+29,OBJPROP_COLOR,clrCrimson);
  if (Period()==60) ObjectSetText("LEVELOPE"+29,"  ",24,"Arial Black");
   else ObjectSetText("LEVELOPE"+29,"Bulls: "+DoubleToStr(NormalizeDouble(bulls,1),1)+"%",24,"Arial Black");

ObjectCreate("LEVELOPE"+30,OBJ_LABEL,3, 0,0);
  ObjectSet("LEVELOPE"+30,OBJPROP_CORNER,3);
    ObjectSet("LEVELOPE"+30,OBJPROP_XDISTANCE,0);
  ObjectSet("LEVELOPE"+30,OBJPROP_YDISTANCE,90);
  if (bulls>bears) ObjectSet("LEVELOPE"+30,OBJPROP_COLOR,clrGreen);
  else ObjectSet("LEVELOPE"+30,OBJPROP_COLOR,clrCrimson);
  if (Period()==60) ObjectSetText("LEVELOPE"+30,"  ",24,"Arial Black");
   else ObjectSetText("LEVELOPE"+30,"Bears: "+DoubleToStr(NormalizeDouble(bears,1),1)+"%",24,"Arial Black");

Bar The Door

The last time the Bulls were in the volatility compressor (aka Tool Shed) was Sept 9-11.

Notice that the Bears are also in the shed, and except for the last 6 hours, they were worse off, more beat down.

This time it is different.

The Bulls are in solitary confinement and are about to get it. This condition was last observed on August 28.

People are always trading the last trade. I see no bottom, I hear no bottom. The momentum has barely started coming on.


History’s worst murderers


The other thing was the deep disappointment in the YouTuber I used to have sympathy for. When he started shilling Sven’s take on the S&P – the monthly low was made on the first day of the month for many months, trying to steal credits, I had to realize that this Brian Shannon slogens boosted ego trip guy has folded under the pressure of having to show for, and all of his outrageous performance claims belong in that too good to be true bucket borrowed from the Scammer Supplies.

Zero Edge

You have seen a mean reversion from a 4x fluctuation stretch. The projection was 1.1750

The shorts and the longs converged. Both parties are outside the beating area / the tool shed.

The price has been positioned above the market profile.

The small hint here is that there is no bounce back up happening, and the volatility breakout to the downside is a short breath away, still at 1.1741.

I have thought of talking about energy principles again, just have not had the time.

With the help of the CI (12-sample), it is easy to spot if a move is discharging energy (pushing) or consolidating it (relieving).

thinking trader

As I was asked, here’s what I said before the FOMC.

Now, if only I had looked at my desktop charts in the last hour, I could have nailed the exit scale out. I did sell out 0.5 lot at 1.1913 still.

The deflector dropped to 1.1914. I would have had orders at every single pip above.

Do we have a top? You bet your sweet ass.

S4 is 16 pips below S3, which is approximately 1.1806.

1.1741 is the volatility punch bag wuthout consolidation.

Morbid MFI Overhedger

peg it to an hourly chart.

One thing should normally not happen: an upside fractal should not have a 7-sample MFI read below 54.

This places a pending order 2 pips beyond the fractal and targets the Volatility Breakout level plus 5 pips, with the missing hedge, plus 20% extra.

To test it, I run it for the last fractal without MFI. Here’s the result:

// Morbid MFI Overhedger by Macdulio for Automated Trading

#include <stdlib.mqh>
extern int percentage = 20;
extern int magic_number = 87;
extern int magic_number2 = 88;
extern int magic_number3 = 89;
extern double Ratio = 0.6;
#property copyright "by Macdulio in 2025" 
#property link      "https://forexfore.blog" 
#property description "Morbid MFI 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 RSI2[];
  double ATRAVG[]; 
 double OrderOpenPrice;
 double OrderProfit;
double ExtUpperBuffer[], mfi[];
double ExtLowerBuffer[];
double ExtUpperBuffer_[],ExtLowerBuffer_[];
double ExtUpperBuffer_d[],ExtLowerBuffer_d[];
double ExtMapBuffer[];
double ufractals[],dfractals[];
  string symbol = Symbol();   
int init() {
   return(0);
}

int deinit() {
  return(0);
}

int start() {

  ArrayResize(ATRAVG, Bars);   
ArrayInitialize(ATRAVG, 0); 
  ArrayResize(RSI2, 600);   
ArrayInitialize(RSI2, 0); 
  ArrayResize(ExtMapBuffer, Bars);
  ArrayInitialize(ExtMapBuffer,EMPTY_VALUE); 
  ArrayResize(ExtUpperBuffer, Bars);
  ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE); 
     ArrayResize(ExtLowerBuffer, Bars);
  ArrayInitialize(ExtLowerBuffer, EMPTY_VALUE); 
 ArrayResize(ExtUpperBuffer_, Bars);
  ArrayInitialize(ExtUpperBuffer_,EMPTY_VALUE); 
     ArrayResize(ExtLowerBuffer_, Bars);
  ArrayInitialize(ExtLowerBuffer_, EMPTY_VALUE);  
ArrayResize(ExtUpperBuffer_d, Bars);
  ArrayInitialize(ExtUpperBuffer_d,EMPTY_VALUE); 
     ArrayResize(ExtLowerBuffer_d, Bars);
  ArrayInitialize(ExtLowerBuffer_d, EMPTY_VALUE); 
ArrayResize(ufractals, Bars);
  ArrayInitialize(ufractals, EMPTY_VALUE); 
ArrayResize(dfractals, Bars);
  ArrayInitialize(dfractals, EMPTY_VALUE); 
ArrayResize(mfi, 600);   
ArrayInitialize(mfi, 0); 


int i, counter;
int counted_bars=IndicatorCounted();
int longcount, shortcount;
double nlongs;
double nshorts;
double longsize = 0;
double shortsize = 0;
double longaveragebuffer;
double shortaveragebuffer;
double buylevel=1000;
double sellevel=0;
double weight;
int order_type;
  
profits = 0;
 int hstTotal=OrdersHistoryTotal();

 counter = 0;
 
double    ATRA = 0;
   for (i=1; i<=3; i++){ 
     ATRA = ATRA+iATR(NULL,1440,14,i);}
   
   for (i=0; i<=160; i++){ 
     ATRAVG[i] = ATRA/3; }
    
   i=0;
   while (i<200){
      if (ChoppinessIndex(12*4,i)>53 && ChoppinessIndex(12*4,i+1)<53) break;
   i++;

  }
 
   
   if (i<200) weight=iClose(symbol,15,i);
 

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


for(i=100; i>=0; i--){
   if (iFractals(symbol,60,MODE_UPPER,i)) ufractals[i]=iHigh(symbol,60,i);
   else ufractals[i]=ufractals[i+1];
if (iFractals(symbol,60,MODE_LOWER,i)) dfractals[i]=iLow(symbol,60,i);
   else dfractals[i]=dfractals[i+1];

  RSI2[i]=iRSI(symbol,60,2,PRICE_MEDIAN,i);
    mfi[i]=iMFI(symbol,60,7,i);  
   ExtUpperBuffer[i]=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,12,i))+460*Point;
       ExtLowerBuffer[i]=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,12,i))-460*Point;
         
         if (ExtUpperBuffer[i]>ExtLowerBuffer[i]) {ExtUpperBuffer_[i]=ExtUpperBuffer[i]; ExtLowerBuffer_[i]=ExtLowerBuffer[i];
         
         ExtUpperBuffer_d[i]=ExtUpperBuffer_[i]+450*Point; ExtLowerBuffer_d[i]=ExtLowerBuffer_[i]-450*Point;
         }

} 

 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 ( Symbol()=="EURUSD" && OrderStopLoss()==0 ) {
          // Print("OderProfit: ", OrderProfit());
          
          //Print("AB:",AccountBalance()*-1*.025);
             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){
   
   
   double comparison = (AccountEquity()/AccountBalance())*100;
   
 //   Print("comparison = ", comparison);


i=1;
while (i<21){

if (iFractals(symbol,60,MODE_UPPER,i) && mfi[i]<54 && High[i]>ufractals[i+1]) break;
// && mfi[i]<54
i++;
} 
if (iFractals(symbol,60,MODE_UPPER,i) && mfi[i]<54 && High[i]>ufractals[i+1]) buylevel = High[i]+20*Point;


longsize = (nshorts-nlongs)*(100+percentage)/100;              
              

  // Overghedge for shorts
  if (nlongs<nshorts && buylevel!=1000 && i<21) {
  
  // if (comparison<Ratio) RemoveStopsandTargets();
    open_price2 = NormalizeDouble(buylevel, Digits);
    stop_loss_price2 = NormalizeDouble(0,Digits);
    take_profit_price2 = NormalizeDouble(weight+1010*Point,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_STOP) {
            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_BUYSTOP,  NormalizeDouble(longsize,2), open_price2, 3, stop_loss_price2, take_profit_price2, magic_number2+" Morbid MFI Overhedger BUY STOP",  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));              
              
 
 
i=1;
while (i<21){

if (iFractals(symbol,60,MODE_LOWER,i)  && mfi[i]>46 && Low[i]<dfractals[i+1]) break;

i++;
} 
if (iFractals(symbol,60,MODE_LOWER,i) && mfi[i]>46 && Low[i]<dfractals[i+1]) sellevel = Low[i]-20*Point;

              

shortsize = (nlongs-nshorts)*(100+percentage)/100;             
              
              
// Overhedge For Longs
 if (nshorts<nlongs && sellevel!=0 && i<21 ) {
  
 // if (comparison<Ratio) RemoveStopsandTargets();
    open_price2 = NormalizeDouble(sellevel, Digits);
    stop_loss_price2 = NormalizeDouble(0,Digits);
    take_profit_price2 = NormalizeDouble(weight-1010*Point,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_STOP) {
            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_SELLSTOP, NormalizeDouble(shortsize,2), open_price2, 3, stop_loss_price2, take_profit_price2, magic_number2+"  Morbid MFI Overhedger SELL STOP", 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());}
                 
 
 
 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
}

Here’s a gray divergence…

Backfoot Rally

So I had this idea of monitoring fractals outside the 30 BB on the 30-min, first just for a count (2 on one side would usually mean a correction ending against the real move), but there was always this idea to get the short-term MFI provide with some ideas. 7-sample on the 30 is like a 14-sample 15-min.

I went way further by associating exits to the entries, but the main thing was finding an arbitrary filter to plot the diverging number green or aquamarine. I went with RSI2 below 5.

You see a backfoot rally on the left and a right foot rally on the right.

///fractal MFI below
if (i>0  && Close[i+2]>Low[i] && Low[i+1]>Low[i] && Low[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)-20*Point && Low[i-1]>Low[i]-20*Point ){
   MFIDMEM[i]=MFI[i];
    ObjectCreate("Caligula"+IntegerToString(i),OBJ_TEXT, 3, Time[i],25);
    ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 26, "Impact", clrGray);
    if (MFIDMEM[i+1]<MFIDMEM[i] && MFI[i]<50 && MFI[i]>26 && (RSI2[i]<10 || RSI2[i]>20)) {ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 26, "Impact", clrGreen);
    ObjectCreate("Caligulas"+IntegerToString(i),OBJ_TEXT, 3, Time[i],95);
    ObjectSetText("Caligulas"+IntegerToString(i),"U-BB (S30Wide)/3BBx", 22, "Impact", clrBlue);
    
     ObjectCreate("Caligulasz"+IntegerToString(i),OBJ_TEXT, 3, Time[i],55);
    ObjectSetText("Caligulasz"+IntegerToString(i),"S4 -> E-", 22, "Impact", clrMidnightBlue);
     if (RSI2[i]<5) {ObjectSetText("Caligula"+IntegerToString(i),DoubleToStr(NormalizeDouble(MFI[i],1),1), 26, "Impact", clrAquamarine);
          
    ObjectSetText("Caligulas"+IntegerToString(i),"->MFOB/Stop", 22, "Impact", clrIndigo);
     }
    }
}

Backfoot boys

The way the back foot operates is that it tries to get the Money Flow to overbought, but has a failure point just over the S30.

They pretty much all fail, except for one in recent history.

This one made it to overbought, and the second landing on the S30 was the end of a correction.

So my plan is to check if the S30 would hold twice for a continuation entry.


Album #86 is out, 16 tracks as typical, about 1Hr as typical, a French song, an instrumental as typical, some atypical stuff, like a song in Spanish and a good measure of Communards influence.

s4

Back to the Audi business.

The S4 is 111 pips from the 200-sample hourly high.

The tool shed is the zone from the 200-sample high/low to the S4 / R4.

Who is in the toolshed (below the dark blue line) – the shorts. They are taking a beating.

The zone from the S4 to the SOB is the disadvantage block. The zone below the SOB is the maximum volatility-compression zone.

On Friday, we touched the SOB two more times after Thursday’s atrocity.

The top would be made once the S4 lets go. There could be a short here from the bottom of the disadvantage zone (SOB) to the top of it (S4).

By then, the longs would be inside the house for their turn for a beating.


Previews from Album #86