我有若干个图层,需要同时计算MACD值,为了减少代码量,我想通过FOR循环来实现各个图层的计算。目前采用了以下两种方案,都失败了,求助。
/*---以下为方案A,但计算出来的值不正确---i是订阅的图层ID----*/
OnBar(ArrayRef<Integer> indexs)
{
For i = 1 to 4
{
data[i].DIF = data[i].XAverage( Close, MN1 ) - data[i].XAverage( Close, MN2 );
data[i].DEA = data[i].XAverage( DIF, MN3 );
data[i].ACD = 2 * ( data[i].DIF - data[i].DEA );
}
}
/*--但是以上A方案代码编译出错,DIF、DEA行号,提示:警告 FOR,WHILE,IF,ELSE中包含序列函数,可能存在潜在的逻辑错误。请确认代码无误--*/
/*---以下为方案B,---i是订阅的图层ID----*/
Vars
Series<Numeric> EMA11;
Series<Numeric> EMA22;
Series<Numeric> EMA33;
OnBar(ArrayRef<Integer> indexs)
{
EMA11 = XAverage( Close, MN1 );
EMA22 = XAverage( Close, MN2 );
EMA33 = XAverage( DIF, MN3 );
For i = 1 to 4
{
data[i].DIF = data[i].EMA11 - data[i].EMA22;
data[i].DEA = data[i].EMA33;
data[i].ACD = 2 * ( data[i].DIF - data[i].DEA );
}
}
/*--但以上B方案计算出来的值不正确--*/
自定义字段也是用RANGE
然后你的问题是:
1、编译不过?
2、结果不对?
3 其他
为甚不不用 Range[0:datacount-1], 这是tb的最大特色, 多图层处理啊,
我需要做行情自定义指标字段
计算指标可以先用range,然后在0图层输出, 比如
range[0:datacount-1]
{
计算macd
}
然后
range[0:0]
{
plotauto(“图层1macd”,data[1].macd);
plotauto(“图层2macd”,data[2].macd);
}
好的,谢谢,如果在代码多图层共用方面,有更简便的方式就好了。