EOY

Happy New Bear!

The support trendline should yield some bounce.

Multiple accelerations at this point.

The MFI went temporarily way too oversold. Two divergences would mark the end, the last leg should not get below 24 on the MFI(7).

First, there should be a lower low, followed by another brief touch of the 8-EMO before the risk of a bigger thrust becomes exponential.

Since the BBs started expanding, I don’t think it will be a small beat this time. I’m thinking 50-70 pips, which would mean 1.0280-1.0260.

I have pimped out the program from the last post with a counter, last week’s pivot, and some numbers. Ci means the level of consolidation (53+ means full), C just stands for the current price in large so that I can see it from the bed, and the Delta is the risk for 10 pips.

#property copyright   "No Drive by Macdulio, (c) 2024"
#property link        "http://www.forexfore.blog"

#property indicator_chart_window
#property indicator_buffers 9
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 Brown
#property indicator_color4 LightGray
#property indicator_color5 Purple
#property indicator_color6 Yellow

extern int lookback = 1000;
double ExtUpperBuffer[];
double ExtLowerBuffer[];
double ExtUpperBuffer2[];
double ExtLowerBuffer2[];
double ExtUpperBuffer3[];
double ExtLowerBuffer3[];
double MFI[], L80[], L80p[], reference[], BBUP[], BBDN[];
double ExtMapBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(9);
   
//--- upper band
   SetIndexStyle(0,DRAW_LINE,0,3,indicator_color4);
   SetIndexBuffer(0,ExtUpperBuffer);
   SetIndexLabel(0,"Bands Upper");
//--- lower band
   SetIndexStyle(1,DRAW_LINE,0,3,indicator_color4);
   SetIndexBuffer(1,ExtLowerBuffer);
   SetIndexLabel(1,"Bands Lower");

   SetIndexStyle(2,DRAW_LINE,0,6,indicator_color1);
   SetIndexBuffer(2,ExtUpperBuffer2);
   SetIndexLabel(2,"Bands Upper Crossed");


   SetIndexStyle(3,DRAW_LINE,0,6,indicator_color2);
   SetIndexBuffer(3,ExtLowerBuffer2);
   SetIndexLabel(3,"Bands Lower Crossed");

  SetIndexStyle(4,DRAW_LINE,2,3,indicator_color3);
   SetIndexBuffer(4,L80p);


   SetIndexStyle(5,DRAW_LINE,0,11,indicator_color5);
   SetIndexBuffer(5,BBUP);

   SetIndexStyle(6,DRAW_LINE,0,11,indicator_color5);
   SetIndexBuffer(6,BBDN);


  SetIndexStyle(7,DRAW_LINE,0,1,indicator_color6);
   SetIndexBuffer(7,ExtUpperBuffer3);
   SetIndexLabel(7,"Liq break up");

   SetIndexStyle(8,DRAW_LINE,0,1,indicator_color6);
   SetIndexBuffer(8,ExtLowerBuffer3);
   SetIndexLabel(8,"Liq break dn");


   return(0);
  }

int start()
{
   ArrayResize(ExtUpperBuffer, Bars);
  ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE); 
     ArrayResize(ExtLowerBuffer, Bars);
  ArrayInitialize(ExtLowerBuffer, EMPTY_VALUE); 
 ArrayResize(ExtUpperBuffer2, Bars);
  ArrayInitialize(ExtUpperBuffer2,EMPTY_VALUE); 
     ArrayResize(ExtLowerBuffer2, Bars);
  ArrayInitialize(ExtLowerBuffer2, EMPTY_VALUE); 
   ArrayResize(ExtUpperBuffer3, Bars);
  ArrayInitialize(ExtUpperBuffer3,EMPTY_VALUE); 
     ArrayResize(ExtLowerBuffer3, Bars);
  ArrayInitialize(ExtLowerBuffer3, EMPTY_VALUE);  
  
ArrayResize(MFI, Bars);   
ArrayInitialize(MFI, EMPTY_VALUE); 
ArrayResize(L80, Bars);
  ArrayInitialize(L80,EMPTY_VALUE);
ArrayResize(L80p, Bars);
  ArrayInitialize(L80p,EMPTY_VALUE);
ArrayResize(reference, Bars);
  ArrayInitialize(reference,EMPTY_VALUE);  
ArrayResize(BBUP, Bars);
  ArrayInitialize(BBUP,EMPTY_VALUE);   
ArrayResize(BBDN, Bars);
  ArrayInitialize(BBDN,EMPTY_VALUE);   
 ArrayResize(ExtMapBuffer,Bars);   
 ArrayInitialize(ExtMapBuffer,EMPTY_VALUE); 


