老师好,Average或Highest函数中的变量,按要求应当是序列数值型的。但我下面编写的公式(只是在比较不同变量声明的区别),变量N1声明为数值型时,但在N2及N3的公式中使用,仍可编译通过,并且N2及N3也能输出正确的值。
在此想请教一下
1、下例中,N1变量规范的声明方式,应当是Numeric还是Series<Numeric>?
2、下例中,如果N1变量声明为Numeric是错误的话,请问实际使用当中,会有什么影响?
Vars
Numeric N1;
Numeric N2;
Numeric N3;
Events
OnBar(ArrayRef<Integer> indexs)
{
N1 = Close;
N2 = Average(N1,5);
N3 = Highest(N1,5);
PlotNumeric("N2",N2);
Commentary("N1="+Text(N1));
Commentary("N2="+Text(N2));
Commentary("N3="+Text(N3));
}
您好!N1声明为简单变量或序列变量都可以。Average和Highest内部第一个参数是序列类型的,这个称为序列参数。函数内部的序列参数或序列变量,函数内部会根据传入的参数,生成序列参数(或变量)。所以,即使从公式调用时,传入的是一个序列变量,实际在函数内部也只是得到了该序列变量当前BAR的值,并不是把一个序列变量的所有值都传入。如果扯远一点,这其实就是老生长谈的序列函数问题的根源。因为如果有某根BAR该函数没有被调用,函数内部就少了这根BAR的序列参数(或变量)的值,就会导致函数计算出来的值是错误的。所以,我们才会要求,序列函数不要放在条件语句中。