Indicators Used
4
Views
0
Downloads
0
Favorites
RSI_X20
ÿþ//+------------------------------------------------------------------+
//| RSI_X20.mq5 |
//| Copyright © 2010, Ivan Kornilov |
//| excelf@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Ivan Kornilov"
#property link "excelf@gmail.com"
#property description "204F0BL 8=48:0B>@>2 RSI 2 >4=>< >:=5"
//---- =><5@ 25@A88 8=48:0B>@0
#property version "1.10"
//---- >B@8A>2:0 8=48:0B>@0 2 >B45;L=>< >:=5
#property indicator_separate_window
//---- ?0@0<5B@K <8=8<0;L=>3> 8 <0:A8<0;L=>3> 7=0G5=89 8=48:0B>@0
#property indicator_minimum 0
#property indicator_maximum 100
//---- ?0@0<5B@K 3>@87>=B0;L=KE C@>2=59 8=48:0B>@0
#property indicator_level1 70
#property indicator_level2 50
#property indicator_level3 30
#property indicator_levelcolor clrTeal
#property indicator_levelstyle STYLE_DASHDOTDOT
//+-----------------------------------+
//| >1JO2;5=85 :>=AB0=B |
//+-----------------------------------+
#define LINES_TOTAL 20 // >=AB0=B0 4;O :>;8G5AB20 ;8=89 8=48:0B>@0
#define RESET 0 // >=AB0=B0 4;O 2>72@0B0 B5@<8=0;C :><0=4K =0 ?5@5AGQB 8=48:0B>@0
//---- :>;8G5AB2> 8=48:0B>@=KE 1CD5@>2
#property indicator_buffers LINES_TOTAL
//---- 8A?>;L7>20=> 2A53> 3@0D8G5A:8E ?>AB@>5=89
#property indicator_plots LINES_TOTAL
//+-----------------------------------+
//| 0@0<5B@K >B@8A>2:8 8=48:0B>@>2 |
//+-----------------------------------+
//---- >B@8A>2:0 >AF8;;OB>@>2 2 2845 ;8=89
#property indicator_type1 DRAW_LINE
//---- 2K1>@ F25B>2 ;8=89
#property indicator_color1 clrRed
//---- ;8=88 - HB@8E?C=:B8@=K5 :@82K5
#property indicator_style1 STYLE_SOLID
//---- B>;I8=0 ;8=89 1
#property indicator_width1 1
//+-----------------------------------+
//| E>4=K5 ?0@0<5B@K 8=48:0B>@0 |
//+-----------------------------------+
input uint StartRSIPeriod=5; // AB0@B>2K9 ?5@8>4
input uint step = 1; // H03 ?5@8>40
input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE; // F5=0
//+-----------------------------------+
//---- 1JO2;5=85 F5;KE ?5@5<5==KE 4;O E5=4;>2 8=48:0B>@>2
int Ind_Handle[LINES_TOTAL];
//---- 1JO2;5=85 F5;KE ?5@5<5==KE =0G0;0 >BAGQB0 40==KE
int min_rates_total;
//+------------------------------------------------------------------+
//| 0AA82K ?5@5<5==KE 4;O A>740=8O 8=48:0B>@=KE 1CD5@>2 |
//+------------------------------------------------------------------+
class CIndicatorsBuffers
{
public: double IndBuffer[];
};
//+------------------------------------------------------------------+
//| !>740=85 8=48:0B>@=KE 1CD5@>2 |
//+------------------------------------------------------------------+
CIndicatorsBuffers Ind[LINES_TOTAL];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- =8F80;870F8O ?5@5<5==KE =0G0;0 >BAGQB0 40==KE
min_rates_total=int(StartRSIPeriod+step*(LINES_TOTAL-1))+1;
uint Maxrange=StartRSIPeriod+LINES_TOTAL*(step-1+1)*2;
//----
uint period=StartRSIPeriod;
for(int numb=0; numb<LINES_TOTAL; numb++)
{
period+=step;
//---- ?>;CG5=85 E5=4;0 8=48:0B>@0 iRSI
Ind_Handle[numb]=iRSI(Symbol(),0,period,RSIPrice);
if(Ind_Handle[numb]==INVALID_HANDLE) Print(" 5 C40;>AL ?>;CG8BL E5=4; 8=48:0B>@0 iRSI ",numb);
string shortname="";
StringConcatenate(shortname,"iRSI X",LINES_TOTAL,"*",period,")");
//--- A>740=85 8<5=8 4;O >B>1@065=8O 2 >B45;L=>< ?>4>:=5 8 2> 2A?;K20NI59 ?>4A:07:5
PlotIndexSetString(numb,PLOT_LABEL,shortname);
//---- CAB0=>2:0 7=0G5=89 8=48:0B>@0, :>B>@K5 =5 1C4CB 2848<K =0 3@0D8:5
PlotIndexSetDouble(numb,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- >ACI5AB2;5=85 A42830 =0G0;0 >BAGQB0 >B@8A>2:8 8=48:0B>@0
PlotIndexSetInteger(numb,PLOT_DRAW_BEGIN,min_rates_total);
//---- ?@52@0I5=85 48=0<8G5A:8E <0AA82>2 2 8=48:0B>@=K5 1CD5@K
SetIndexBuffer(numb,Ind[numb].IndBuffer,INDICATOR_DATA);
//---- 8=45:A0F8O M;5<5=B>2 2 1CD5@0E :0: 2 B09<A5@8OE
ArraySetAsSeries(Ind[numb].IndBuffer,true);
//---- :>?8@>20=85 A2>9AB2 ?5@2>9 ;8=88 8=48:0B>@0 4;O 2A5E >AB0;L=KE
PlotIndexSetInteger(numb,PLOT_DRAW_TYPE,PlotIndexGetInteger(0,PLOT_DRAW_TYPE));
PlotIndexSetInteger(numb,PLOT_LINE_STYLE,PlotIndexGetInteger(0,PLOT_LINE_STYLE));
PlotIndexSetInteger(numb,PLOT_LINE_WIDTH,PlotIndexGetInteger(0,PLOT_LINE_WIDTH));
PlotIndexSetInteger(numb,PLOT_LINE_COLOR,PlotIndexGetInteger(0,PLOT_LINE_COLOR));
//---- 70?@5B =0 >B>1@065=85 7=0G5=89 8=48:0B>@0 2 ;52>< 25@E=5< C3;C >:=0 8=48:0B>@0
PlotIndexSetInteger(numb,PLOT_SHOW_DATA,false);
}
//---- 8=8F80;870F88 ?5@5<5==>9 4;O :>@>B:>3> 8<5=8 8=48:0B>@0
string shortname;
StringConcatenate(shortname,"iRSI X",LINES_TOTAL,"*",StartRSIPeriod,"(",step,")");
//--- A>740=85 8<5=8 4;O >B>1@065=8O 2 >B45;L=>< ?>4>:=5 8 2> 2A?;K20NI59 ?>4A:07:5
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- >?@545;5=85 B>G=>AB8 >B>1@065=8O 7=0G5=89 8=48:0B>@0
IndicatorSetInteger(INDICATOR_DIGITS,0);
//---- 7025@H5=85 8=8F80;870F88
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(
const int rates_total, // :>;8G5AB2> 8AB>@88 2 10@0E =0 B5:CI5< B8:5
const int prev_calculated,// :>;8G5AB2> 8AB>@88 2 10@0E =0 ?@54K4CI5< B8:5
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[]
)
{
//---- ?@>25@:0 :>;8G5AB20 10@>2 =0 4>AB0B>G=>ABL 4;O @0AGQB0
if(rates_total<min_rates_total) return(RESET);
for(int numb=0; numb<LINES_TOTAL; numb++) if(BarsCalculated(Ind_Handle[numb])<min_rates_total) return(RESET);
for(int numb=0; numb<LINES_TOTAL; numb++) if(BarsCalculated(Ind_Handle[numb])<rates_total) return(RESET);
//---- >1JO2;5=8O ;>:0;L=KE ?5@5<5==KE
int to_copy;
//---- @0AGQB =5>1E>48<>3> :>;8G5AB20 :>?8@C5<KE 40==KE
if(prev_calculated>rates_total || prev_calculated<=0) // ?@>25@:0 =0 ?5@2K9 AB0@B @0AGQB0 8=48:0B>@0
to_copy=rates_total;
else to_copy=rates_total-prev_calculated+1;
//---- :>?8@C5< 2=>2L ?>O282H85AO 40==K5 2 8=48:0B>@=K5 1CD5@K
for(int numb=0; numb<LINES_TOTAL; numb++) if(CopyBuffer(Ind_Handle[numb],0,0,to_copy,Ind[numb].IndBuffer)<=0) return(RESET);
//----
return(rates_total);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---