我想在后台程序化模式下写一个计算历史波动率的公式,周期是日线,历史波动率是过去20天的每日收益率的标准差,公式如下FOR i=2 to 20 DO rdaily[i]:=REF(CLOSE,i-1)/REF(CLOSE,i)-1; //这一行计算的是前19天的每日收益率,编译后提示REF 函数在循环语句中可能会带来风险
rdaily[1]:=DYNAINFO(7)/REF(CLOSE,1)-1; //这一行计算的是昨收盘价到当前最新价的收益率
histvol:=STD(rdaily,20); //计算波动率,可以这么用STD函数吗?
请问语句这么编写可行吗?或者有没有大神能够帮忙写一个更高效的语句,谢谢了
[此贴子已经被作者于2017/8/30 15:09:22编辑过]
不好意思,发现一个新问题,由于我的波动率计算需要加入最新价的影响(见第二行代码),而volatiliy函数只能计算历史值,请问怎么改写呢?
利用VOLATILITY函数并且考虑增加最近价的影响,我写了一个新的公式,大神能否看下这个式子是否正确
temphisvol:=VOLATILITY(19); //这行计算前19天的历史波动率
rcurrent:=DYNAINFO(7)/REF(CLOSE,1)-1; //计算昨收盘价到最新价的收益率
histvol:=SQRT( ( POW(temphistvol,2)*19/252+POW(rcurrent,2) ) /20*252); //将19天的历史波动率和最新价的收益率结合起来计算20天的波动率