The New Kid in the Flock

some ideas on how to use the RSI-BB V1.0 indicator.

Buy-Buy-Buy

The bands are called upper2, upper, main, lower and lower2.

You are looking for a sequence shaping up as a V that is shaping below the main line or within a few pips.

What can be used as a filter here are the Money Flow Average (5 sample) in 2 colors. You want to see a blue run up preceding a buy entry. Also, you want the V to have at least 2 more values above the dip, and then there is the 8-sample EMA of the opens that I utilized.

(AVG[i]>AVG[i+2] || AVG[i]>AVG[i+1] || (AVG[i+1]<AVG[i-1] && High[i]<iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i)+30*Point) ) && RSI[i+3]>RSI[i+1] && RSI[i]<RSI[i+2] && RSI[i]<RSI[i+1] && RSI[i]<RSI[i-1] && RSI[i]>lower[i]-2 
     && ((RSI[i]<main[i]+2 && High[i]>iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i)-50*Point) ||  (RSI[i]<main[i]+1 && High[i]>iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i)-110*Point) ||  (RSI[i]<main[i] && High[i]<iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i)-140*Point))  )

Now, about the idea of the pre-markers:

They are reminders to look for the V in the upper / lower block(s). They are actually utilizing a VWAP routine. Frankly I don’t even recall why I did what, but the objective was something working. The importance is the outcome.

if (Low[i+1]>ExtBufferVWAP[ i+1 ] && High[i]>ExtBufferVWAP[ i ] && Low[i]<ExtBufferVWAP[ i ] && AVG[i+5]!=EMPTY_VALUE )
      {

      if (AVG[i]<AVG[i+5] && High[i]<iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i) && Open[i]>iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i)-170*Point ) {ObjectCreate(0,"TLine_v"+i,OBJ_TREND,indicator_window,Time[i],upper2[i],Time[i],lower2[i]); ObjectSet("TLine_v"+i,OBJPROP_COLOR,Red);
      
      }
      else if (AVG[i]<AVG[i+5]) {ObjectCreate(0,"TLine_v"+i,OBJ_TREND,indicator_window,Time[i],upper2[i],Time[i],upper[i]); ObjectSet("TLine_v"+i,OBJPROP_COLOR,Red);
      
      }
      else if (Low[i]>iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i) && AVG[i]>upper[i]){
      ObjectCreate(0,"TLine_v"+i,OBJ_TREND,indicator_window,Time[i],upper2[i],Time[i],lower2[i]); ObjectSet("TLine_v"+i,OBJPROP_COLOR,Green);}
      
      
      else {if (AVG[i]>upper[i]) ObjectCreate(0,"TLine_v"+i,OBJ_TREND,indicator_window,Time[i],main[i],Time[i],lower2[i]); ObjectSet("TLine_v"+i,OBJPROP_COLOR,Green);}
          ObjectSetInteger(0,"TLine_v"+i,OBJPROP_RAY_RIGHT,false);
      ObjectSet("TLine_v"+i,OBJPROP_WIDTH, 13); 
      ObjectSet("TLine_v"+i,OBJPROP_BACK, 1);
      }
          
     if ( High[i+1]<ExtBufferVWAP[ i+1 ] && High[i]>ExtBufferVWAP[ i ] && Low[i]<ExtBufferVWAP[ i ] && AVG[i+5]!=EMPTY_VALUE) {
      
      if (AVG[i]<AVG[i+5]  && High[i]<iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i) && Open[i]>iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i)-170*Point) {ObjectCreate(0,"TLine_v"+i,OBJ_TREND,indicator_window,Time[i],upper2[i],Time[i],lower2[i]); ObjectSet("TLine_v"+i,OBJPROP_COLOR,Red);
      
      }
      else if (AVG[i]<AVG[i+5]) {ObjectCreate(0,"TLine_v"+i,OBJ_TREND,indicator_window,Time[i],upper2[i],Time[i],main[i]); ObjectSet("TLine_v"+i,OBJPROP_COLOR,Red);
      
      }
       else if (Low[i]>iMA(NULL,0,8,0,MODE_EMA, PRICE_OPEN,i) && RSI[i+2]>main[i+2] && RSI[i+2]<upper[i+2] && AVG[i]>upper[i]){
      ObjectCreate(0,"TLine_v"+i,OBJ_TREND,indicator_window,Time[i],upper2[i],Time[i],lower2[i]); ObjectSet("TLine_v"+i,OBJPROP_COLOR,Green);}
      
      
      else if (RSI[i+2]>main[i+2] && RSI[i+2]<upper[i+2] && AVG[i]>upper[i]) {ObjectCreate(0,"TLine_v"+i,OBJ_TREND,indicator_window,Time[i],lower[i],Time[i],lower2[i]); ObjectSet("TLine_v"+i,OBJPROP_COLOR,Green);}
      ObjectSetInteger(0,"TLine_v"+i,OBJPROP_RAY_RIGHT,false);
      ObjectSet("TLine_v"+i,OBJPROP_WIDTH, 13); 
      ObjectSet("TLine_v"+i,OBJPROP_BACK, 1);
      }

