Q: hhv与llv第2个参数为0的用法说明
A:
第二个参数为0时,计算从上市以来的历史最高/最低。
注意,计算上市以来的最高/最低时,0必须用常量。比如hhv(high(),0)。不能为变量的方式:N:=0; hhv(high(),N)。
原因是:
1、给定常量0,函数在解析时会作为特殊含义处理,即统计上市以来的数据,认为用户有预期地去做这个实现。
2、如果0是通过变量传递的,比如:
N:=tradedays(begt,endt);
hhv(high(),N);
当期间交易周期为0,即N值意外为0时,这时若也去统计上市以来的数据,就不符合用户预期。且若此时当前周期为秒线级别,就要去统计上市以来的所有秒线级别的该指标,就是一个非常巨大的调用,极大地影响到运行的效率,为了避免这种错误操作,2020-10-14日更新的版本作了以下处理:
1)、 如果设置为0从上市日开始推算确定符合预期,则0必须是常量,即hhv(exp,0)与llv(exp,0)。
2)、 若通过变量传递,此时变量值为0时,hhv/llv运行会抛异常,认为你这个运算有错不符合预期,要修正参数的值。
比如,即执行下面这一段会报错:
setsysparam(pn_stock(),‘SH600004’);
n:=0;
return hhv(high(),N);//N为变量传值
而执行这一段不会报错,且返回历史最高:
setsysparam(pn_stock(),‘SH600004’);
return hhv(high(),0);//0为常量