matlab求解资产隐含波动率及无风险利率初探.doc
1MATLAB求解资产隐含波动率及无风险利率初探APRIMARYEXPLOREINTOFLUCTUATIONSTANDARDDEVIATIONANDNONRISKINTERESTOFANASSETVIAMATLAB吴义能1本文发表于武汉金融2013年第2期,抄袭本论文的成果将受到法律的严惩。摘要按传统方法,布莱克舒尔茨期权定价公式参数中波动率难以获取,无风险利率计算也容易出错。本文在指出传统求波动率和无风险利率的方法的不足的基础上,探索利用市场期权报价,通过求解MATLAB方程,快捷方便地求解隐含波动率和无风险利率的新方法。关键词BS公式无风险利率资产波动率ABSTRACTBLACKSCHOLESULAPROVIDESAEFFECTIVEWAYTOCALCULATETHEPRICEOFAEUROPEANOPTIONHOWEVER,SOMEPARAMETERSINTHISULAAREHARDTOOBTAIN,FIRSTLYTHEFLUCTUATIONSTANDARDDEVIATION,SECONDLYTHENONRISKINTERESTRATETHISPAPEREXPLORESAEASYAPPROACHANDASHORTCUT,ONTHECONTRACTOFTRADITIONAL,TOSOLVETHEFLUCTUATIONANDRATEBYBSULAWITHMATLABSOFTWAREKEYWORDSBLACKSCHOLESULA,NONRISKINTERESTRATE,FLUCTUATIONSTANDARDDEVIATIONOFANASSET1引言无论是资产组合的CAMP模型、BS期权或二叉树期权定价模型还是各类对冲交易模型,其中都涉及到两个非常重要的参数市场上的年化无风险利率(R,以下简称无风险利率)和标的资产的年化波动率标准差(Σ,以下简称波动率)。尤其是在BS期权定价公式中,此二参数更是具有决定性作用。但是,传统的计算无风险利率和波动率的方法比较繁琐,其结果也往往并不精确。本文旨在研究一种通过BS期权定价公式解方程的方法,从而快速且精确地计算此二参数的方法。为此,我们首先要回顾一下BS期权定价公式。BS期权定价公式即布莱克舒尔茨期权定价公式,该公式是美国经济学家布莱克和舒尔茨(英文名,文献)(1973)提出的,该公式有效地解决了欧式期权定价的问题,使得期权的定价从以前的主观猜测变成了科学定价。布莱克舒尔茨期权定价公式的基本型是假设标的资产或股票没有红利。本文仅讨论无收益资产或股票的情况。无收益资产或股票的欧式看涨期权的BS定价公式为CSND1KERTND2TRKSLN11吴义能(1975),男(汉族),湖北武汉人,华中科技大学武昌经济管理学院,讲师。研究方向衍生金融工具。2TDTRKSD122LN其中C欧式看涨期权的价格,下文有些地方称之为CALLS标的资产期初价格K协议价格R无风险年利率,按连续复利计算Σ资产收益波动的年标准差(波动率)T期权的存续期,以年为单位N()累积正态分布函数。在S,K,T,R和Σ这五个参数中S,K和T是已知的;无风险利率没有现成的,需要选取一个市场利率作为参考;标的资产的波动率也需要复杂的计算才能确定。2求无风险利率和标准差的常规方法及弊端21求无风险利率的常规方法及弊端简单地说,某项资产的无风险利率可以用同期的国债利率来表示,但实际应用中却不是简单地引用国债利率,而要经过转换。以美国的期权为例,在选择某个期权的无风险利率时,往往是采用到期时间与该期权的存续期相近的短期国债的利率作为无风险利率的估计值。由于期权的存续期一般小于一年,小于一年的美国国债是TBILL(国库券),TBILL的报价为贴现率报价,故还要将之转化为连续复利的形式。假设某期权的存续期为100天,某100天到期的TBILL的买入和卖出报价为883877美元,那么计算无风险利率的步骤如下第一步算出无风险债券的价格。由于883877是贴现率报价,国债的期限为100天,设国债的价格为PTB,有PTB100883877/2100/360975556美元第二步设按连续复利R,经过100天的期限之后,这项投资的收益变为100,所以有PTBERTT100,即569710360RE解出R00891即BS公式中可以使用的无风险利率是00891。由上可见,这种常规的求无风险利率的方法存在一定的弊端其一是TBILL的到期时间往往和期权的存续期不完全相同,那么选用TBILL的贴现率转化成的无风险利率就不是图21试错法求隐含波动率的流程3很精确;其二是要将TBILL的贴现率转化为连续复利,其过程较复杂。初学者可能直接把贴现率当无风险利率用了,这样计算出的期权价格就不合理了。22求隐含波动率的常规方法及弊端。求波动率的常规方法有两种,其一是求历史波动率,其二是求隐含波动率。历史波动率是依据资产或股票以往的历史价格,用统计的方法求出收益的波动率。由于历史波动率需要大量的历史数据,并且得出的波动率不能完全预测未来收益的波动,所以更常用的是隐含波动率。隐含波动率实际上是根据已有的期限报价,利用BS公式和其它已知条件,求出已有报价的波动率。这对于期权价格波动较快的期权更有意义。传统的求解隐含波动率的方法是试错法。试错法用手动计算基本上是不可能完成的,必须要编程,设置循环进行计算,同时在程序中设置精确度。从理论上说,可以设置一个很高的精确度。如从0,到1以步长00001进行10000次循环,然后每个循环中算出来的CALL(欧式看涨期权的价格)等于市价CALL±005假设005是可以接受的,就结束循环,认为这时的Σ就近似等于隐含波动率。由此可见这种常规的求隐含波动率的方法在理论上是可行的,但实际弊端却很明显手动计算不可能,用计算机语言设计程序来算,过程也很复杂,一般人难以上手。所以有必要探索一种简便的方法求解隐含波动率。3用MATLAB解方程解出隐含波动率和无风险利率31用MATLAB和BS公式及现有期权报价求解隐含波动率如果我们已知看涨期权的执行价格CALL以下简称C,标的资产现价S,无风险利率R,存续期T,协议价格X,在BS公式的基础上,利用MATLAB的解方程功能,就能求出隐含波动率Σ。在MATLAB中,正态分布密度函数为NORMPDF,累积正态分布函数为NORMCDF。MATLAB解方程的函数中,最简便的是SOLVE,但是经过试验SOLVE不能解未知数是正态颁布的参数的变量。为了验证SOLVE函数是否具有求解含有正态颁布的方程,可以做一个简单的实验。例如,用SOLVE函数解含有正态颁布的方程40N(X)300,看能否解出X代码如下CLEARSYMSXSOLVE 40NORMCDFX300 ,X运行结果ERRORUSINGSOLVEUNABLETOFINDCLOSEDSOLUTIONERRORINSYMSOLVEAT49VARARGOUT{1MAX1,NARGOUT}SOLVES{}出错的原因就是因为X是一个概率分布的变量。这说明用SOLVE函数不好求出波动率Σ,因为Σ在BS公式中是服从累积4正太分布的。经过反复试验,笔者发现可以用FSOLVE函数近