The idea behind the full length bars is that you can sell at will or buy at will.

A flick-flack can occur, of course – see image 1.

The reminder labels promote a side. The bias is coming from the Weekly chart, if the last series of 3 closes were above the weekly 59 EMA, the bull side would be promoted and vica versa.

The purple arrows are looking for crosses through the individual band lines, for instance, the RSI pulls in between the upper and upper 2 lines and the 6-sample bottom is more than 28 pips away, that’s a sell. I highlight a 20-pip block with the deep pink numbers, which are 16-36 pips away from the low of the candle in question. The idea is that if you have certain size in mind that you can handle, every 5 pips put out one fifth of that. They may not all get filled, and that’s ok. You want to cover when the RSI is getting close to the main (middle) line.

if (RSI[i]<upper2[i] && RSI[i]>upper[i] && RSI[i+1]>upper2[i+1] && High[i]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i))>280*Point){
   ObjectCreate("TLineN"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], Low[i]+260*Point); 
   ObjectSetText("TLineN"+IntegerToString(i), CharToStr(220), 32, "Wingdings", Purple);   
   ObjectSet("TLineN"+IntegerToString(i),OBJPROP_BACK,0);  
   ObjectCreate("TLineLL"+IntegerToString(i), OBJ_TEXT, 0, Time[i], Low[i]+260*Point); 
   ObjectSetText("TLineLL"+IntegerToString(i), " SELL "+DoubleToStr(NormalizeDouble(Low[i]+160*Point,4),4)+"-"+DoubleToStr(NormalizeDouble(Low[i]+360*Point,4),4), 14, "Impact", White);   
   ObjectSet("TLineLL"+IntegerToString(i),OBJPROP_BACK,0);
   
    ObjectCreate("TLineL"+IntegerToString(i), OBJ_TEXT, 0, Time[i], Low[i]+260*Point); 
   ObjectSetText("TLineL"+IntegerToString(i), "SELL "+DoubleToStr(NormalizeDouble(Low[i]+160*Point,4),4)+"-"+DoubleToStr(NormalizeDouble(Low[i]+360*Point,4),4), 14, "Impact", DeepPink);   
   ObjectSet("TLineL"+IntegerToString(i),OBJPROP_BACK,0);  
 }     
 
  if ( RSI[i]<upper[i] && RSI[i]>main[i] && RSI[i+1]>upper[i+1] && RSI[i+3]<upper[i+3] && High[i]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i))>350*Point){
   ObjectCreate("TLineN"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], Low[i]+260*Point); 
   ObjectSetText("TLineN"+IntegerToString(i), CharToStr(220), 32, "Wingdings", Purple);   
   ObjectSet("TLineN"+IntegerToString(i),OBJPROP_BACK,0);  
       ObjectCreate("TLineLL"+IntegerToString(i), OBJ_TEXT, 0, Time[i], Low[i]+260*Point); 
   ObjectSetText("TLineLL"+IntegerToString(i), " SELL "+DoubleToStr(NormalizeDouble(Low[i]+160*Point,4),4)+"-"+DoubleToStr(NormalizeDouble(Low[i]+360*Point,4),4), 14, "Impact", White);   
   ObjectSet("TLineLL"+IntegerToString(i),OBJPROP_BACK,0); 
       ObjectCreate("TLineL"+IntegerToString(i), OBJ_TEXT, 0, Time[i], Low[i]+260*Point); 
   ObjectSetText("TLineL"+IntegerToString(i), "SELL "+DoubleToStr(NormalizeDouble(Low[i]+160*Point,4),4)+"-"+DoubleToStr(NormalizeDouble(Low[i]+360*Point,4),4), 14, "Impact", DeepPink);   
   ObjectSet("TLineL"+IntegerToString(i),OBJPROP_BACK,0);  
 }    