int i,j;
string symbol = Symbol();
double std;


 
  double nshorts=0;
   double nlongs=0;
 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();
              
               
               
             if (OrderType() == OP_SELL  )
             
               nshorts = nshorts+OrderLots(); 
               
             
}
 

   
for (i=lookback; i>=0; i--){      
      MFI[i]=iMFI(symbol,0,7,i);
      
      
      if (MathAbs(Close[i]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i)))<MathAbs(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i))-Close[i]))
      {reference[i] = iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i)); L80[i]=reference[i]+800*Point; }
      else {reference[i] = iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i));   
       L80[i]=reference[i]-800*Point; }
      if (L80[i]==L80[i+1] && i<525) L80p[i]=L80[i]; 
      
      ExtUpperBuffer[i]=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,10,i))+460*Point;
       ExtLowerBuffer[i]=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-460*Point;
         ExtUpperBuffer3[i]=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,10,i))+820*Point;
       ExtLowerBuffer3[i]=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-820*Point;
       

      if (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)) BBUP[i]=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,6,i));
      // BBUP[i]=iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i); 
      if ((Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i) || Low[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i+1)) && iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i)<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i+1) && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i) && High[i]<L80[i]+460*Point
      && MFI[i]<60
       )  BBUP[i]=High[i]; 
      
      
   //   if (High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i) && Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i))  BBDN[i]=iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i); 
   //   if ((High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i) || High[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i+1)) && iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i)>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i+1) && Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i) && Low[i]>L80[i]-460*Point
   //   && MFI[i]>40
   //    )  BBDN[i]=Low[i]; 
         
         
   
       
       ///drive down
      if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,i))>460*Point 
      && !(High[i+1]>iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1) && Low[i+1]<iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1)) 
      && (MFI[i]<18.5 || MFI[i+1]<18.5 || MFI[i+2]<18.5)
      && !(iClose(symbol,0,iHighest(symbol,0,MODE_CLOSE,10,i))<iBands(symbol,0,240,2,0,PRICE_MEDIAN,MODE_LOWER,iHighest(symbol,0,MODE_CLOSE,10,i)))
      && (Low[i]<L80[i] || Low[i+1]<L80[i+1] || Low[i+2]<L80[i+2])
      && ((
      // High[i+3]<L80[i+3] && High[i+4]<L80[i+4] && High[i+5]<L80[i+5] && (!High[i+9]<L80[i+9] && Low[i+8]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i+8)) &&
      High[i+7]<L80[i+7] && High[i+6]<L80[i+6] && High[i+5]<L80[i+5]) || (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,i))>680*Point && iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,iHighest(symbol,0,MODE_HIGH,10,i)) ))  
     //      && !(High[i+1]>iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1) && Low[i+1]<iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1))
      ) {ExtLowerBuffer2[i]=ExtLowerBuffer[i];
          if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,iHighest(symbol,0,MODE_HIGH,10,i))) BBUP[iHighest(symbol,0,MODE_HIGH,10,i)]=iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,iHighest(symbol,0,MODE_HIGH,10,i)); 
          //else BBUP[iHighest(symbol,0,MODE_HIGH,10,i)]=iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,iHighest(symbol,0,MODE_HIGH,10,i)); 
      }
      
       ///drive up 
      if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,5,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,10,i))>460*Point && !(High[i+1]>iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1) && Low[i+1]<iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1)) && (MFI[i]>72 || MFI[i+1]>72 || MFI[i+2]>72)
      && Close[i]>Close[i+10]
      && Low[i+5]>L80[i+5] && Low[i+6]>L80[i+6] 
      && ((Low[i+5]>L80[i+5]-100*Point && Low[i+9]>L80[i+9]-100*Point && Low[i+8]>L80[i+8]-100*Point && Low[i+7]>L80[i+7]-100*Point && Low[i+6]>L80[i+6]-100*Point) || iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,5,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,10,i))>1100*Point)  
      ) ExtUpperBuffer2[i]=ExtUpperBuffer[i];
}


 
deletetxt1("Countess");
int counter; 
 
   for (i=lookback-1; i>=0; i--)
   {  
      if (BBUP[i]==EMPTY_VALUE && BBUP[i+1]!=EMPTY_VALUE  && BBUP[i+2]!=EMPTY_VALUE) counter=1;
        
        if (counter>0 && counter<10){
               ObjectCreate("Countess"+i,OBJ_TEXT, 0, Time[i], Low[i]-30*Point);
               if (counter==9) ObjectSetText("Countess"+i, IntegerToString(counter,1,0), 11, "Arial Black", clrMagenta);
                  else ObjectSetText("Countess"+i, IntegerToString(counter,1,0), 11, "Arial Black", clrBlack); 
               if (counter==9 && (Low[i]<ExtLowerBuffer[i] || Low[i+3]<ExtLowerBuffer[i+3]) && (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+3) || Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+3))) ObjectSetText("Countess"+i, IntegerToString(counter,1,0), 15, "Arial Black", clrRed);   
                  
               }
      if (counter>0) counter++;
 
     if (BBUP[i]!=EMPTY_VALUE && BBUP[i+1]!=EMPTY_VALUE) counter=0;
 
   }  


  

