Conclusions.
The market is either moving away from a thrust or a displacement. This is the basis of the directional logic.

I had to go into town to adjust the Displacements to my liking. You have the next short coming up when the RSI2 goes above 76.
////Displacements
if (Low[i]<iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_MAIN,i) && Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)
&& L53[i+1]>L80[i+1]) {
ObjectCreate("PINUSXZZZ"+IntegerToString(i),OBJ_TEXT, 0, Time[i+5],Low[i]-20*Point);
ObjectSetText("PINUSXZZZ"+IntegerToString(i),"Displacement", 16, "Impact", clrBlue);
disp[i]=1;
if (MFI[i]<30 && iRSI(symbol,0,2,PRICE_MEDIAN,i)<13) {ObjectSetText("PINUSXZZZ"+IntegerToString(i),"Displacement - STOP", 16, "Impact", clrRed); disp[i]=-1;}
else if (MFI[i]<8) {ObjectSetText("PINUSXZZZ"+IntegerToString(i),"Displacement", 16, "Impact", clrGreen);
}}
if (High[i]>iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_MAIN,i) && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)
&& (L53[i+1]<L80[i+1] || L53[i+1]<L80[i+1]) && MFI[i]>60) {
ObjectCreate("PINUSXZZZ"+IntegerToString(i),OBJ_TEXT, 0, Time[i+5],High[i]+90*Point);
ObjectSetText("PINUSXZZZ"+IntegerToString(i),"Displacement", 16, "Impact", clrBlue);
disp[i]=-1;
}
if (
((High[i]>iMA(symbol,0,70,2,MODE_SMA,PRICE_MEDIAN,i) && iRSI(symbol,0,2,PRICE_MEDIAN,i)>96) ||
High[i]>iMA(symbol,0,80,2,MODE_SMA,PRICE_MEDIAN,i))
&& High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)
&& L53[i+1]<L80[i+1] && MFI[i]>62
&& High[i]>=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,28,i))-50*Point
) {
ObjectCreate("PINUSXZZZ"+IntegerToString(i),OBJ_TEXT, 0, Time[i+5],High[i]+50*Point);
ObjectSetText("PINUSXZZZ"+IntegerToString(i),"Displacement", 16, "Impact", clrTeal);
if (MFI[i]>84 && iRSI(symbol,0,2,PRICE_MEDIAN,i)>96) ObjectSetText("PINUSXZZZ"+IntegerToString(i),"Displacement - STOP + 10 pips", 16, "Impact", clrGreen);
disp[i]-1;
}
RSI2 highlights
if (dire[i]>0 && iRSI(symbol,0,2,PRICE_MEDIAN,i)<16.5){
ObjectCreate("Bacardisz"+IntegerToString(i), OBJ_RECTANGLE, 1, Time[i+1], iRSI(symbol,0,2,PRICE_MEDIAN,i)+10, Time[i], iRSI(symbol,0,2,PRICE_MEDIAN,i)-10);
ObjectSetInteger(0,"Bacardisz"+IntegerToString(i),OBJPROP_COLOR,clrGreen);
ObjectSet("Bacardisz"+IntegerToString(i),OBJPROP_BACK,1);
ObjectSet("Bacardisz"+IntegerToString(i),OBJPROP_WIDTH,3);
}
if (dire[i]<0 && iRSI(symbol,0,2,PRICE_MEDIAN,i)>76){
ObjectCreate("Bacardisz"+IntegerToString(i), OBJ_RECTANGLE, 1, Time[i+1], iRSI(symbol,0,2,PRICE_MEDIAN,i)+10, Time[i], iRSI(symbol,0,2,PRICE_MEDIAN,i)-10);
ObjectSetInteger(0,"Bacardisz"+IntegerToString(i),OBJPROP_COLOR,clrCrimson);
ObjectSet("Bacardisz"+IntegerToString(i),OBJPROP_BACK,1);
ObjectSet("Bacardisz"+IntegerToString(i),OBJPROP_WIDTH,3);
}
Price going outside the cover line by 15 pips initiates the extended time play (extra large thrust).
if ((Low[i]<cover[i]-150*Point && Low[i]<iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,i)) || (High[i]>cover[i]+150*Point && High[i]>iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,i)) && cover[i]!=EMPTY_VALUE) {
The calculation of the Cover is ten sample hourly high minus 53 pips / low plus 53 pips.
cover[i]=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,10,i))-530*Point;
cover[i]=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,10,i))+530*Point;
The Storno of the thrust:
if (thrust[i+5]==1 && Close[i]<Close[i+5] && Close[i]<Close[i+4] && Close[i+5]<L80[i+5] && Low[i+5]<cover[i+5] && High[i+1]<High[i+2]){
ObjectSetText("PINUSX"+IntegerToString(i+5),"Storno!", 26, "Impact", clrCrimson);
thrust[i]=-1;
ObjectSetInteger(0,"Thrust"+IntegerToString(i+5),OBJPROP_COLOR,clrOrangeRed);
ObjectSetInteger(0,"Thrust"+IntegerToString(i+3),OBJPROP_COLOR,clrOrangeRed);
}