The “Must Go” labels remind of immediate action, they went through several passes of clever filtering. The landings in the Correction and in the New Wave fields are colored differently and the gray-out is not a strong enough signal by itself, only in combination with something else.

The one thing to note here is that the yellow line prints early, preparing you for a possible outcome, but can also be taken back if it goes on for longer than expected, and the text label may or may not follow, but once they printed they meant it.

  if (RSI[i]<main[i] && RSI[i-1]>RSI[i] && RSI[i+2]>upper[i+2]){
             ObjectCreate(0,"TLine"+IntegerToString(i),OBJ_TREND,indicator_window,Time[i+2],RSI[i+2],Time[i],RSI[i]);
                   ObjectSetInteger(0,"TLine"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_COLOR,clrYellow);
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_WIDTH,9); 
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_BACK,1); 
                   
                    ObjectCreate("TLiney"+DoubleToStr(i), OBJ_TEXT, indicator_window, Time[i], RSI[i]-30*Point);  
                      if (MathAbs(Close[i]-iMA(NULL,0,44,0,MODE_EMA, PRICE_MEDIAN,i))<800*Point) 
                    ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO LONG", 13, "Impact", Purple); 
                    else ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO LONG", 13, "Impact", DimGray);
                    if (Market[0]<0) ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO LONG", 13, "Impact", DimGray);
                   
      }
       if (RSI[i]<lower2[i] && RSI[i-1]>RSI[i] && RSI[i+3]>lower[i+3] && RSI[i+4]>lower[i+4]){
             ObjectCreate(0,"TLine"+IntegerToString(i),OBJ_TREND,indicator_window,Time[i+3],RSI[i+3],Time[i],RSI[i]);
                   ObjectSetInteger(0,"TLine"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_COLOR,clrYellow);
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_WIDTH,9); 
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_BACK,1); 
                   
                   ObjectCreate("TLiney"+DoubleToStr(i), OBJ_TEXT, indicator_window, Time[i], RSI[i]-30*Point); 
                   if (MathAbs(Close[i]-iMA(NULL,0,44,0,MODE_EMA, PRICE_MEDIAN,i))<800*Point) 
                    ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO LONG", 13, "Impact", Green); 
                    else ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO LONG", 13, "Impact", DimGray); 
                    if (Market[0]<0 && RSI[i+3]>upper[i+3]) ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO LONG", 13, "Impact", DimGray);
      }
      
     
           if (RSI[i]>main[i] && RSI[i-1]<RSI[i] && RSI[i+2]<lower[i]){
             ObjectCreate(0,"TLine"+IntegerToString(i),OBJ_TREND,indicator_window,Time[i+2],RSI[i+2],Time[i],RSI[i]);
                   ObjectSetInteger(0,"TLine"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_COLOR,clrYellow);
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_WIDTH,9); 
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_BACK,1); 
                   
                    ObjectCreate("TLiney"+DoubleToStr(i), OBJ_TEXT, indicator_window, Time[i], RSI[i]+9);  
                    if (MathAbs(Close[i]-iMA(NULL,0,44,0,MODE_EMA, PRICE_MEDIAN,i))<800*Point && High[i]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i))>280*Point)
                    ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO SHORT", 13, "Impact", Purple); 
                    else  ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO SHORT", 13, "Impact", DimGray);
     }
     
     
      if (RSI[i]>upper2[i] && RSI[i-1]<RSI[i] && RSI[i+3]<upper[i+3]){
             ObjectCreate(0,"TLine"+IntegerToString(i),OBJ_TREND,indicator_window,Time[i+3],RSI[i+3],Time[i],RSI[i]);
                   ObjectSetInteger(0,"TLine"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_COLOR,clrYellow);
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_WIDTH,9); 
                   ObjectSet("TLine"+IntegerToString(i),OBJPROP_BACK,1); 
                   
                   ObjectCreate("TLiney"+DoubleToStr(i), OBJ_TEXT, indicator_window, Time[i], RSI[i]+9); 
                   if (MathAbs(Close[i]-iMA(NULL,0,44,0,MODE_EMA, PRICE_MEDIAN,i))<800*Point)
                    ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO SHORT", 13, "Impact", Crimson); 
                    else ObjectSetText("TLiney"+DoubleToStr(i), "MUST GO SHORT", 13, "Impact", DimGray); 
      }

I know, this was meant to be a user-friendly manual, but I chose to include the logical expressions as is for I currently have no idea how to explain things with accuracy otherwise.


Are you bad enough, are you really tough?

Your eyes without the haze…

Let’s dispose of this position in this disposition, candy girl…