RSI-TC_NEW
Download scriptThis tool is designed to provide traders with a comprehensive visual overview of market momentum and volatility by combining three distinct analytical methods: Relative Strength Index (RSI), Bollinger Bands, and Keltner Channels. Its primary goal is to identify high-probability trend shifts and "breakout" opportunities where price action moves from a period of consolidation into a strong directional move.
Core Analytical Components
1. Dynamic Momentum Tracking (Two-Tone RSI) The indicator uses a customized version of the Relative Strength Index (RSI) to measure the speed and change of price movements. Instead of showing a standard single line, it employs a "two-tone" logic:
- It tracks whether the market is leaning toward bullish or bearish territory based on predefined thresholds.
- This helps traders visually distinguish between different phases of momentum, making it easier to see when the market strength is shifting from one side to another.
2. Volatility Squeeze Detection One of the primary functions of this script is identifying "Squeezes." By comparing Bollinger Bands (which measure standard deviation) with Keltner Channels (which measure average true range), the tool detects periods where volatility is unusually tight.
- When the market "squeezes," it indicates that price action is compressing and may soon explode in a significant direction.
- The indicator highlights these zones to warn traders of potential upcoming movement.
3. Intelligent Breakout Signals The script generates specific visual alerts (arrows) on the chart based on three distinct conditions:
- Squeeze Breakouts: It looks for instances where the market was previously "squeezed" and then breaks out in the direction of the RSI momentum.
- Band Expansion: It monitors whether the Bollinger Bands are expanding relative to the Keltner Channels, confirming that the breakout has actual volume and strength behind it.
- Trend Confirmation: Every signal is cross-referenced with the RSI to ensure the breakout aligns with the broader market trend.
User Experience and Alerts
To assist in active trading, the script includes an automated notification system. When the logic identifies a confirmed Buy or Sell breakout, the tool can trigger a real-time alert on your platform. This allows traders to react immediately to new signals without needing to constantly stare at the charts, specifically highlighting the moment the "squeeze" releases into a clear trend.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//compile//
/*
*********************************************************************
RSI with Trend Catcher signal
by Matsu
based on codes from various sources
*********************************************************************
*/
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red
#property indicator_color5 Gold
#property indicator_level1 60
#property indicator_level2 50
#property indicator_level3 40
int BBPrd=20;
double BBDev=2.0;
int SBPrd=13;
int SBATRPrd=21;
double SBFactor=2;
int SBShift=1;
extern int RSIPeriod=21;
extern int BullLevel=50;
extern int BearLevel=50;
extern bool AlertOn = true;
double RSI[];
double DnRSI[];
double Buy[];
double Sell[];
double Squeeze[];
int init()
{
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,RSI);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,DnRSI);
SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID);
SetIndexArrow(2,159);
SetIndexBuffer(2,Buy);
SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID);
SetIndexArrow(3,159);
SetIndexBuffer(3,Sell);
SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID);
SetIndexArrow(4,159);
SetIndexBuffer(4,Squeeze);
IndicatorShortName("RSI("+RSIPeriod+")");
IndicatorDigits(2);
return(0);
}
int start()
{
int counted_bars=IndicatorCounted();
int shift,limit,ob,os;
double BBMA, SBMA, TopBBand, BotBBand, TopBBandPrev, BotBBandPrev, TopSBand, BotSBand;
bool dn = false;
double BuyNow, BuyPrevious, SellNow, SellPrevious;
static datetime prevtime = 0;
if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
limit=Bars-31;
if(counted_bars>=31) limit=Bars-counted_bars-1;
for (shift=limit;shift>=0;shift--)
{
RSI[shift]=iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,shift);
ob = indicator_level1;
os = indicator_level3;
// ========= Two-tone RSI
if (dn==true)
{
if (RSI[shift]>BullLevel)
{
dn=false;
DnRSI[shift]=EMPTY_VALUE;
}
else
{
dn=true;
DnRSI[shift]=RSI[shift];
}
}
else
{
if (RSI[shift]<BearLevel)
{
dn=true;
DnRSI[shift]=RSI[shift];
}
else
{
dn=false;
DnRSI[shift]=EMPTY_VALUE;
}
}
// ========= Two-tone RSI Ends
// ========= Squeeze Signals
BBMA = iMA(NULL,0,BBPrd,0,MODE_SMA,PRICE_CLOSE,shift);
SBMA = iMA(NULL,0,SBPrd,0,MODE_EMA,PRICE_CLOSE,shift+SBShift);
TopBBand = iBands(NULL,0,BBPrd,BBDev,0,PRICE_CLOSE,MODE_UPPER,shift);
BotBBand = iBands(NULL,0,BBPrd,BBDev,0,PRICE_CLOSE,MODE_LOWER,shift);
TopSBand = SBMA + (SBFactor * iATR(NULL,0,SBATRPrd,shift+SBShift));
BotSBand = SBMA - (SBFactor * iATR(NULL,0,SBATRPrd,shift+SBShift));
TopBBandPrev = iBands(NULL,0,BBPrd,BBDev,0,PRICE_CLOSE,MODE_UPPER,shift+1);
BotBBandPrev = iBands(NULL,0,BBPrd,BBDev,0,PRICE_CLOSE,MODE_LOWER,shift+1);
if (TopBBand<TopSBand && BotBBand>BotSBand) Squeeze[shift]=50;
// ========= Squeeze Signals Ends
// ========= BB Breakout Signals
//if(Squeeze[shift+2]==50 && RSI[shift]>50 && BotBBand<BotSBand)
if((Squeeze[shift+2]==50 || Squeeze[shift+1]==50) && RSI[shift]>50 && BotBBand<BotSBand)
{
Buy[shift]=ob;
Sell[shift]=EMPTY_VALUE;
}
else
//if(Squeeze[shift+2]==50 && RSI[shift]<50 && TopBBand>TopSBand)
if((Squeeze[shift+2]==50 || Squeeze[shift+1]==50) && RSI[shift]<50 && TopBBand>TopSBand)
{
Buy[shift]=EMPTY_VALUE;
Sell[shift]=os;
}
else
if(Buy[shift+1]==ob && BotBBand<BotBBandPrev && RSI[shift]>50)
{
Buy[shift]=ob;
Sell[shift]=EMPTY_VALUE;
}
else
if(Sell[shift+1]==os && TopBBand>TopBBandPrev && RSI[shift]<50)
{
Buy[shift]=EMPTY_VALUE;
Sell[shift]=os;
}
else
{
Buy[shift]=EMPTY_VALUE;
Sell[shift]=EMPTY_VALUE;
}
// ========= BB Breakout Signals Ends
}
// ======= Alert =========
if(AlertOn)
{
if(prevtime == Time[0])
{
return(0);
}
prevtime = Time[0];
BuyNow = Buy[0];
BuyPrevious = Buy[1];
SellNow = Sell[0];
SellPrevious = Sell[1];
if((BuyNow ==ob) && (BuyPrevious ==EMPTY_VALUE) )
{
Alert(Symbol(), " M", Period(), " Buy Alert");
}
else
if((SellNow ==os) && (SellPrevious ==EMPTY_VALUE) )
{
Alert(Symbol(), " M", Period(), " Sell Alert");
}
IndicatorShortName("RSI("+RSIPeriod+") (Alert on)");
}
// ======= Alert Ends =========
return(0);
}
Comments