The Control Functions

There are 3 hard exits on a hourly chart.

  1. Qualified Zero displacement

A qualified zero is a >97.5 or <2.5 RSI2 print with its outside fractal 26+ pips away from the E44. I plot the qualified zeros in colors and the non-qualified ones in gray.

if (Low[i+1]+260*Point<iMA(symbol,0,44,0,MODE_EMA,PRICE_MEDIAN,i+1)) 
 ObjectSetText("Panaceadc"+DoubleToStr(i), "0", 42, "Arial Black", clrRed);
 else ObjectSetText("Panaceadc"+DoubleToStr(i), "0", 42, "Arial Black", clrDimGray);

Example of non-qualified zero followed by a qualified one.

A qualified zero print is going to be likely followed by a divergent M print, which as part of the combo I call the Mastodon and has the green / red extraction icon. The Mastodon is the second point of the M axis projected from the last Qualified Zero print. The usual displacement suspects are 7, 12.5 and 20 pips, but if none of these get a fill, take your ride from the opposite end of the Mastodon candle not to miss out.

if (zerodn[i+1] && Low[i+1]<iMA(symbol,0,44,0,MODE_EMA,PRICE_MEDIAN,i+1)-250*Point){
          ObjectCreate("ObjecSZ"+DoubleToStr(i), OBJ_TEXT, 1, Time[i+3], 49); 
          ObjectSetText("ObjecSZ"+DoubleToStr(i), "¼: "+DoubleToStr(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i+1))-70*Point,4),4) , 11, "Impact",  Navy); 
          ObjectCreate("ObjecSS"+DoubleToStr(i), OBJ_TEXT, 1, Time[i+3], 39); 
          ObjectSetText("ObjecSS"+DoubleToStr(i), "½: "+DoubleToStr(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i+1))-125*Point,4),4) , 11, "Impact",  Navy); 
          ObjectCreate("ObjecSX"+DoubleToStr(i), OBJ_TEXT, 1, Time[i+3], 29); 
          ObjectSetText("ObjecSX"+DoubleToStr(i), "¼: "+DoubleToStr(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i+1))-200*Point,4),4) , 11, "Impact",  Navy); }

It is important to know that a quick return to the E44 after a qualified print can disable it, make it void during a run with good momentum, so the 3 displacements listed should be ignored as a new Zero is going to override these.

A non qualified zero can still yield a tremor print, so it can reverse price – see the second entry on this.

2. Tremor of volatility

A volatility tremor is a preliminary signal of a bigger earthquake that would arrive with a larger landslide.

A tremor is a counter directional swing with enough volatility to make price travel 70%+ of the instrument’s fluctuation size. If this swing crosses below the E44 you get a waterfall, meaning no higher high / lower low print would happen before the landslide. The ultimate distance in this case is TBD and you should go in in the direction of the tremor at market and round to full size upon breaching the swing terminal and / or add to your position at better price levels.