deletetxt1("KLOPF");

  
  ObjectCreate("KLOPF1", OBJ_TEXT, 0, Time[0], Close[0]+65*Point);  
   ObjectSetText("KLOPF1", "                    C: "+DoubleToStr(NormalizeDouble(Close[0],5),5), 19, "Arial Black", Black);
   
      
  ObjectCreate("KLOPF2", OBJ_TEXT, 0, Time[0], Close[0]-35*Point);  
   ObjectSetText("KLOPF2", "                    Ci: "+DoubleToStr(Choppiness15(48,1),2), 19, "Arial Black", Black);
   if (Choppiness15(48,1)<45) ObjectSetText("KLOPF2", "                    Ci: "+DoubleToStr(Choppiness15(48,1),2), 19, "Arial Black", White);
     
   
   
    ObjectCreate( "KLOPF"+4, OBJ_HLINE, 0,  Time[0], (iHigh(symbol,10080,1)+iLow(symbol,10080,1))/2);
               ObjectSet("KLOPF"+4, OBJPROP_COLOR, clrMagenta );
               ObjectSet("KLOPF"+4, OBJPROP_WIDTH, 3 );
               ObjectSet("KLOPF"+4, OBJPROP_RAY_RIGHT, false );
               ObjectSet("KLOPF"+4, OBJPROP_STYLE, 1 );
               
   
             
                 ObjectCreate("KLOPF5", OBJ_TEXT, 0, Time[0], (iHigh(symbol,10080,1)+iLow(symbol,10080,1))/2+10*Point);  
      ObjectSetText("KLOPF5", "                                             WPIVOT", 11, "Arial Black", Black);  
       



ObjectCreate("KLOPF"+8,OBJ_LABEL,0, 0,0);
  ObjectSetText("KLOPF"+8," Delta: "+NormalizeDouble(nlongs-nshorts,2)*100+" P&L: $"+NormalizeDouble(DailyProfit(),2),16,"ARIAL BLACK",clrYellow); 
  
  //ObjectSetText("E819"+8," M/S:"+NormalizeDouble(AccountEquity()*.00165,2)+"LOT, D:"+NormalizeDouble(nlongs-nshorts,2)+" D/P: $"+NormalizeDouble(DailyProfit(),2)+" M/S:"+NormalizeDouble(AccountEquity()*.00165,2)+"LOT" ,16,"ARIAL BLACK",clrNavy); 
  ObjectSet("KLOPF"+8,OBJPROP_CORNER,3);
  ObjectSet("KLOPF"+8,OBJPROP_XDISTANCE,40);
  ObjectSet("KLOPF"+8,OBJPROP_YDISTANCE,50); 
 



   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 Choppiness15(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
}


double DailyProfit()
{
double profit = 0;
int i, hstTotal=OrdersHistoryTotal();
  for(i=0;i<hstTotal;i++)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==TRUE)
       {
         if(OrderType()>1) continue;
         if(TimeToStr(TimeCurrent(),TIME_DATE) == TimeToStr(OrderCloseTime(),TIME_DATE))
         {
            profit += OrderProfit() + OrderSwap() + OrderCommission();
         }
       }
    }
   return(profit);
}

The last album of 2024

Accelerations

To better understand what an acceleration is, here is some finger practice.

An acceleration has 3 basic criteria.

  • A 7 Sample money flow below 19 or above 76
  • A 10-sample range of 46+ pips
  • the push has to occur against the upper 30-sample BB or the 30 SMA

It goes without saying that a Thrust requires an acceleration beforehand.

Examples.

In the first example, the push happened against the Upper BB. In the second example, the push was against nothing (furthermore was outside the 240 BB as well), in the third example, the time factor was the main culprit. Within 10 hours it had to have a peak at the upper BB or the 30 SMA. A return to the 80 SMA is a disqualifier, not a start, but rather an end of something.

The idea behind the purple thingies is that an acceleration could occur against them, but if 9 hours later the price is still not outside the light gray band, you must buy.

#property copyright   "No Drive by Macdulio, (c) 2024"
#property link        "http://www.forexfore.blog"

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 Brown
#property indicator_color4 LightGray
#property indicator_color5 Purple

