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.