if (iFractals(symbol,0,MODE_UPPER,i)){
      while (j>1 && j>i-5){
         if (Low[j-1]>Low[j] && Low[j]<Low[j+1] && High[i]-Low[j]<340*Point && High[i]-Low[j]>250*Point) break;

An example of not expecting a higher high after the tremor:

Note that the head part is pointing down.

Examples of the head expected to be a higher high & the typical travel lengths in white below.

Examples of tremors away from the E44 with 75+ pips of corrections (149 on the 2nd).

The Keltinger Chaos plots thicker flag poles for these.

3. Triple M (Image above)

A triple M is when price isn’t able to reach a Zero oversold/overbought condition, but it ends up with 3 attempt falling shy from a Zero.

The Zero plus momentum (67) continuation divergence was a soft exit and so was the back test of last week’s pivot – a different lesson.

The current, qualified zero displacement is menu item #1, the real McCoy – although it is the inside version for it did not print a new 26-sample lower low I stand corrected, this is an outside head, went 1 pip lower than the previous one.

Quick Lesson

How would you know that price is going to be going higher from this consolidation?

  1. Price found buyers in the green box (twice)
  2. Price is above last week’s pivot (magenta)
  3. The last outside M was on the down side (butterfly)
  4. Price is above the upside reversal confirmation line (yellow)
  5. The triple M attempt on the upside was not an outside triplet (no 26-sample new high was printed)
  6. The 67-sample momentum is above 100 = bull pullback
  7. People that went short in the orange wick are under water – the 14-sample momentum is turned positive by breaking above that very candle
  8. Think of all the people trapped with their shorts below 1.13 with the 1-hour quick trip down to 1.1235

2 steps forward, 1 step back image

These people calling for 1.09 remind me of the email I got here in Slovakian from someone telling me that Eur would go to 1.25 and 1.32 in a rather hectic fashion last June.Momentum just reached neutral (100), price is sitting on the 9-day EMA after a slow motion bull pullback, the hourly just printed a Zero-Mastodon and you want to short, because everyone is always trading the last trade. The inside head would be broken on the way up.

Bear Market Rally 2


The Mean, E207 on the hourly translates vaguely to a 9EMA HL2 on the daily.

Since the mean was crossed over, closed over, so the odds favor a move back to the lower Keltinger Band, and I would no longer deem this rally a bear market rally. What is likely to happen here is a 20-50 pips pullback, so I would try to dump my shorts. If the next daily closes below the 9 EMA, a downside continuation would become more probable.

I put back the directional filter for the fizzle condition. I thought the red block was a mistake, but in fact it was right for postponing the climax. I don’t even remember what condition I had to flip it back to green up here, but it was certainly right. Wait, it had to be clearing the mean. One of these four…

//E207 leave down
 if (High[i]-Low[i]>280*Point && High[i]>iMA(NULL,0,207,0,MODE_EMA, PRICE_LOW,i) && Low[i]<iMA(NULL,0,207,0,MODE_EMA, PRICE_LOW,i) && Close[i]<Open[i] && iMA(NULL,0,207,0,MODE_EMA, PRICE_MEDIAN,i)-iMA(NULL,0,67,0,MODE_EMA, PRICE_MEDIAN,i)<160*Point) dir[i]=-1;

//E207 leave down reprise
 else if (High[i]>iMA(NULL,0,207,0,MODE_EMA, PRICE_LOW,i) && Low[i]<iMA(NULL,0,207,0,MODE_EMA, PRICE_LOW,i) && Close[i]<Open[i] && iMA(NULL,0,207,0,MODE_EMA, PRICE_MEDIAN,i)-iMA(NULL,0,67,0,MODE_EMA, PRICE_MEDIAN,i)<160*Point && dir[i]==-1) dir[i]=1;
//High[i]-Low[i]>280*Point && 

//E207 leave up
 if (High[i]-Low[i]>280*Point && High[i]>iMA(NULL,0,207,0,MODE_EMA, PRICE_HIGH,i) && Low[i]<iMA(NULL,0,207,0,MODE_EMA, PRICE_HIGH,i) && Close[i]>Open[i]) dir[i]=1;

//E207 leave up reprise
 else if ( High[i]-Low[i]>280*Point && High[i]>iMA(NULL,0,207,0,MODE_EMA, PRICE_HIGH,i) && Low[i]<iMA(NULL,0,207,0,MODE_EMA, PRICE_HIGH,i) && Close[i]>Open[i] && dir[i]==1) dir[i]=-1;

The Forest’s call was always tuned to the overdrive line.
The LEMA 30N quoted last mean reversion to 1.1335.
There is your selling wick, the 31 projection and test, and price was now rejected from the Upper Guard Rail. Beetwen the 2 Guard Rails the rubber band isn’t stretched, rather free motion is possible.

The head is a tricky one. Since I believe that the head should be worth buying, I had to eliminate some weaker prints.

It is not as easy as looking at a lower low with an RSI2 print that does not touch the zero line.

     if (Close[0]<iBands(symbol,1440,44,0.8,0,PRICE_MEDIAN,MODE_LOW,0) &&  iFractals(symbol,0,MODE_LOWER,i) 
       && ExtMapBuffer2[i]==EMPTY_VALUE && RSI2[i]>4
       && RSI2[ArrayMaximum(RSI2,26,i)]>88
       && RSI2[ArrayMinimum(RSI2,2,i+1)]>1
       && Low[i]<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,24,i+1))

Where ExtMapuffer2 is the array for the Hybrid Stochastic Overdrives Down.

A small modification was done to the 15-Min ATR routine by adding a 3rd 20-pip box and a “C”.

Price never actually went outside the upper box, it just looks like it due to the broker pushing the spread up beyond 12 pips.

I can no longer attach Zip files on this blog (attaching an ex4 was never a possibility), so my options are either my Google One Drive or including a source code.

#property copyright "Copyright © 2018, Macdulio"
#property link      "" 
#property description "15-MIN ATR TARGETS PRO"
#property description "The arrow is the last 15-MIN consolidation weight"
#property description "The two aiming signals are the"
#property description "approximate area of a projected limit to a move on a normal day"
#property description "The projection lines are based om current 30-min MACD (24,52,5) bias"
#property description "and for better visuals plotted from the last high/low RSI print"
#property description "the program can plot a mesh with adjustable pip values"
#property description "plot qualifying moves, and has Fibonacci options"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Pink
#property indicator_color3 DarkGreen
#property indicator_color4 Crimson
//--- buffers
double vbru[];
double ATRA;
double ATRAVG[];
double weight;
double fhigh;
double flow;
double w[];
double ut[];
double dt[];
double BighBuffer;
double BowBuffer;
double BighBuffer2;
double BowBuffer2;
datetime UpFractalTime_1,LowFractalTime_1,UpFractalTime_2,LowFractalTime_2;
double mid[];
double ExtMapBuffer[];

extern int RSILOW = 15;
extern int RSIHIGH = 85;
extern bool plot_numbers=true;
extern bool plot_grid_55=false;
extern bool plot_qualifying_moves=false;
extern bool plot_last_swing_fib=false;
extern bool plot_qualifying_move_fib=false;
extern double pacing=55;

extern int lookback = 24;
extern int lastbar = 0;
extern color FibColor= Navy;

//---- variables
string TimeFrame;
datetime LastAlert=0;  
//| Custom indicator initialization function                         |
int init()

//---- indicators
    string short_name="15 MIN ATR";

//| Custom indicator deinitialization function                       |
int deinit()
//   ObjectsDeleteAll();
//| Custom indicator iteration function                              |
int start()
   int    i,i2,j,j2,k;                      // Bar Index
   int lasti,lasti2,lastj,lastj2;
    ArrayResize(ExtMapBuffer, Bars);
  ArrayInitialize(ExtMapBuffer, 0);
  ArrayResize(w, 2);  
  ArrayInitialize(w, EMPTY_VALUE);  
  ArrayResize(ut, 2);  
  ArrayInitialize(ut, EMPTY_VALUE);
  ArrayResize(dt, 2);      
  ArrayInitialize(dt, EMPTY_VALUE);
   ArrayResize(mid, Bars);
   ArrayInitialize(mid, 0);     

  ArrayResize(vbru, Bars);
   ArrayInitialize(vbru, 0); 

  ArrayResize(ATRAVG, 353);
   ArrayInitialize(ATRAVG, 0); 
      int    counted_bars=IndicatorCounted();
    string obj_name="My_Target_Lines"+IntegerToString(i);

if (plot_last_swing_fib) {

   double lowest=1000, highest=0;
   datetime T1,T2;
      double curLow0=iLow(Symbol(),Period(),i-2);
      double curLow1=iLow(Symbol(),Period(),i+1);
      double curLow2=iLow(Symbol(),Period(),i);
      double curLow3=iLow(Symbol(),Period(),i-1);
      double curLow4=iLow(Symbol(),Period(),i-2);
       double curHigh0=iHigh(Symbol(),Period(),i+2);
       double curHigh1=iHigh(Symbol(),Period(),i+1);
        double curHigh2=iHigh(Symbol(),Period(),i);
         double curHigh3=iHigh(Symbol(),Period(),i-1);
         double curHigh4=iHigh(Symbol(),Period(),i-2);
      if(curLow2<=curLow1 && curLow2<=curLow1 && curLow2<=curLow0 )
      if(curHigh2>=curHigh1 && curHigh2>=curHigh3&& curHigh2>=curHigh4)
   Comment(highest, lowest);
   {ObjectCreate("Fibo", OBJ_FIBO, 0, T1, highest,T2,lowest);}
    ObjectCreate("Fibo", OBJ_FIBO, 0, T2, lowest, T1,highest);
string fiboobjname = "Fibo";
ObjectSet(fiboobjname, OBJPROP_FIBOLEVELS, 11);
     ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL, 0.0);
   ObjectSetFiboDescription(fiboobjname,0,"0.0     %$");
   ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+1, 0.236);
   ObjectSetFiboDescription(fiboobjname,1,"23.6     %$");
   ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+2, 0.382);
   ObjectSetFiboDescription(fiboobjname,2,"38.2     %$");
   ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+3, 0.50);
   ObjectSetFiboDescription(fiboobjname,3,"50.0     %$");
   ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+4, 0.618);
   ObjectSetFiboDescription(fiboobjname,4,"61.8     %$");
   ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+5, 0.786);
   ObjectSetFiboDescription(fiboobjname,5,"78.6     %$");
   ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+6, 1.000);
   ObjectSetFiboDescription(fiboobjname,6,"100.0     %$");
   ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+7, -0.272);
   ObjectSetFiboDescription(fiboobjname,7,"127.2     %$");
   ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+8, -0.618);
   ObjectSetFiboDescription(fiboobjname,8,"161.8     %$");
   ObjectSet( "Fibo", OBJPROP_LEVELCOLOR, clrWhite) ;

   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; }
   while (!(ChoppinessIndex(12*4,i+1)<53 && ChoppinessIndex(12*4,i)>53))    





if (Close[0]<iMA(Symbol(),30,32,0,MODE_EMA,PRICE_CLOSE,0)){
ObjectCreate("ATR1", OBJ_RECTANGLE, 0,  Time[10], BowBuffer, Time[0], BighBuffer);
  ObjectCreate("ATR11", OBJ_RECTANGLE, 0,  Time[10], BighBuffer, Time[0], BighBuffer+200*Point);
    ObjectCreate("ATR111", OBJ_RECTANGLE, 0,  Time[10], BowBuffer, Time[0], BowBuffer-200*Point);

if (Close[0]>iMA(Symbol(),30,32,0,MODE_EMA,PRICE_CLOSE,0)){
ObjectCreate("ATR2", OBJ_RECTANGLE, 0,  Time[10], BowBuffer2, Time[0], BighBuffer2);

ObjectCreate("ATR22", OBJ_RECTANGLE, 0,  Time[10], BowBuffer2-200*Point, Time[0], BowBuffer2);
  ObjectCreate("ATR222", OBJ_RECTANGLE, 0,  Time[10], BighBuffer2+200*Point, Time[0], BighBuffer2);



   while (j2<=300){
          if (iRSI(NULL,0,2,PRICE_MEDIAN,j2+1)<RSILOW && iRSI(NULL,0,2,PRICE_MEDIAN,j2)>RSILOW ) break;

LowFractalTime_2=iTime(NULL, 0,j2);    LowFractalTime_1=iTime(NULL, 0,0);    
      if (j2<300 && (iMACD(NULL,30,24,52,5,PRICE_MEDIAN,0,1)>iMACD(NULL,30,24,52,5,PRICE_MEDIAN,1,1) || iMACD(NULL,30,24,52,5,PRICE_MEDIAN,0,0)>iMACD(NULL,30,24,52,5,PRICE_MEDIAN,1,0) ))  { 
     ObjectSetInteger(0,"Line9_2",OBJPROP_BACK, true);
         ObjectSet("Line9_2",OBJPROP_WIDTH,18); }
   while (i2<=300){
          if (iRSI(NULL,0,2,PRICE_MEDIAN,i2+1)>RSIHIGH && iRSI(NULL,0,2,PRICE_MEDIAN,i2)<RSIHIGH ) break;

UpFractalTime_2=iTime(NULL, 0,i2);    UpFractalTime_1=iTime(NULL, 0,0);    
      if (i2<300 && (iMACD(NULL,30,24,52,5,PRICE_MEDIAN,0,1)<iMACD(NULL,30,24,52,5,PRICE_MEDIAN,1,1)  ||  iMACD(NULL,30,24,52,5,PRICE_MEDIAN,0,0)<iMACD(NULL,30,24,52,5,PRICE_MEDIAN,1,0)) )  { 
    ObjectSetInteger(0,"Line9_1",OBJPROP_BACK, true);
         ObjectSet("Line9_1",OBJPROP_WIDTH,18); }
 deletetxt1("txt 7");
 if (plot_numbers){deletetxt1("txt 7");
               ObjectCreate("txt 7"+BighBuffer, OBJ_TEXT, 0, Time[4], BighBuffer+.0005); 
               ObjectSetText("txt 7"+BighBuffer, NormalizeDouble(BighBuffer,4), 22, "Arial Black", Blue);
               ObjectCreate("txt 7"+BowBuffer, OBJ_TEXT, 0, Time[4], BowBuffer+.0005); 
               ObjectSetText("txt 7"+BowBuffer, NormalizeDouble(BowBuffer,4), 22, "Arial Black", Black);
              ObjectCreate("txt 7"+BighBuffer2, OBJ_TEXT, 0, Time[4], BighBuffer2+.0005); 
               ObjectSetText("txt 7"+BighBuffer2, NormalizeDouble(BighBuffer2,4), 22, "Arial Black", Black);
               ObjectCreate("txt 7"+BowBuffer2, OBJ_TEXT, 0, Time[4], BowBuffer2+.0005); 
               ObjectSetText("txt 7"+BowBuffer2, NormalizeDouble(BowBuffer2,4), 22, "Arial Black", Blue);
             if (Close[0]<w[0]){ 
             ObjectCreate("txt 7"+BighBuffer*BowBuffer, OBJ_TEXT, 0, Time[8], (BighBuffer+BowBuffer)/2-.0015); 
               ObjectSetText("txt 7"+BighBuffer*BowBuffer, "C", 22, "Impact", White);
              ObjectCreate("txt 7"+BighBuffer+BowBuffer, OBJ_TEXT, 0, Time[8], (BighBuffer+BowBuffer)/2+.0005); 
               ObjectSetText("txt 7"+BighBuffer+BowBuffer, "W3", 22, "Impact", Crimson);
                ObjectCreate("txt 7"+(BighBuffer-BowBuffer), OBJ_TEXT, 0, Time[8], BighBuffer+.0015); 
               ObjectSetText("txt 7"+(BighBuffer-BowBuffer), "W1<="+ NormalizeDouble(BighBuffer+.0020,4), 22, "Impact", White);
               else {  
               ObjectCreate("txt 7"+BighBuffer2*BowBuffer2, OBJ_TEXT, 0, Time[8], (BighBuffer2+BowBuffer2)/2+.0025); 
               ObjectSetText("txt 7"+BighBuffer2*BowBuffer2, "C", 22, "Impact", White);
               ObjectCreate("txt 7"+BighBuffer2+BowBuffer2, OBJ_TEXT, 0, Time[8], (BighBuffer2+BowBuffer2)/2+.0005); 
               ObjectSetText("txt 7"+BighBuffer2+BowBuffer2, "W3", 22, "Impact", Crimson);
               ObjectCreate("txt 7"+(BighBuffer2-BowBuffer2), OBJ_TEXT, 0, Time[8], BowBuffer2-.0015); 
               ObjectSetText("txt 7"+(BighBuffer2-BowBuffer2), "W1>="+ NormalizeDouble(BowBuffer2-.0020,4), 22, "Impact",  White);


            if (plot_grid_55)    {
               ObjectCreate( "HLN"+IntegerToString(0), OBJ_HLINE, 0, Time[0], w[0] );
               ObjectSet("HLN"+IntegerToString(0), OBJPROP_COLOR, clrBlack );
               ObjectSet("HLN"+IntegerToString(0), OBJPROP_STYLE, 2 );
               for (i=1; i<=3; i++) {
               ObjectCreate( "HLN"+IntegerToString(i), OBJ_HLINE, 0, Time[0], NormalizeDouble(w[0]+(pacing/10000)*i,5) );
               ObjectSet("HLN"+IntegerToString(i), OBJPROP_COLOR, clrBlack );
               ObjectSet("HLN"+IntegerToString(i), OBJPROP_STYLE, 2 );
                 for (i=-1; i>=-3; i--) {
               ObjectCreate( "HLN"+IntegerToString(i), OBJ_HLINE, 0, Time[0], NormalizeDouble(w[0]+(pacing/10000)*i,5) );
               ObjectSet("HLN"+IntegerToString(i), OBJPROP_COLOR, clrBlack );
               ObjectSet("HLN"+IntegerToString(i), OBJPROP_STYLE, 2 );
if (plot_qualifying_moves) {            

for (k=50; k>=0; k--){

   while (j<=300){
          if (iFractals(NULL,0,MODE_UPPER,j)) break;

   while (j2<=j+25){
          if (iFractals(NULL,0,MODE_LOWER,j2) && High[j]-Low[j2]>ATRAVG[0]*.85) break;

LowFractalTime_2=iTime(NULL, 0,j2);    LowFractalTime_1=iTime(NULL, 0,j);    
      if (j2<300 && High[j]-Low[j2]>.0055  )  { 
     ObjectSetInteger(0,"Line8_2"+j,OBJPROP_BACK, true);
   while (i<=300){
          if (iFractals(NULL,0,MODE_LOWER,i)) break;

   while (i2<=i+25){
          if (iFractals(NULL,0,MODE_UPPER,i2) && High[i2]-Low[i]>ATRAVG[0]*.85) break;

UpFractalTime_2=iTime(NULL, 0,i2);    UpFractalTime_1=iTime(NULL, 0,i);    

      if (i2<300 && High[i2]-Low[i]>.0055)  { 
    ObjectSetInteger(0,"Line8_1"+i,OBJPROP_BACK, true);
          if (plot_qualifying_move_fib){
   {ObjectCreate("Fibu", OBJ_FIBO, 0, UpFractalTime_1, Low[lasti],UpFractalTime_2,High[lasti2]);}
    ObjectCreate("Fibu", OBJ_FIBO, 0, LowFractalTime_1, High[lastj], LowFractalTime_2,Low[lastj2]);}
string fiboobjname2 = "Fibu";
ObjectSet(fiboobjname2, OBJPROP_FIBOLEVELS, 11);
     ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL, 0.0);
   ObjectSetFiboDescription(fiboobjname2,0,"0.0     %$");
   ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL+1, 0.236);
   ObjectSetFiboDescription(fiboobjname2,1,"23.6     %$");
   ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL+2, 0.382);
   ObjectSetFiboDescription(fiboobjname2,2,"38.2     %$");
   ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL+3, 0.50);
   ObjectSetFiboDescription(fiboobjname2,3,"50.0     %$");
   ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL+4, 0.618);
   ObjectSetFiboDescription(fiboobjname2,4,"61.8     %$");
   ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL+5, 0.786);
   ObjectSetFiboDescription(fiboobjname2,5,"78.6     %$");
   ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL+6, 1.000);
   ObjectSetFiboDescription(fiboobjname2,6,"100.0     %$");
   ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL+7, -0.272);
   ObjectSetFiboDescription(fiboobjname2,7,"127.2     %$");
   ObjectSet(fiboobjname2, OBJPROP_FIRSTLEVEL+8, -0.618);
   ObjectSetFiboDescription(fiboobjname2,8,"161.8     %$");
   if(lasti<=lastj) ObjectSet( "Fibu", OBJPROP_LEVELCOLOR, Crimson) ;
   else ObjectSet( "Fibu", OBJPROP_LEVELCOLOR, DarkGreen) ;

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 what){
   for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--){
      string   on = ObjectName(iObj);
      if(StringFind(on, what) == 0)  ObjectDelete(on);
}  }

The Head Buy Boxes

Short & longer term momentum added (14 & 67 samples)

Bear Market Rally

In the negative Keltinger Chaos field there would be rallies coming off of Hourly Lower Low Head Prints that would take price to the Fizzle level (all of these were described in the previous blog entry).

What is important to note here is not to forget the protective stop loss placement when in the money, but if stopped out do not try to go back at the same level again.

The fizzle would score something beyond the confirmation level. The 15-min ATR routine can help you with its Wave3 box to show where price would be far enough from the last consolidation level.

Once again we can highlight the importance of 2 things in a bear market: heads and volatility.

The current move would qualify for a mean reversion by getting back to the E207.

A new idea of mine is to start splitting heads based on being a lower low (26 sample) or not into outside and inside heads.

Wait for the top of the hour to arrive when the market is cooking with gas.

4 cubes to end it all, just like the other day. If the stochastic overdrive gets taken back by the settlement, there may be additional upside left.

After the Zero point Zero stochastic reading earlier this week, there wasn’t much risk of a lot more downside to come near term.

1.1190 was the 100+50% support level and the 1.1995 projected level was also met by the low placed at 1.1986.

One final thought for trading in this market: let things play out, do not interfere much.

All green buying wicks

A Wave C can be more powerful than a Wave 3.

So, it isn’t the first full line up that matters after all, but the first hour when it subsides. Embedding is always looming about.

You can see how they bought again at the same height where domeone else sold.

Keltinger Confusion

So this is the world we live in & this is the routine we’re needin’. Hey Superman, where are you now?

When in the land of confusion, a Confirmed Reversal is hard to come by.

The Keltinger Chaos Field Game’s rules were unknown until today. Only distinct, but faint 80s disco music was making it through the chart,

For a reversal to take place beyond the Keltinger band would require 2 things: a head print and a counter directional swing in excess of 2x fluctuation size.

After these 2 conditions are met, any secondary buy signal would be a go.

So far there has been only 1 confirmed reversal up (shown by the Keltinger Chaos routine).

For the directional entries I have given the clues and the tool in the prior blog entry.

Finally let’s talk about the fizzle out condition.

Since you already have a Lema30N and a Hybrid Stochatic Bars, you are almost set.

A fizzle out would occur with the candles reaching beyond the shadow lines (10 more pips from the Safety lines as Lema30 does not plot these, only the Holy Graph) with red hot stochastic bar signals. Why red hot? Because this is a continuation entry, in this case THE Lower High.

This Red Hot made it to True Blau.

Image shows the alignment of all 4 stars squares.

The problem, once again was that you did not understand what the game was. And the game does not change until we catch up with the Borderline of the Keltinger Band (No Papi, I don’t preach, but you’re in trouble deep.)

Please start to appreciate that if I did not come along, you would never know of these game rules.

2 Steps Awkward

Here is how you may end up with a wrong bias unintentionally.

Google shuffled in a Bloomberg headline citing somebody having made 62 million on Euro short options.

Just by the environment you are surrounded with and your previously constructed logical circuits, you may end up translating this piece of information from the incredibly credible source as someone knew something and or made a lucky bet, but the trade is in past tense, you would end up with a short term bullish bias (I know I did).

As Matthew Broderick of Wall Street pointed it out due to the Hertz buying Teslas fake news, Bloomberg gets fined just as other news agencies, this however does not remedy any damages occurred.

Red Bull gives you wings, a dolphin could give you dorsal fins, but Google gives you bias and a red pitbull can take your balls.

Everything becomes part of your trading narrative.

Yesterday was shaping up to be a nothing burger with very light news.

It ended up being an Angus beef with some rib eye trimming for the brokers.

Yes, the confidence number was a big miss, but would you know if someone made the importance low by mistake or by will?

Are you preparing just as vehemently to protect yourself when there are now news scheduled?

I was born yesterday, on the steps, just like Attila was.

From the famous movie where Lisp Butler says his epic line: “I have no need of another woman speaking impairment.”

Are you done eating? Then start donating 🙂

A similar caliber of a word play for my 2 Hungarian followers would be:

Ettek? Ittak? Attak!

The 2-steps forward 1-step back goes a little something like this:

3-sets of these 2-steps & the prevailing trend gets reinstated.

Where did the 9.6 pips displacement come from? From looking at what seems to be happening.

Let’s examine if during the negative tone two steps backwards was a good entry or not.

You had 1-hour and 2.5 hours to enter your short after the 2nd step up got printed. The large cover numbers started at below 73 and below 55.

Fractal / opposite side = counter reset. I grew up on the 30-minute time frame, I don’t see any reason to ever stop looking at it.

The expression for extracting the 3rd and 4th decimals from a price quote as per me:

Either in a Wave 3 up or perhaps a C has ended. Regardless, there were 2 sell in signals, I’m out of my longs.

So what is my suggestion here?

I think you should obtain a copy of these indicators from me in exchange for a donation. You could help me out with my blog related monthly expenses (cca $25).

The tone’s bias (mql called Past Regression) line is derived from RSI readings / the chart itself not from financial media.

Head & Shoulder. The auto Mastodon trend lines come equipped.

The entry/exit levels that come with my latest version of Lema30N are a tremendous help with searching for and highlighting wicks that exceed 1/3 of the candle’s length, have a minimum size and the plots and numbers for the displacements are a world of help.

These 2 routines contributed to me achieving 90%+ equity growth since yesterday along with my scale in/out technique and knowing what the expectation should be for a Wave 1 up and a Wave 2 down (you may have picked up these ideas from my blog by now) – with Lema30 filling in the missing number. One more routine to get the heads right would be my hybrid version of the stochastic bars. Unlike a scammer, I can prove my gains. Scammers charge $1500-$2500 for an indicator / course that they can make a living off of and get busy forging statements. I am not making 90% every day, but the point is that I can.

Equity at 22/11/21 close: $507.17 (net zero holdings, 0.5 lot long & 0.5 lot short)

Equity at 23/11/21 close: $970.61 (zero holdings)

Cover me, I’m gonna win the race!

My uncle, the Huszar with his golden haired horses.

Huszar attire.

Operation Cunning

Look at me, Pumpkin Cloud. Not over here, here.

Whatever does not kill you, might still turn you into an unadulterated retard mofo. Not everyone gets to born in Cunningham.

Credit Karma has been saying for years that my credit limit wasn’t high enough.

Some of the million lessons transpired in 3 weeks would make even a grow up pros start begging for mommy. After taking losses left and right, half the time without reason I’m barely in gains with $678. I traded some gains made to squat some outdated holdings – a technique worth considering.

I don’t want to bore you with the details of how problematic a full hedge is and what it is like having to improvise when you realize that your train of thought is being derailed real time (remote computer operated by cell phone muting hedgers whilst auto trading still runs to secure the execution of the trail stops for the pending spike low – constantly re-fitting codes for positions that are being threatened & taking profits with extreme care avoiding margin issues – all during working someplace). A saga of 11.2 naked lots and all the stupid bias you can collect on YouTube etc.

Definitions clarified:

A push is a weekly move that exceeds last week’s terminal by more than 50% of its length.


A continuation move of a wave may arrive from the E8, E16 or E44 (always them Fibonacci numbers).

The volume available in MT4 is made up of how many quotes were printed in a given time segment – though this isn’t the same as the number of traded contracts at an exchange, it isn’t entirely useless.

Let’s look at these entries in relationship with the Holy Graph.

You can see the color mismatch, and when the 3rd row is missing, that’s a continuation entry.

This push did not even wait for the 8 EMA. The 4 I don’t display.

Most traders convert their equity to balance.

Balance is not something you have, but what the broker is looking to make off of you.

All you have is the equity side of the entire rope, the balance in this tug of war.

Therefore you must make an effort to build equity.

However counter intuitive it sounds, taking a loss does not decrease your equity, but by shortening the length of the rope and the margin percentage with it, this can be used to your advantage.

An impulse wave does not finish on strength, but rather a taper.

Good eye, there are new projected distance level at 1.1195.

This reversal divergence is called just divergence by some people, and they call the continuation divergence a reverse divergence for max confusion. Since the “divergence” has no qualifiers, it must be easy to guess what its opposite would look like.

Do not anticipate, participate.

Always hedge in steps and do not exceed 70% unless you are hedging last week’s push terminal.

…but you don’t want to learn from me, who can only make thousands and ends up having to fight for the same money multiple times. You want to learn from millennials who can make millions. They were somehow born right.

Left shoulder comes with Stochastic Bar overdrive signal, head comes with its absence – this is how an impulse wave ends: with a reversal divergence. Wave 5 had an ABC structure and ended on a peak strength, but the relationship between the end of the Wave 3 and the end of the Wave 5 is another reversal divergence – check the 4 hour or the daily.

The sign of strength / weakness plots on the chart:

	if (RSI2[i]>85) dir[i]=1;
   	if (RSI2[i]<15) dir[i]=-1;

   ////sign of strength
   if (dir[i]>0 && dir[i+1]!=1){
   ////sign of weakness
     if (dir[i]<0 && dir[i+1]!=-1){

The Liquidity Event

aka the Macdulio doctrine

Equity hedging should happen in 3 steps.

40%, then 50% of the remainder, then all.


Don’t forget to adjust the hedging direction for less surprises.

A liqidity event is when people get margin calls en masse.

A push means having to hedge in full size at the last weekly terminal for a beat or a liquidity enent.

Being in a push means that there are only forced enents and no support levels.

A push that did not make it outside the window envelope can be faded the next week 30-40 pips out.

A push that did make it outside the window envelope may be followed by another push – this would be a liquidity event.

During a push all secondary buy signals must be ignored; only primary buys are good enough for defiance.

Ask yourself the question: is this a primary buy? If not, it is a sell.

The buyable sells (green slanted) must be ignored. The run ups have to qualify. Price was outside the channel & pushed against it as well as against the trendlines.


, here’s why I think there will be a lower low – the spike into the overdrive line plus the inertia of having reached 6x stretch from the mean

A Word of Advice

There are 5 digit and 6 digit brokers.

What about this statement then listing open positions that are all about to hit their target price simultaneously.

Without mentioning the absence of separating lines and the funny font and the absence of decimals after the “10 lots”, people are eager to believe on LinkedIn anything that is too good to be true.

This guy who is fast on his calculator, hasn’t seen too many real statements, but that is his problem.

Wanting to believe that someone can trade like that and their only desire is to start managing your money as well – that’s your problem. For your own sake, you need to start unfollowing cell phone snapshot statement posting scammers.

4 Colors

Too tired to talk today, so I’ll just let the music play…

   ////strength sellable
   if (i>0 && RSI2[i]-RSI2[ArrayMinimum(RSI2,5,i)]>80 && iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,30,i-1))>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,44,i+31))
         && RSI2[ArrayMinimum(RSI2,12,i)]>1){     
      ////strength not sellable
   else if (RSI2[i]-RSI2[ArrayMinimum(RSI2,4,i)]>79 && RSI2[ArrayMinimum(RSI2,24,i)]>1){     
   ////weakness buyable
     if (i>0 && RSI2[ArrayMaximum(RSI2,4,i)]-RSI2[i]>78 && iLow(symbol,0,iLowest(symbol,0,MODE_LOW,30,i-1))<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,30,i+31))
         && RSI2[ArrayMaximum(RSI2,12,i)]<99){     
       ////weakness not buyable
    else if (RSI2[ArrayMaximum(RSI2,4,i)]-RSI2[i]>78){