extern int lookback = 1000;
double ExtUpperBuffer[];
double ExtLowerBuffer[];
double ExtUpperBuffer2[];
double ExtLowerBuffer2[];
double MFI[], L80[], L80p[], reference[], BBUP[], BBDN[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(7);
   
//--- upper band
   SetIndexStyle(0,DRAW_LINE,0,3,indicator_color4);
   SetIndexBuffer(0,ExtUpperBuffer);
   SetIndexLabel(0,"Bands Upper");
//--- lower band
   SetIndexStyle(1,DRAW_LINE,0,3,indicator_color4);
   SetIndexBuffer(1,ExtLowerBuffer);
   SetIndexLabel(1,"Bands Lower");

   SetIndexStyle(2,DRAW_LINE,0,6,indicator_color1);
   SetIndexBuffer(2,ExtUpperBuffer2);
   SetIndexLabel(2,"Bands Upper Crossed");


   SetIndexStyle(3,DRAW_LINE,0,6,indicator_color2);
   SetIndexBuffer(3,ExtLowerBuffer2);
   SetIndexLabel(3,"Bands Lower Crossed");

  SetIndexStyle(4,DRAW_LINE,2,3,indicator_color3);
   SetIndexBuffer(4,L80p);


   SetIndexStyle(5,DRAW_LINE,0,11,indicator_color5);
   SetIndexBuffer(5,BBUP);

   SetIndexStyle(6,DRAW_LINE,0,11,indicator_color5);
   SetIndexBuffer(6,BBDN);



   return(0);
  }

int start()
{
   ArrayResize(ExtUpperBuffer, Bars);
  ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE); 
     ArrayResize(ExtLowerBuffer, Bars);
  ArrayInitialize(ExtLowerBuffer, EMPTY_VALUE); 
 ArrayResize(ExtUpperBuffer2, Bars);
  ArrayInitialize(ExtUpperBuffer2,EMPTY_VALUE); 
     ArrayResize(ExtLowerBuffer2, Bars);
  ArrayInitialize(ExtLowerBuffer2, EMPTY_VALUE); 
ArrayResize(MFI, Bars);   
ArrayInitialize(MFI, EMPTY_VALUE); 
ArrayResize(L80, Bars);
  ArrayInitialize(L80,EMPTY_VALUE);
ArrayResize(L80p, Bars);
  ArrayInitialize(L80p,EMPTY_VALUE);
ArrayResize(reference, Bars);
  ArrayInitialize(reference,EMPTY_VALUE);  
ArrayResize(BBUP, Bars);
  ArrayInitialize(BBUP,EMPTY_VALUE);   
ArrayResize(BBDN, Bars);
  ArrayInitialize(BBDN,EMPTY_VALUE);   
 


int i,j;
string symbol = Symbol();
double std;

   
for (i=lookback; i>=0; i--){      
      MFI[i]=iMFI(symbol,0,7,i);
      
      
      if (MathAbs(Close[i]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i)))<MathAbs(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i))-Close[i]))
      {reference[i] = iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i)); L80[i]=reference[i]+800*Point; }
      else {reference[i] = iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i));   
       L80[i]=reference[i]-800*Point; }
      if (L80[i]==L80[i+1] && i<525) L80p[i]=L80[i]; 
      
      ExtUpperBuffer[i]=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,10,i))+460*Point;
       ExtLowerBuffer[i]=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-460*Point;

      if (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i))  BBUP[i]=iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i); 
      if ((Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i) || Low[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i+1)) && iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i)<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i+1) && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i) && High[i]<L80[i]+460*Point
      && MFI[i]<60
       )  BBUP[i]=High[i]; 
         
   
       
       ///drive down
      if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,i))>460*Point 
      && !(High[i+1]>iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1) && Low[i+1]<iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1)) 
      && (MFI[i]<14 || MFI[i+1]<14 || MFI[i+2]<14)
      && !(iClose(symbol,0,iHighest(symbol,0,MODE_CLOSE,10,i))<iBands(symbol,0,240,2,0,PRICE_MEDIAN,MODE_LOWER,iHighest(symbol,0,MODE_CLOSE,10,i)))
      && (Low[i]<L80[i] || Low[i+1]<L80[i+1] || Low[i+2]<L80[i+2])
      && ((
      // High[i+3]<L80[i+3] && High[i+4]<L80[i+4] && High[i+5]<L80[i+5] && (!High[i+9]<L80[i+9] && Low[i+8]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i+8)) &&
      High[i+7]<L80[i+7] && High[i+6]<L80[i+6] && High[i+5]<L80[i+5]) || (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,i))>680*Point && iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,iHighest(symbol,0,MODE_HIGH,10,i)) ))  
     //      && !(High[i+1]>iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1) && Low[i+1]<iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1))
      ) {ExtLowerBuffer2[i]=ExtLowerBuffer[i];
          if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,iHighest(symbol,0,MODE_HIGH,10,i))) BBUP[iHighest(symbol,0,MODE_HIGH,10,i)]=iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,iHighest(symbol,0,MODE_HIGH,10,i)); 
          //else BBUP[iHighest(symbol,0,MODE_HIGH,10,i)]=iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,iHighest(symbol,0,MODE_HIGH,10,i)); 
      }
      
       ///drive up 
      if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,5,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,10,i))>460*Point && !(High[i+1]>iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1) && Low[i+1]<iMA(symbol,0,80,0,MODE_SMA,PRICE_MEDIAN,i+1)) && (MFI[i]>72 || MFI[i+1]>72 || MFI[i+2]>72)
      && Close[i]>Close[i+10]
      && ((Low[i+5]>L80[i+5]-100*Point && Low[i+9]>L80[i+9]-100*Point && Low[i+8]>L80[i+8]-100*Point && Low[i+7]>L80[i+7]-100*Point && Low[i+6]>L80[i+6]-100*Point) || iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,5,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,10,i))>1100*Point)  
      ) ExtUpperBuffer2[i]=ExtUpperBuffer[i];
}

   return(0);
  }

