[MT4指标]Figurelli RSI Auto指标
主图指标
mt4指标类型:震荡指标
是否能用在mt4手机版上:否
是否含有未来函数:无
//+------------------------------------------------------------------+
//| Figurelli RSI Auto.mq4 |
//| Copyright ? 2011, Rogerio Figurelli |
//| http://www.trajecta.com.br |
//+------------------------------------------------------------------+
#property copyright \"Copyright ? 2011, Rogerio Figurelli\"
#property link \"http://www.trajecta.com.br\"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 70
#property indicator_level2 50
#property indicator_level3 30
//---- input parameters
extern int period=120;
//---- global vars
static double gain;
static double buffer_indicator;
static double buffer_positive;
static double buffer_negative;
static string name;
//+------------------------------------------------------------------+
//| Initialization |
//+------------------------------------------------------------------+
int init() {
gain=period/5;
if (gain<1) gain=1;
IndicatorBuffers(3);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,buffer_indicator);
name=\"Figurelli RSI Auto (\"+period+\",\"+gain+\")\";
IndicatorShortName(name);
SetIndexLabel(0,name);
SetIndexDrawBegin(0,period);
SetIndexBuffer(1,buffer_positive);
SetIndexBuffer(2,buffer_negative);
return(0);
}
//+------------------------------------------------------------------+
//| Figurelli Relative Strength Index |
//+------------------------------------------------------------------+
int start() {
int i,j;
int counted_bars=IndicatorCounted();
double diff;
double negative,n;
double positive,p;
bool gainOK;
if (Bars<=period) return(0);
if (counted_bars<1) {
for (i=1;i<=period;i++)
buffer_indicator[Bars-i]=0;
}
i=Bars-period-1;
if (counted_bars>=period)
i=Bars-counted_bars-1;
while (i>=0) {
n=0;
p=0;
if (i==(Bars-period-1)) {
j=Bars-2;
while (j>=i) {
diff=Close[j]-Close[j+1];
if (diff>0)
p+=diff;
else
n-=diff;
j--;
}
positive=p/period;
negative=n/period;
}
else {
diff=Close-Close[i+1];
if (diff>0)
p=diff;
else
n=-diff;
positive=(buffer_positive[i+1]*(period-1)+p)/period;
negative=(buffer_negative[i+1]*(period-1)+n)/period;
}
buffer_positive=positive;
buffer_negative=negative;
if (negative==0)
buffer_indicator=0;
else
buffer_indicator=100-100/(1+positive/negative);
buffer_indicator-=50;
buffer_indicator*=gain;
if (buffer_indicator<-50) {
buffer_indicator=-50;
gain-=0.1;
if (gain<1) gain=1;
name=\"Figurelli RSI Auto (\"+period+\",\"+gain+\")\";
IndicatorShortName(name);
SetIndexLabel(0,name);
}
if (buffer_indicator>50) {
buffer_indicator=50;
gain-=0.1;
if (gain<1) gain=1;
name=\"Figurelli RSI Auto (\"+period+\",\"+gain+\")\";
IndicatorShortName(name);
SetIndexLabel(0,name);
}
buffer_indicator+=50;
i--;
}
return(0);
}
//+------------------------------------------------------------------+
发表于:2017-08-11 08:17只看该作者
2楼
谢谢分享!!
韬客社区www.talkfx.co