#property copyright "TheXpert" #property link "theforexpert@gmail.com" #property indicator_separate_window #property indicator_maximum 100 #property indicator_minimum 0 #property indicator_buffers 3 #property indicator_color1 DeepSkyBlue #property indicator_color2 Red #property indicator_color3 Khaki //---- input parameters extern string RSIPeriod_Desc = "Ïåðèîä RSI"; extern int RSIPeriod = 14; extern string RSIPrice_Desc = "Öåíà RSI: 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted"; extern int RSIPrice = 0; extern string HighLevel_Desc = "Âåðõíèé óðîâåíü RSI"; extern int HighLevel = 70; extern string LowLevel_Desc = "Íèæíèé óðîâåíü RSI"; extern int LowLevel = 30; extern string MarkFalse_Desc = "Ìàðêèðîâàòü èëè íåò áàðû, êîòîðûå ïðè ôîðìèðîâàíèè çàëàçèëè çà óðîâíè"; extern bool MarkFalse = false; extern string Transparent_Desc = "Ðèñîâàòü RSI ïîâåðõ öâåòíûõ óðîâíåé"; extern bool Transparent = true; extern string Width_Desc = "Øèðèíà ñèãíàëüíûõ ëèíèé"; extern int Width = 3; //---- buffers double RSI[]; double Inner[]; double Higher[]; double Lower[]; /// \brief Equal to ternar operator /// needed = Condition ? IfTrue : IfFalse; /// \param IfTrue /// \param IfFalse /// \return matching value from parameters double DoubleIf(bool Condition, double IfTrue, double IfFalse) { if (Condition) return (IfTrue); else return (IfFalse); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(4); SetIndexBuffer(0, Higher); SetIndexBuffer(1, Lower); SetIndexBuffer(2, Inner); SetIndexBuffer(3, RSI); SetLevelValue(0, HighLevel); SetLevelValue(1, LowLevel); SetIndexLabel(0, "RSI"); SetIndexLabel(1, "Âûøå óðîâíÿ"); SetIndexLabel(2, "Íèæå óðîâíÿ"); SetIndexStyle(0, DRAW_LINE, EMPTY, Width); SetIndexStyle(1, DRAW_LINE, EMPTY, Width); SetIndexDrawBegin(0, RSIPeriod + 1); SetIndexDrawBegin(1, RSIPeriod + 1); SetIndexDrawBegin(2, RSIPeriod + 1); IndicatorShortName("Öâåòíîé RSI"); IndicatorDigits(2); return(0); } int start() { int ToCount = Bars - IndicatorCounted(); for (int cnt = ToCount - 1; cnt >= 0; cnt--) { RSI[cnt] = iRSI(NULL, 0, RSIPeriod, RSIPrice, cnt); int depth = 2; if (MarkFalse) { depth = 1; } for (int i = cnt + depth - 1; i >= cnt; i--) { Higher[i] = EMPTY_VALUE; Lower[i] = EMPTY_VALUE; Inner[i] = RSI[i]; if (!Transparent) { if (RSI[i] <= LowLevel) { Inner[i] = DoubleIf(RSI[i + 1] > LowLevel, LowLevel, EMPTY_VALUE); } else { Inner[i] = DoubleIf(RSI[i + 1] <= LowLevel, LowLevel, RSI[i]); } if (RSI[i] >= HighLevel) { Inner[i] = DoubleIf(RSI[i + 1] < HighLevel, HighLevel, EMPTY_VALUE); } else { Inner[i] = DoubleIf(RSI[i + 1] >= HighLevel, HighLevel, Inner[i]); } } if(RSI[i] >= HighLevel) { Higher[i] = RSI[i]; Higher[i + 1] = DoubleIf(RSI[i + 1] >= HighLevel, RSI[i + 1], HighLevel); } else if(RSI[i + 1] >= HighLevel) { Higher[i] = HighLevel; Higher[i + 1] = RSI[i + 1]; } if(RSI[i] <= LowLevel) { Lower[i] = RSI[i]; Lower[i + 1] = DoubleIf(RSI[i + 1] <= LowLevel, RSI[i + 1], LowLevel); } else if(RSI[i + 1] <= LowLevel) { Lower[i] = LowLevel; Lower[i + 1] = RSI[i + 1]; } } } return(0); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Relative strength index
Custom Indicators Used:
Order Management characteristics:
Other Features: