Been wanting to make this plot to prove how accurate the money flow beat reversal zone is for pinning down a turn.

if (mfi[i+12]>mfi[i+13] && mfi[i+12]>mfi[i+11] && mfi[ArrayMaximum(mfi,3,i+11)]>mfi[ArrayMaximum(mfi,23,i+15)] && mfi[i+12]>79 && iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i)>28){
ObjectCreate("Sal"+DoubleToStr(i), OBJ_TEXT, indicator_window+1, Time[i+10], mfi[i]+mfi[i]*.2);
ObjectSetText("Sal"+DoubleToStr(i), "Sell Beats: "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+80*Point,4),4)+", "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+140*Point,4),4)+", shy of "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+220*Point,4),4), 22, "Impact", Black);
if (iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i+12)<88 || iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i+12)>96.8) ObjectSetText("Sal"+DoubleToStr(i), "MFI strength", 12, "Impact", DimGray);
else {
ObjectCreate("Salz"+DoubleToStr(i), OBJ_TEXT, indicator_window+1, Time[i], mfi[i]+mfi[i]*.6);
ObjectSetText("Salz"+DoubleToStr(i), "2xBuy: "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+320*Point,4),4)+", cover: "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+680*Point,4),4)+" 3x stretch -> E9", 22, "Impact", DarkGreen);
x=i+8;
while (x>0){
if (High[x]>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+80*Point) break;
x--;}
if (x<0) x=0;
ObjectCreate("RayXX"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+80*Point, Time[x], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+80*Point);
ObjectSet("RayXX"+IntegerToString(i),OBJPROP_COLOR,clrBrown);
ObjectSet("RayXX"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayXX"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectCreate("RayXLX"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+15], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+100*Point);
ObjectSetText("RayXLX"+DoubleToStr(i), "Cover / Go Short "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+80*Point,4),4), 12, "Arial Black", Red);
y=i+8;
while (y>0){
if (High[y]>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+140*Point) break;
y--;}
if (y<0) y=0;
ObjectCreate("RayYY"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+140*Point, Time[y], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+140*Point);
ObjectSet("RayYY"+IntegerToString(i),OBJPROP_COLOR,clrBrown);
ObjectSet("RayYY"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayYY"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectCreate("RayYLY"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+12], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+160*Point);
ObjectSetText("RayYLY"+DoubleToStr(i), "Add Short "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+140*Point,4),4), 12, "Arial Black", Red);
z=i+8;
while (z>0){
if (High[z]>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+220*Point) break;
z--;}
if (z<0) z=0;
ObjectCreate("RayZZ"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+220*Point, Time[z], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+220*Point);
ObjectSet("RayZZ"+IntegerToString(i),OBJPROP_COLOR,clrRed);
ObjectSet("RayZZ"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayZZ"+IntegerToString(i),OBJPROP_WIDTH,1);
ObjectSet("RayZZ"+IntegerToString(i),OBJPROP_TYPE,1);
ObjectCreate("RayZLZ"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+12], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+240*Point);
ObjectSetText("RayZLZ"+DoubleToStr(i), "Sell shy of "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+80*Point,4),4), 12, "Arial Black", Black);
y=i+8;
while (y>0){
if (High[y]>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+320*Point) break;
y--;}
if (y<0) y=0;
if (0<i-74) y=i-74;
ObjectCreate("RayJJ"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+320*Point, Time[j], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+320*Point);
ObjectSet("RayJJ"+IntegerToString(i),OBJPROP_COLOR,clrDarkGreen);
ObjectSet("RayJJ"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayJJ"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectCreate("RayJLJ"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+16], iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+400*Point);
ObjectSetText("RayJLJ"+DoubleToStr(i), "2xBuy: "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+320*Point,4),4)+", cover: "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,16,i+1))+680*Point,4),4)+", 3x stretch -> E9", 22, "Impact", DarkGreen);
}
}
if (mfi[i+12]<mfi[i+13] && mfi[i+12]<mfi[i+11] && mfi[ArrayMinimum(mfi,3,i+11)]<mfi[ArrayMinimum(mfi,23,i+15)] && mfi[i+12]<21 && iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i)<72){
ObjectCreate("Sals"+DoubleToStr(i), OBJ_TEXT, indicator_window+1, Time[i+10], mfi[i]*1.4);
if (Low[i]<iBands(symbol,0,240,2,0,PRICE_MEDIAN,MODE_LOWER,i)) ObjectSetText("Sals"+DoubleToStr(i), "Sell Retract: "+DoubleToString(NormalizeDouble(iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,8,i+1))+80*Point,4),4), 22, "Impact", Crimson);
else if (Low[i+12]<iBands(symbol,0,240,2,0,PRICE_MEDIAN,MODE_LOWER,i+12)) ObjectSetText("Sals"+DoubleToStr(i), "Buy Beats: "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-80*Point,4),4)+", "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-140*Point,4),4)+", ["+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-220*Point,4),4)+" -> "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-500*Point,4),4)+"]", 22, "Impact", Black);
else {
ObjectSetText("Sals"+DoubleToStr(i), "Buy Beats: "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-80*Point,4),4)+", "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-140*Point,4),4)+", shy of "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-220*Point,4),4), 22, "Impact", Black);
if (iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i+12)<10){ ObjectCreate("Salz"+DoubleToStr(i), OBJ_TEXT, indicator_window+1, Time[i], mfi[i]*1.1);
ObjectSetText("Salz"+DoubleToStr(i), "2xSell: "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-320*Point,4),4)+", cover: "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-680*Point,4),4)+", 3x stretch -> E9", 22, "Impact", Crimson);
x=i+8;
while (x>0){
if (Low[x]<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-80*Point) break;
x--;}
if (x<0) x=0;
ObjectCreate("RayX"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-80*Point, Time[x], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-80*Point);
ObjectSet("RayX"+IntegerToString(i),OBJPROP_COLOR,clrBrown);
ObjectSet("RayX"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayX"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectCreate("RayXL"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+15], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-60*Point );
ObjectSetText("RayXL"+DoubleToStr(i), "Cover / Go Long "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-80*Point,4),4), 12, "Arial Black", DarkGreen);
y=i+8;
while (y>0){
if (Low[y]<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-140*Point) break;
y--;}
if (y<0) y=0;
ObjectCreate("RayY"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-140*Point, Time[y], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-140*Point);
ObjectSet("RayY"+IntegerToString(i),OBJPROP_COLOR,clrBrown);
ObjectSet("RayY"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayY"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectCreate("RayYL"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+12], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-120*Point );
ObjectSetText("RayYL"+DoubleToStr(i), "Add Long "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-140*Point,4),4), 12, "Arial Black", DarkGreen);
z=i+8;
while (z>0){
if (Low[z]<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-220*Point) break;
z--;}
if (z<0) z=0;
ObjectCreate("RayZ"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-220*Point, Time[z], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-220*Point);
ObjectSet("RayZ"+IntegerToString(i),OBJPROP_COLOR,clrDarkGreen);
ObjectSet("RayZ"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayZ"+IntegerToString(i),OBJPROP_WIDTH,1);
ObjectSet("RayZ"+IntegerToString(i),OBJPROP_TYPE,1);
ObjectCreate("RayZL"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+12], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-200*Point );
ObjectSetText("RayZL"+DoubleToStr(i), "Buy shy of "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-220*Point,4),4), 12, "Arial Black", Black);
y=i+8;
while (y>0){
if (Low[y]<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-320*Point) break;
y--;}
if (y<0) y=0;
if (0<i-74) y=i-74;
ObjectCreate("RayJ"+IntegerToString(i),OBJ_TREND,0, Time[i+1], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-320*Point, Time[j], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-320*Point);
ObjectSet("RayJ"+IntegerToString(i),OBJPROP_COLOR,clrRed);
ObjectSet("RayJ"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("RayJ"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectCreate("RayJL"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+16], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-320*Point );
ObjectSetText("RayJL"+DoubleToStr(i), "2xSell: "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-320*Point,4),4)+", cover: "+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-680*Point,4),4)+", 3x stretch -> E9", 22, "Impact", Crimson);
}
}
if (Low[i+12]<(stratod[i+12]-400*Point)) ObjectSetText("Sals"+DoubleToStr(i), "Buy Beat: "+" ("+DoubleToString(NormalizeDouble(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,16,i+1))-220*Point,4),4)+")-> LL", 22, "Impact", Magenta);
if (iStochastic(symbol,0,120,3,3,MODE_SMA,PRICE_MEDIAN,MODE_MAIN,i+12)>10) ObjectSetText("Sals"+DoubleToStr(i), "MFI weakness", 12, "Impact", DimGray);
}
The rest is entertainment
& since I qoted Tina,