Album #45 was the last one for this year, I promise.

I did not qualify to participate in the Robbins because they cap the leverage at 200. Mine is 500. I am at 261.4% for the year.

Color Coded

I’ve noticed some useful things about monitoring for 30-sample BB width on the Daily.

 ExtATRBuffer[i]= (iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)-iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i))*10000;
 if (ExtATRBuffer[i]<ExtATRBuffer[i+1]) ExtATRBuffer2[i]=ExtATRBuffer[i];
 if (ExtATRBuffer[i]<ExtATRBuffer[i+1] && ExtATRBuffer[i]<360) ExtATRBuffer3[i]=ExtATRBuffer[i];

Green vertical: the flip in the expansion/start of contraction (bottoming/topping action).

Blue vertical: the flip in contraction/start of expansion (break out).

Purple = highlight of the contraction.

Magenta = less than 350 pips, contracting phase – possibly the end of a move/deep pullback.

Kampec Colores.

Onto Roultette.

Now, another thing seems to work well during the loss of volatility phase.

Talking the black horizontal arrows and the Buy/Sell For 16 Pips plots.

The whole thing revolves around the prior idea of the market switching off around the 8-hour EMA of opens. (The dots show the hourly history).

3 closes on one side red/green. Offbeat: black.

2 blacks in a row is a trigger for the potential turn. Low-risk entry with getting in on the 2-sample high/low and riding for 16 pips at least or getting stopped out in the money. A second pending entry 5 pips out for a second dip and 21 pips or more to be had.

i=0;
while (i<dotplot){
  ObjectCreate("PENELOPE"+i,OBJ_LABEL,0, 0,0);
  ObjectSet("PENELOPE"+i,OBJPROP_CORNER,1);
  ObjectSet("PENELOPE"+i,OBJPROP_XDISTANCE,305+i*16);
  ObjectSet("PENELOPE"+i,OBJPROP_YDISTANCE,510);
  ObjectSetText("PENELOPE"+i,CharToStr(108),19,"Wingdings");
  ObjectSet("PENELOPE"+i,OBJPROP_COLOR,clrBlack); 
  if (pit[i]>0) ObjectSet("PENELOPE"+i,OBJPROP_COLOR,clrGreen); 
  if (pit[i]<0) ObjectSet("PENELOPE"+i,OBJPROP_COLOR,clrRed);  
 i++; 
  
  if (pit[i]==0 && pit[i+1]==0 && pit[i+2]<0 && High[i]>iBands(symbol,0,240,2,0,PRICE_MEDIAN,MODE_LOWER,i)){
      ObjectCreate("PENELOPEZi"+i,OBJ_TEXT, 0, Time[i+2], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,3,i))+15*Point);
      ObjectSetText("PENELOPEZi"+i,CharToStr(240),29,"Wingdings");
      ObjectSet("PENELOPEZi"+i,OBJPROP_COLOR,clrBlack); 
      
      ObjectCreate("PENELOPEZii"+i,OBJ_TEXT, 0, Time[i+2], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,3,i))-25*Point);
      ObjectSetText("PENELOPEZii"+i,"B416p@ "+DoubleToStr(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,3,i)),4),4)+"-(5)",29,"Impact");
      ObjectSet("PENELOPEZii"+i,OBJPROP_COLOR,clrDarkGreen); 
  }  
   
    if (pit[i]==0 && pit[i+1]==0 && pit[i+2]>0 && Low[i]<iBands(symbol,0,240,2,0,PRICE_MEDIAN,MODE_UPPER,i)){
      ObjectCreate("PENELOPEZi"+i,OBJ_TEXT, 0, Time[i+2], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i))+60*Point);
      ObjectSetText("PENELOPEZi"+i,CharToStr(240),29,"Wingdings");
      ObjectSet("PENELOPEZi"+i,OBJPROP_COLOR,clrBlack); 
      
      ObjectCreate("PENELOPEZii"+i,OBJ_TEXT, 0, Time[i+2], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i))+80*Point);
      ObjectSetText("PENELOPEZii"+i,"S416p@ "+DoubleToStr(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i)),4),4)+"+(5)",29,"Impact");
      ObjectSet("PENELOPEZii"+i,OBJPROP_COLOR,clrCrimson); 
  }   
}

