4[i过]RSI汉译

//[i]RSI汉译

property indicator_separate_window

property indicator_minimum 0

property indicator_maximum 100

property indicator_buffers 1

property indicator_color1 DodgerBlue

property indicator_level1 30.0

property indicator_level2 70.0

property indicator_levelcolor clrSilver

property indicator_levelstyle STYLE_DOT

//--- input parameters
input int 周期=14; // RSI Period
//--- buffers
double RSI值组[];
double 正和均组[];
double 负和均组[];
//+------------------------------------------------------------------+
//| 初始化 |
//+------------------------------------------------------------------+
int OnInit(void)
{
string 名称;
//--- 用在计算中的两个附加缓存
IndicatorBuffers(3);
SetIndexBuffer(1,正和均组);
SetIndexBuffer(2,负和均组);
//---指标线
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,RSI值组);
//---数据窗口名与指标标签
名称="RSI("+string(周期)+")";
IndicatorShortName(名称);
SetIndexLabel(0,名称);
//---检查
if(周期<2)
{
Print("无效的周期参数= ",周期);
return(INIT_FAILED);
}
//---
SetIndexDrawBegin(0,周期);
//---完成初始化
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 主函数 |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
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[])
{
int i,pos;
double 差幅;
//---
if(Bars<=周期 || 周期<2)
return(0);
//--- 从0到rates总数计数
ArraySetAsSeries(RSI值组,false);
ArraySetAsSeries(正和均组,false);
ArraySetAsSeries(负和均组,false);
ArraySetAsSeries(close,false);
//---准备计算
pos= prev_calculated-1;

if(pos<=周期)
{
//---首个RSI周期值不计算
RSI值组[0]= 0.0;
正和均组[0]= 0.0;
负和均组[0]= 0.0;
double 正和= 0.0;
double 负和= 0.0;

  for(i=1; i<=周期; i++)
    {
     RSI值组[i]= 0.0;
     正和均组[i]= 0.0;
     负和均组[i]= 0.0;
     差幅= close[i]-close[i-1];
     if(差幅>0)
        正和 += 差幅;
     else
        负和 -= 差幅;
    }
  //---计算首个可见值
  正和均组[周期]= 正和/周期;
  负和均组[周期]= 负和/周期;
  if(负和均组[周期]!= 0.0)
     RSI值组[周期]= 100.0-(100.0/(1.0+正和均组[周期]/负和均组[周期]));
  else
    {
     if(正和均组[周期]!=0.0)
        RSI值组[周期]= 100.0;
     else
        RSI值组[周期]= 50.0;
    }
  //---准备位置数给主循环计算
  pos= 周期+1;
 }

//---主循环内容
for(i=pos; i {
差幅= close[i]-close[i-1];
正和均组[i]= (正和均组[i-1](周期-1)+(差幅>0.0?差幅:0.0))/周期;
负和均组[i]= (负和均组[i-1]
(周期-1)+(差幅<0.0?-差幅:0.0))/周期;
if(负和均组[i]!=0.0)
RSI值组[i]= 100.0-100.0/(1+正和均组[i]/负和均组[i]);
else
{
if(正和均组[i]!=0.0)
RSI值组[i]= 100.0;
else
RSI值组[i]= 50.0;
}
}
//---
return(rates_total);
}
//+----------------------------------谢谢点赞--------------------------------+

你可能感兴趣的:(4[i过]RSI汉译)