MFI – Simply The Best

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,