Happy Holidays!

Xmas

This is what I’m thinking.


A White Shark’s Christmas is finally actual.

(Listen Without Precipice)

Still-pictures set in motion

A white shark's Christmas

Mrs
May is in disarray

(What am I gonna get for Baby Shark this year?)

Running out of Free-tossing bodies

The fridge is full of salt

I need to fix my teeth too

Bear claws would be nice

(I'm dreaming of white surfers)

[coughing, choking sounds]

(Last Christmas I gave you some frisbees…) (I ain’t never gonna swim again the way I swam with you…) Let’s smoke some puffer fish And get “drown” on it (’cause I’m hunting high and low…) [A-ha music runs]

[coughing, choking sounds]

(Last Christmas I gave you some frisbees…) (I ain’t never gonna swim again the way I swam with you…) Let’s smoke some puffer fish And get drown on it (’cause I’m hunting high and low…) [A-ha music runs] Let’s do this in up and arms with Mommy Shark!

[chorus]

I’m dreaming of a white surfer … Last Christmas I gave you some frisbees … Bear Claws and Turkish Delight … A shark can dream, can’t I?

MM

I’m a market models guy.

Here are some findings.

A market that is hitting the upper white band (2.8x stretch from the E-9) on the upside but not touching the lower one is an uptrending market.

A fresh-out condition (F) may be the start of a full turn or a correction. An F gets voided (not white) if in the following 3 days the volatility extreme gets exceeded.

A reversal requires the re-visit of an F 3 times in a row, then a break and a close outside of the box drawn.

A major top/bottom stats with the proof of a counter-directional volatility. This is a clearly visible ABC move (off #1 – on images 1 and 3). The A would miss the opposite band by 56 pips, the B would miss the band on the side of the F by a little less (say 42, 36 in these examples) and the C would miss the opposite band by even less than A did. The second F is #2 the 3rd F print requires another ABC move, but way smaller in amplitude. Nevertheless, the size is such that it should take a minimum of 3 days to print with the B falling shy of the F, and the C2 falling shy of the “A2” (a contracting pattern), then #3 would be the undercut of both 1 and 2.

 if (High[i]>iMA(symbol,0,9,0,MODE_EMA, PRICE_MEDIAN,i)+FMax*2.2*10*Point
      && High[i]>High[i+1]+33*Point && Close[i]<High[i]-60*Point &&
      High[i]-Low[i]>900*Point && Low[i]>L80N[i+1]
      )
          ObjectCreate("Bod"+DoubleToStr(i), OBJ_TEXT, 0, Time[i], High[i]+330*Point); 
          if (i>1 && High[i]>High[i+1] && (High[i-1]>High[i] || High[i-2]>High[i]) && Low[i]>L80N[i]) ObjectSetText("Bod"+DoubleToStr(i), "F", 24, "Impact",  Green);
          else if (i>2 && High[i]>High[i+1] && High[i-3]<High[i] && Low[i]>L80N[i]) ObjectSetText("Bod"+DoubleToStr(i), "F", 24, "Impact",  Green);
          else ObjectSetText("Bod"+DoubleToStr(i), "F", 24, "Impact",  White); 
   
     if (Low[i]<iMA(symbol,0,9,0,MODE_EMA, PRICE_MEDIAN,i)-FMax*2.4*10*Point
      && Low[i]<Low[i+1]-33*Point  && (Close[i]>Low[i]+210*Point || (i>0 && Low[i-1]>Low[i])) &&
      High[i]-Low[i]>430*Point && High[i]<L80N[i+1]
      )
          ObjectCreate("Bod"+DoubleToStr(i), OBJ_TEXT, 0, Time[i], Low[i]-330*Point); 
          
          if (i>1 && Low[i]<Low[i+1] && (Low[i-1]<Low[i] || Low[i-2]<Low[i]) && High[i]<L80N[i]) ObjectSetText("Bod"+DoubleToStr(i), "F", 24, "Impact",  Red);
          else if (i>2 && Low[i]<Low[i+1] && Low[i-3]<Low[i] && High[i]<L80N[i]) ObjectSetText("Bod"+DoubleToStr(i), "F", 24, "Impact",  Red);
          else ObjectSetText("Bod"+DoubleToStr(i), "F", 24, "Impact",  White); 
      }   

#43, all were made this year since March.

MFI(7)

Come, learn some trading.

There are measurements that are relevant. You should remember them.

For instance, it is possible to anticipate ahead of time the location of the first HH or LL after a section of acceleration. Fade heavily 10-13 pips out. If you want to make sure to get some fills, put out something at 4, 8 pips.

Similarly, with the knowledge that a thrust is bound to follow the HH/LL print you can be in the move by at least taking on a full hedge (if you have holdings in the other direction) 25 pips out and keep on adding (overhedge) all the way to 49 pips.

LL 21min. calls for a minimum of 21 pips retracement.

An LL GTF is good for 50-80 pips.

What is the practical use of an expression like “nothing goes up in a straight line”?

Once there was a downside Thrust (pruple), the first le up sould be at least 50pips, most likely would fall short of the 80-pip line, and in an absolute extreme there should be a 45-pip pullback after a 100-pip leg up – meaning that you would at a mimnimum get back the money for anything that was opened 65 pips off the bottom, and the trade is not likely going to go against you more than 15 pips.

See, this is an environment that you can plan in ahead by having some statistical understanding.

Once the price has diverted from the 8 EMO a great deal, after crossing it, you start to count the following hours. By the 10th hour you should have the lowest low that the first deeper correction will make. One shallow correction would be followed by one deep. Actually, the example I brought has the lower BB for a substitute of the 8 EMO, because of the peak volatility at the end of the last leg down.

The stretch multipliers are in fluctuation maximum from the E-9 band. A 4.5x stretch used to be normal volatility years ago. Now these are rare reading.

See, even time can be useful for knowing when to cut holdings. Particularly right before a 60-pip gap up.

I’d say, scaling out of shorts during the 10th hour is a sesible move.

They tried some pilot buy at the Goosing level, but ultimately price has made it to the support level relative to the consolidation mean.

This does not look bearish. An uncomfortably deep bow back.

It won’t be bearish until a new acceleration gets printed. And for that the MFI would have to go below 14. Sure, it could coast lower in the next hour. When that happens, you can always hedge yourself back at the 8 EMO.

//////////drive down         
      if ((Low[i]<L80[i] || Low[i+1]<L80[i+1] || Low[i+2]<L80[i+2] )
      && iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,i))>460*Point 
      && (Low[i]<cover[i]+100*Point || Low[i+1]<cover[i+1]+100*Point || Low[i+2]<cover[i+2]+100*Point)
       && (MFI[i]<14 || MFI[i+1]<14 || MFI[i+2]<14)

