FAQ > 金融建模 > 建模问题 > 债券相关

Q:可转债的隐含波动率的提取    

  • A:天软提供了一种可转债隐含波动率的计算,计算模型为:CB_ImpliedVolatility()
    其返回值是个百分比数值。
    相关算法说明请参考:FAQ:2022-03-10-应用专题-可转债系列06:基于BSM模型探究可转债估值
    下面提供多种场景下的提取范例:
    提取范例01:取一个券指定日的隐含波动率

    //计算格力转债在2019年10月22日的隐含波动率
         SetSysParam(PN_Stock(),'SH110030');
         SetSysParam(pn_date(),20191022T);
         return CB_ImpliedVolatility();//返回:42.63%



    提取范例02:取多个券指定日的隐含波动率

    //样本
         stocks:=array('SH110038','SH110043','SH110044','SH110045');
         endt:=20220418T;
         ret:=array();
         SetSysParam(pn_date(),endt); //设置指定日
         sEndt:=datetostr(endt);
         for i:=0 to length(stocks)-1 do
         begin
             SetSysParam(PN_Stock(),stocks[i]);
             echo stocks[i];
             ret[i,'StockID']:=stocks[i];
             ret[i,'StockName']:=stockName(stocks[i]);
             ret[i,'指定日']:=sEndt;
             ret[i,'价格']:=close();
             ret[i,'隐含波动率(%)']:=CB_ImpliedVolatility();
         end
         return ret;

    返回:


    提取范例03:取一个券一段时间内每日的隐含波动率

    SetSysParam(PN_Stock(),'SH110030');
         SetSysParam(pn_date(),20220418T);
         return nday(10,'time',datetostr(sp_time()),'隐含波动率(%)',CB_ImpliedVolatility());

    返回:


    img id=25254][/img]

    提取范例04:取多个券一段时间内每日的隐含波动率

    //样本
         stocks:=array('SH110038','SH110043','SH110044','SH110045');
         begt:=20220410T;
         endt:=20220418T;
         ret:=array();
         k:=0;
         Tarr:=MarketTradeDayQk(begt,endt); //获取区间交易日序列
         for j:=0 to length(Tarr)-1 do   //日期循环
         begin
             d:=Tarr[j];
             SetSysParam(pn_date(),d); //设置指定日
             sEndt:=datetostr(d);
             for i:=0 to length(stocks)-1 do     //股票循环
             begin
                 SetSysParam(PN_Stock(),stocks[i]); //设置当前股票
                 ret[k,'StockID']:=stocks[i];
                 ret[k,'StockName']:=stockName(stocks[i]);
                 ret[k,'指定日']:=sEndt;
                 ret[k,'价格']:=close();
                 ret[k,'隐含波动率(%)']:=CB_ImpliedVolatility();
                 k++;
             end
         end
         return ret;

    返回: