Definr Closing Outside. By 2 pips? 1 pip? 0.5 pips?
Exactly. Nothing to do other than dusting off my Hoffman and changing the code. 0.5-pip discount to call the Regression high.

This was a major squaring event. Obviously there were those wanting to get out of Euro longs for a break even / small loss.

There was the Money Flow making a peak & there were those selling the upper 30-sample Bollinger Band getting its first tag in 3 months (this alone should tell you that you have a measuring leg made to the upside).

////upside progression
if (redcount[i+1]==redcount[i+7] &&
Close[i+1]>iBands(symbol,30,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)+5*Point && Close[i]<iBands(symbol,30,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)-10*Point){
ObjectCreate("120BPM"+IntegerToString(i),OBJ_TREND,0, Time[i+1], 0.8, Time[i+1], Close[i+1]);
ObjectSet("120BPM"+IntegerToString(i),OBJPROP_COLOR,clrCoral);
ObjectSet("120BPM"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
//upside regression
if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i+1))<iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,36,i+3))-20*Point) {ObjectSet("120BPM"+IntegerToString(i),OBJPROP_COLOR,clrGray);
if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i+1))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,36,i+3))>640*Point) greencount[i]=0;
else if (greencount[i]>0 && greencount[i+1]==greencount[i+2] && greencount[i+2]==greencount[i+3] && greencount[i+3]==greencount[i+4] && greencount[i+4]==greencount[i+5] && greencount[i+5]==greencount[i+6]) greencount[i]++;
ObjectCreate("120BPMc"+IntegerToString(i), OBJ_TEXT, 0, Time[i+2], Low[i+1]-60*Point);
ObjectSetText("120BPMc"+IntegerToString(i), greencount[i], 42, "Impact", clrLime);
if (greencount[i]==0){
j=i-4;
while (j>0){
if (High[j]>Close[i+1]) break;
j--;}
if (j<0) j=0;
if (Close[i+1]>Open[i+1]) ObjectCreate("120BPMg"+IntegerToString(i),OBJ_TREND,0, Time[i+1], Close[i+1], Time[j], Close[i+1]);
else ObjectCreate("120BPMg"+IntegerToString(i),OBJ_TREND,0, Time[i+2], Open[i+1], Time[j], Open[i+1]);
ObjectSet("120BPMg"+IntegerToString(i),OBJPROP_COLOR,clrGold);
ObjectSet("120BPMg"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("120BPMg"+IntegerToString(i),OBJPROP_WIDTH,7);
}
}
else {
dir[i]=-1;
redcount[i]++;
if (redcount[i]>2) greencount[i]=0;
ObjectCreate("120BPMc"+IntegerToString(i), OBJ_TEXT, 0, Time[i+2], High[i+1]+110*Point);
ObjectSetText("120BPMc"+IntegerToString(i), redcount[i], 42, "Impact", clrRed);
if (redcount[i]==3 || redcount[i]==4) {
j=i-4;
while (j>0){
if ((High[j]>Close[i+1] && Close[i+1]>=Open[i+1]) || (High[j]>Open[i+1] && Close[i+1]<Open[i+1] && Open[i+1]>Open[i+2]) || (High[j]>Open[i+2] && Close[i+1]<Open[i+1]) ) break;
j--;}
if (j<0) j=0;
if (Close[i+1]>=Open[i+1]) ObjectCreate("120BPMr"+IntegerToString(i),OBJ_TREND,0, Time[i+1], Close[i+1], Time[j], Close[i+1]);
else if (Close[i+1]<=Open[i+1]) ObjectCreate("120BPMr"+IntegerToString(i),OBJ_TREND,0, Time[i+2], Open[i+2], Time[j], Open[i+2]);
else ObjectCreate("120BPMr"+IntegerToString(i),OBJ_TREND,0, Time[i+1], Open[i+1], Time[j], Open[i+1]);
ObjectCreate("120BPMr"+IntegerToString(i),OBJ_TREND,0, Time[i+2], Open[i+2], Time[j], Open[i+2]);
ObjectSet("120BPMr"+IntegerToString(i),OBJPROP_COLOR,clrCyan);
if (redcount[i]==4) ObjectSet("120BPMr"+IntegerToString(i),OBJPROP_COLOR,clrDeepPink);
ObjectSet("120BPMr"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("120BPMr"+IntegerToString(i),OBJPROP_WIDTH,7);
}
}
ObjectSet("120BPM"+IntegerToString(i),OBJPROP_WIDTH,5);
ObjectSet("120BPM"+IntegerToString(i),OBJPROP_BACK,1);
}
//downside progression
if (greencount[i+1]==greencount[i+7] &&
Close[i+1]<iBands(symbol,30,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1)-5*Point && Close[i]>iBands(symbol,30,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)){
ObjectCreate("120BPM"+IntegerToString(i),OBJ_TREND,0, Time[i+1], 1.4, Time[i+1], Close[i+1]);
ObjectSet("120BPM"+IntegerToString(i),OBJPROP_COLOR,clrTeal);
ObjectSet("120BPM"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
//downside regression
if (iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i+1))>iLow(symbol,0,iLowest(symbol,0,MODE_LOW,36,i+3))+20*Point) {ObjectSet("120BPM"+IntegerToString(i),OBJPROP_COLOR,clrGray);
if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,30,i+1))-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i+1))>640*Point) redcount[i]=0;
else if (redcount[i]>0 && redcount[i+1]==redcount[i+2] && redcount[i+2]==redcount[i+3] && redcount[i+3]==redcount[i+4] && redcount[i+4]==redcount[i+5] && redcount[i+5]==redcount[i+6]) redcount[i]++;
ObjectCreate("120BPMc"+IntegerToString(i), OBJ_TEXT, 0, Time[i+2], High[i+1]+110*Point);
ObjectSetText("120BPMc"+IntegerToString(i), redcount[i], 42, "Impact", clrPink);
if (redcount[i]==0){
j=i-4;
while (j>0){
if (Low[j]<Close[i+1]) break;
j--;}
if (j<0) j=0;
if (Close[i+1]<Open[i+1]) ObjectCreate("120BPMg"+IntegerToString(i),OBJ_TREND,0, Time[i+1], Close[i+1], Time[j], Close[i+1]);
else if (Open[i+2]<Open[i+1]) ObjectCreate("120BPMg"+IntegerToString(i),OBJ_TREND,0, Time[i+2], Open[i+2], Time[j], Open[i+2]);
else ObjectCreate("120BPMg"+IntegerToString(i),OBJ_TREND,0, Time[i+1], Open[i+1], Time[j], Open[i+1]);
ObjectSet("120BPMg"+IntegerToString(i),OBJPROP_COLOR,clrGold);
ObjectSet("120BPMg"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("120BPMg"+IntegerToString(i),OBJPROP_WIDTH,7);
}
}
else {
dir[i]=1;
greencount[i]++;
if (redcount[i]>2) redcount[i]=0;
if (greencount[i]==3 || greencount[i]==4 || greencount[i]==5) {
j=i-4;
while (j>0){
if ((Low[j]<Close[i+1] && Close[i+1]<Open[i+1]) || (Low[j]<Open[i+2] && Close[i+1]>Open[i+1]) ) break;
j--;}
if (j<0) j=0;
if (Close[i+1]<Open[i+1]) ObjectCreate("120BPMr"+IntegerToString(i),OBJ_TREND,0, Time[i+1], Close[i+1], Time[j], Close[i+1]);
else ObjectCreate("120BPMr"+IntegerToString(i),OBJ_TREND,0, Time[i+2], Open[i+2], Time[j], Open[i+2]);
ObjectSet("120BPMr"+IntegerToString(i),OBJPROP_COLOR,clrCyan);
if (greencount[i]==4) ObjectSet("120BPMr"+IntegerToString(i),OBJPROP_COLOR,clrDeepPink);
ObjectSet("120BPMr"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("120BPMr"+IntegerToString(i),OBJPROP_WIDTH,7);
}
ObjectCreate("120BPMc"+IntegerToString(i), OBJ_TEXT, 0, Time[i+2], Low[i+1]-40*Point);
ObjectSetText("120BPMc"+IntegerToString(i), greencount[i], 42, "Impact", clrDarkGreen);
if (greencount[i]==2) {
ObjectCreate("120BPMcc"+IntegerToString(i), OBJ_TEXT, 0, Time[i+2], Low[i+1]-110*Point); ObjectSetText("120BPMcc"+IntegerToString(i), " cnt 27 LClose-4 pips =cover", 22, "Impact", clrDarkGreen);
}
}
ObjectSet("120BPM"+IntegerToString(i),OBJPROP_WIDTH,5);
ObjectSet("120BPM"+IntegerToString(i),OBJPROP_BACK,1);
}
I was gonna make a post with a title of Centripetal Petals, but I’ll just include the whole thing here.
A money flow peak may not receive an echo if the fade is too overwhelming. Hence the plot for acknowledging a spin-out. Yes, the sample sizes are yet again arbitrary picks.
if (mfi[i]<mfi[i+1] && mfi[i+2]<mfi[i+1] && mfi[i+1]>79 && iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i)>72 && mfi[ArrayMaximum(mfi,3,i)]>mfi[ArrayMaximum(mfi,23,i+3)]
){
ObjectCreate("RayTX"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,8,i)), Time[i+6], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,8,i)), Time[i]);
ObjectSet("RayTX"+IntegerToString(i),OBJPROP_COLOR,clrTeal);
ObjectSet("RayTX"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayTX"+IntegerToString(i),OBJPROP_WIDTH,5);
ObjectCreate("RayT2X"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i+1)), Time[i+6], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i+1)), Time[i]);
ObjectSet("RayT2X"+IntegerToString(i),OBJPROP_COLOR,clrDeepPink);
ObjectSet("RayT2X"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayT2X"+IntegerToString(i),OBJPROP_WIDTH,5);
}

