FAQ > 金融建模 > 建模问题 > 语法相关

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为常量