RSIOMA_v2HHLSX
Download scriptThis script is a customized technical analysis tool designed to help traders visualize momentum, trend strength, and potential price reversals. It builds upon the standard Relative Strength Index (RSI) by adding layers of moving averages and visual "triggers" to filter out market noise and identify high-probability entry points.
Here is a breakdown of the logic used by this tool:
Core Data Processing
The indicator does not look at the raw price directly to calculate its primary momentum. Instead, it applies a Moving Average to the price first. It then calculates the RSI based on that moving average. This creates a "smoothed" momentum reading, which helps prevent the erratic jumps often seen in standard RSI indicators during volatile market conditions.
Trend and Momentum Visualization
The tool categorizes the market's behavior into several visual components:
- Primary Momentum: A main line tracks the smoothed RSI value, showing whether the current momentum is leaning bullish or bearish.
- Moving Average Overlay: A secondary moving average (MaRsioma) is calculated on top of the RSI data. This acts as a baseline; when the RSI crosses above or below this line, it signals a shift in short-term momentum.
- Trend Histograms: The script uses background histograms to highlight different "zones" of market strength:
- Bullish Zone: When the momentum is above the middle threshold (50), the histogram identifies upward pressure.
- Bearish Zone: When the momentum falls below the lower threshold, it identifies downward pressure.
- Extreme Zones: The tool highlights specifically when the price enters deep "Overbought" or "Oversold" territory based on predefined levels (such as 30 and 70).
Signal Triggers
To assist with decision-making, the script provides three specific types of visual cues:
- Cross Signals: The tool identifies "X-Signals," which occur when the momentum line crosses its moving average. These are represented by arrows on the chart to indicate a change in direction.
- Reversal Points: It monitors for "hooks" at extreme levels. For example, if the RSI is very low but begins to turn upward, or if it is very high but starts to dip, the script marks these as potential reversal points.
- Dynamic Levels: The chart features permanent horizontal lines that define the boundaries for "Main Trends" and "Triggers." These act as visual guides for traders to see at a glance how close the current price action is to becoming overextended or exhausting its current trend.
Summary for the User
In short, this script takes standard momentum data and "cleans" it using moving averages. It then translates that data into a color-coded map of histograms and arrows, allowing you to see not just if the price is moving, but whether that move has enough strength to continue or if it is reaching a point of exhaustion where a reversal might occur.
//+--------------------------------------------------------------------------------+
//| RSIOMAv2HHLSX Kalenzo fxtsd.com |
//| Hornet(i-RSI) 2007, FxTSD.com; MetaQuotes Software Corp. ik|
//| Hist & Levels 20/80;30/70 CrossSig web: http://www.fxservice.eu |
//| Rsioma/MaRsioma X sig email: bartlomiej.gorski@gmail.com |
//+--------------------------------------------------------------------------------+
// The base for this indicator was orginal RSI attached with Metatrader.
// ^^ removed ^^ :)|-< Hornet
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
#property indicator_separate_window
#property indicator_minimum -20
#property indicator_maximum 120
#property indicator_buffers 7
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Magenta
#property indicator_color5 DodgerBlue
#property indicator_color6 BlueViolet
#property indicator_color7 SlateBlue //RoyalBlue
//#property indicator_color8 MediumSlateBlue
#property indicator_width1 2
#property indicator_width4 2
#property indicator_width5 2
#property indicator_width7 2
#property indicator_level1 100
#property indicator_level2 80
//#property indicator_level3 70
#property indicator_level4 50
//#property indicator_level5 30
#property indicator_level6 20
#property indicator_level7 0
#property indicator_levelcolor SlateGray
//---- input parameters
extern int RSIOMA = 14;
extern int RSIOMA_MODE = MODE_EMA;
extern int RSIOMA_PRICE = PRICE_CLOSE;
extern int Ma_RSIOMA = 21,
Ma_RSIOMA_MODE = MODE_EMA;
extern double BuyTrigger = 80.00;
extern double SellTrigger = 20.00;
extern color BuyTriggerColor = DodgerBlue;
extern color SellTriggerColor = Magenta;
extern double MainTrendLong = 70.00;
extern double MainTrendShort = 30.00;
extern color MainTrendLongColor = Red;
extern color MainTrendShortColor = Green;
extern double MajorTrend = 50;
extern color marsiomaXSigColor = SlateBlue;
//extern color marsiomaXdnSigColor = MediumSlateBlue;
//---- buffers
double RSIBuffer[];
double MABuffer1[];
double bdn[],bup[];
double sdn[],sup[];
double marsioma[];
double marsiomaXSig[];
//double marsiomaXdnSig[];
string short_name;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
short_name = StringConcatenate("RSIOMA(",RSIOMA,")");
IndicatorBuffers(8);
SetIndexBuffer(0,RSIBuffer);
SetIndexBuffer(2,bup);
SetIndexBuffer(1,bdn);
SetIndexBuffer(3,sdn);//Magnet
SetIndexBuffer(4,sup);//DodgerBlue
SetIndexBuffer(5,marsioma);
SetIndexBuffer(6,marsiomaXSig);
// SetIndexBuffer(7,marsiomaXdnSig);
SetIndexBuffer(7,MABuffer1);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexStyle(4,DRAW_HISTOGRAM);
SetIndexStyle(5,DRAW_LINE);
SetIndexStyle(6,DRAW_ARROW);
// SetIndexStyle(7,DRAW_ARROW);
SetIndexArrow(6,159);//85,88,251(x),252';108,158,159(dot);161,162(crcl);110,167(sq);176-179('scope');11-113,250(hlwSq)
// SetIndexArrow(7,159);
// SetIndexEmptyValue(6,EMPTY_VALUE);
// SetIndexEmptyValue(7,EMPTY_VALUE);
SetIndexLabel(0,"Rsioma");
SetIndexLabel(5,"MaRsioma");
SetIndexLabel(1,"TrendDn");
SetIndexLabel(2,"TrendUp");
SetIndexLabel(6,"Up/DnXsig");
IndicatorShortName(short_name);
SetIndexDrawBegin(0,RSIOMA);
SetIndexDrawBegin(1,RSIOMA);
SetIndexDrawBegin(2,RSIOMA);
SetIndexDrawBegin(3,RSIOMA);
SetIndexDrawBegin(4,RSIOMA);
SetIndexDrawBegin(5,RSIOMA);
SetIndexDrawBegin(6,RSIOMA);
SetIndexDrawBegin(7,RSIOMA);
//----
drawLine(BuyTrigger,"BuyTrigger", BuyTriggerColor);
drawLine(SellTrigger,"SellTrigger", SellTriggerColor );
drawLine(MainTrendLong,"MainTrendLong", MainTrendLongColor );
drawLine(MainTrendShort,"MainTrendShort",MainTrendShortColor );
return(0);
}
//+------------------------------------------------------------------+
//| Relative Strength Index |
//+------------------------------------------------------------------+
int start()
{
int i, ii;
int counted_bars=IndicatorCounted();
double rel,negative,positive;
//----
if(Bars<=RSIOMA) return(0);
//---- initial zero
if(counted_bars<1)
for(i=1;i<=RSIOMA;i++) {RSIBuffer[Bars-i]=0.0;}
//----
ii=Bars-RSIOMA-1;
if(counted_bars>=RSIOMA) ii=Bars-counted_bars-1;
i = ii;
while(i>=0)
{ MABuffer1[i]=iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i);
i--; }
i=ii;
while(i>=0)
{ RSIBuffer[i]=iRSIOnArray(MABuffer1,0,RSIOMA,i);
if(RSIBuffer[i]>50) bup[i] = 6;
if(RSIBuffer[i]<50) bdn[i] = -6;
if(RSIBuffer[i] > MainTrendLong) bup[i] = 12;
if(RSIBuffer[i] < MainTrendShort) bdn[i] = -12;
if(RSIBuffer[i]<20 && RSIBuffer[i]>RSIBuffer[i+1]) sup[i] = -3;
if(RSIBuffer[i]>80 && RSIBuffer[i]<RSIBuffer[i+1]) sdn[i] = 4;
if(RSIBuffer[i]>20 && RSIBuffer[i+1]<=20) sup[i] = 5;
if(RSIBuffer[i+1]>=80 && RSIBuffer[i]<80) sdn[i] = -5;
if(RSIBuffer[i+1]<=MainTrendShort && RSIBuffer[i]>MainTrendShort) sup[i] = 12;
if(RSIBuffer[i]<MainTrendLong && RSIBuffer[i+1]>=MainTrendLong) sdn[i] = -12;
i--; }
i=ii;
while(i>=0)
{ marsioma[i] = iMAOnArray(RSIBuffer,0,Ma_RSIOMA,0,Ma_RSIOMA_MODE,i);
marsiomaXSig[i] = EMPTY_VALUE;
//marsiomaXdnSig[i] = EMPTY_VALUE;
if(RSIBuffer[i+1]<=marsioma[i+1]&&RSIBuffer[i]>marsioma[i]) marsiomaXSig[i] = -8;
if(RSIBuffer[i+1]>=marsioma[i+1]&&RSIBuffer[i]<marsioma[i]) marsiomaXSig[i] = 8;
i--;}
//----
return(0);
}
//+------------------------------------------------------------------+
void drawLine(double lvl,string name, color Col )
{
ObjectDelete(name);
ObjectCreate(name, OBJ_HLINE, WindowFind(short_name), Time[0], lvl,Time[0], lvl);
ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
ObjectSet(name, OBJPROP_COLOR, Col);
ObjectSet(name,OBJPROP_WIDTH,1);
}
Comments