17 was the low reading. Funnily, the money flow did not get oversold enough to qualify.

There could be a bow back bending the price back from the daily E-9 or a bit beyond (red line), these triangles (yellow) take 3 or 4 days to print, meaning a higher low near here on Tuesday, but a visit of 1.0460+ is very likely first.

…cry wolf, time to worry…

After the post there was a 14 print, and now the acceleration has been confirmed. It is most likely a trap, because the entire push is happening outside the 240BB.

The Better

The more trades you can recognize, the better.

Plotting BB rejections starting now. First pass at the filters. (Green and Red rectangles). The idea is to define risk and have something to hinge the size on. I plot the rectangles one candle back to see the actual candle better. Real-time/repaint is what I went with, as 1 hour later, the price may have gone too far already.

///BB rejection on the downside
    if (Low[i]<Low[i+1] && Close[i]>Open[i] && Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i) && Close[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)+60*Point && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)+100*Point
    && iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,i)-iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,i)>1150*Point   
    && Drive[i]>-1 && Drive[i+1]>-1 && Drive[i+2]>-1 
    ){
    
              ObjectCreate("MINUSZ"+IntegerToString(i),OBJ_RECTANGLE,0, Time[i+1], Close[i], Time[i+2], Low[i]);
            ObjectSet("MINUSZ"+IntegerToString(i),OBJPROP_COLOR,clrGreen);
            ObjectSet("MINUSZ"+IntegerToString(i),OBJPROP_WIDTH,10);
            ObjectSet("MINUSZ"+IntegerToString(i),OBJPROP_STYLE,STYLE_DOT);
             ObjectSet("MINUSZ"+IntegerToString(i),OBJPROP_BACK,1); 
   }
   
    ///BB rejection on the upside
    if (High[i]>High[i+1] && Close[i]<Open[i] && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && Close[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)-60*Point && Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)-100*Point
    && iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,i)-iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,i)>1150*Point   
    && iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)-iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)>351*Point 
    && Drive[i]<1 && Drive[i+1]<1 && Drive[i+2]<1 
    ){
    
              ObjectCreate("MINUSZ"+IntegerToString(i),OBJ_RECTANGLE,0, Time[i+1], Close[i], Time[i+2], High[i]);
            ObjectSet("MINUSZ"+IntegerToString(i),OBJPROP_COLOR,clrRed);
            ObjectSet("MINUSZ"+IntegerToString(i),OBJPROP_WIDTH,10);
            ObjectSet("MINUSZ"+IntegerToString(i),OBJPROP_STYLE,STYLE_DOT);
             ObjectSet("MINUSZ"+IntegerToString(i),OBJPROP_BACK,1); 
   }

