FOR循环语句里,如果实现MACD功能。

我有若干个图层,需要同时计算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方案计算出来的值不正确--*/

循环语句
关于循环语句的问题
循环里,怎么把序列函数放在循环外,而不会触发警告?
文华 NODRAW 功能实现
请问如果不写此语句会有什么后果?
For 循环语句能从大到小计算吗
buy函数能否实现单独“买开”功能
TBQ可以实现这个功能吗?
数据同比功能如何简单实现
TB能否实现语音播报功能?

自定义字段也是用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);

}

好的,谢谢,如果在代码多图层共用方面,有更简便的方式就好了。