Also, the Napoleon Dynamite plot is money flow peak dip w/ overbought / oversold extreme. A fade, color coded.
if (mfi[i]<9 && iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i)>67){
ObjectCreate("Roef"+DoubleToStr(i), OBJ_TEXT, 1, Time[i], 21);
ObjectSetText("Roef"+DoubleToStr(i), CharToStr(77), 44, "WingDings", DarkGreen);
}
if (mfi[i]>91 && iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i)<33){
ObjectCreate("Roef"+DoubleToStr(i), OBJ_TEXT, 1, Time[i], 99);
ObjectSetText("Roef"+DoubleToStr(i), CharToStr(77), 44, "WingDings", DeepPink);
}

Talking about polishing the one-eyed clown, son, I had high hopes for you.
Favourite movie? Edward Snowdenhands.
This looks like a formidable bottom still…

…but one more trip down to round out the Money Flow Beat reversal isn’t out of the question.

Sometimes all you get is the touch of the grey box (starting 0-8 pips out).

ObjectCreate("RayRect"+IntegerToString(i),OBJ_RECTANGLE,0, Time[i], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+80*Point, Time[i+13], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1)));
ObjectSet("RayRect"+IntegerToString(i),OBJPROP_COLOR,clrLightGray);
ObjectSet("RayRect"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectSet("RayRect"+IntegerToString(i),OBJPROP_BACK,0);