变量声明问题咨询

老师好,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的序列参数(或变量)的值,就会导致函数计算出来的值是错误的。所以,我们才会要求,序列函数不要放在条件语句中。