Most likely the last album of the year, #42. Started working on an instrumental one, think Tangerine Dream.

Bend Over Backwards

When a move up from an LL gets bent back down before the 8 EMO is hit, making yet another LL, the price will get rejected.

2 examples:

GTF stands for Get The Hell Out.

There is no thrust yet.

The target area is 1.0364 (W3M) – 1.0349 (W3F) zone.

//////////LL
      if (i>0 && MFI[i]>7 && MFI[i]<68 
      && Drive[i]>-1
      && Drive[ArrayMinimum(Drive,28,i)]<0 
      && Low[i]==iLow(symbol,0,iLowest(symbol,0,MODE_LOW,40,i))
      && Low[i-1]>Low[i] && thrust[i]<1 && thrust[i+1]<1 && thrust[i+2]<1  && thrust[i-1]<1
      && L80[i]>Close[i]
      ){
                            ObjectCreate("PINUSXY"+IntegerToString(i),OBJ_TEXT, 0, Time[i],Low[i]-50*Point);
                            if (ll[i+3]==true)  ObjectSetText("PINUSXY"+IntegerToString(i),"LL-GTF", 26, "Impact", clrGreen);
                           else ObjectSetText("PINUSXY"+IntegerToString(i),"LL", 26, "Impact", clrCrimson);
                           ObjectCreate("PINUSXX"+IntegerToString(i),OBJ_TEXT, 2, Time[i],70);
                           ObjectSetText("PINUSXX"+IntegerToString(i),"S/L53+/S30+", 21, "Impact", clrCrimson);
                           if (ll[i+4]==true || ll[i+5]==true || ll[i+5]==true) ObjectSetText("PINUSXX"+IntegerToString(i),"S/E8!!!", 21, "Impact", clrCrimson);
         
         ll[i]=true;
                   
      }

All She Wrote?

If the next hour does not make a lower low, the Thrust is in, and it is the thick kind outside the 30 BB and the 120 BB.

The acceleration takes the 7-sample MFI below 14. The LL makes an MFI reversal divergence, but it is still in the oversold zone. The Thrust does not get into the oversold zone (24).

The (last) THRUST is 2-6 hours long continuous buying/selling (typically 2, 3 or 5).


I have a YouTube topic now.

https://youtube.com/channel/UCPuvZT025jNbiVepituc3Cg?si=-6d0Bwca0v4LfzCH

Also, Annie Lennox – tremendous voice – will be on Album #42.

CRC Error

I believe this consolidation below the 80-line, with the new bear configuration (63, 53-pip lines below) is a Complete Regime Change, and the next move could be an acceleration down setting off a driven thrust.

Cut / Overhedge is another way of saying the same thing.

 ///trending down
   if (ExtATRBuffer2[i+1]>22 &&
   ExtATRBuffer2[i+1]<31 && RSI2[i]<90 &&
   ExtATRBuffer[i+2]>31 && ExtATRBuffer[i+1]<31 && ExtATRBuffer[i]<28 && ExtATRBuffer[ArrayMaximum(ExtATRBuffer,10,i)]>62
   && ExtATRBuffer2[i]>20
   ){
          ObjectCreate("LINUS"+IntegerToString(i),OBJ_VLINE,1, Time[i], 0);
            ObjectSet("LINUS"+IntegerToString(i),OBJPROP_COLOR,clrBrown);
            ObjectSet("LINUS"+IntegerToString(i),OBJPROP_WIDTH,6);
            ObjectSet("LINUS"+IntegerToString(i),OBJPROP_STYLE,STYLE_DOT);
             ObjectSet("LINUS"+IntegerToString(i),OBJPROP_BACK,1);
             
             ObjectCreate("LINUSZ"+IntegerToString(i),OBJ_TEXT, 1, Time[i],75);
             ObjectSetText("LINUSZ"+IntegerToString(i),"Cut/OH: "+DoubleToStr(NormalizeDouble(High[i],4),4)+"+", 26, "Impact", clrCrimson);
             dir[i]=-1;
             }

I think 1.0411 would be undercut, probably into the 1.038x area.

Shaprio’s best video yet.