[i]ATR汉译

//[i]ATR汉译

property indicator_separate_window

property indicator_buffers 1

property indicator_color1 DodgerBlue

input int 周期=14;

double ATR组[];
double TR组[];

//+----------------------------初始化----------------------------+

int OnInit(void)
{
string 名称;
//--- 附加一个缓组
IndicatorBuffers(2);
IndicatorDigits(Digits);
//--- 显示线
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ATR组);
SetIndexBuffer(1,TR组);
//--- 名称
名称="ATR("+IntegerToString(周期)+")";
IndicatorShortName(名称);
SetIndexLabel(0,名称);
//--- 检查函数
if(周期<=0)
{
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,
limit;
//--- 棒数检查
if(rates_total<=周期 || 周期<=0)
return(0);
//--- 从0到rates_total计数
ArraySetAsSeries(ATR组,false);
ArraySetAsSeries(TR组,false);
ArraySetAsSeries(open,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(close,false);
//--- 准备部分
if(prev_calculated==0)
{
TR组[0]=0.0;
ATR组[0]=0.0;
//--- 填充真实幅度给每一个数组
for(i=1; i TR组[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
//--- 首个ATR值的计算
double 首值=0.0;
for(i=1; i<=周期; i++)
{
ATR组[i]=0.0;
首值 += TR组[i];
}
//---
首值 /= 周期;
ATR组[周期]= 首值;
limit= 周期+1;
}
else
limit= prev_calculated-1;

//--- 主循环部分
for(i=limit; i {
TR组[i]= MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);//现高与前收中最大值-现低与前收中最小值
ATR组[i]= ATR组[i-1]+(TR组[i]-TR组[i-周期])/周期; //现值为 前值+前一值减周期前的值后除以周期数
}
//---
return(rates_total);
}
//+-------------------------------谢谢点赞-----------------------------------+

你可能感兴趣的:([i]ATR汉译)