加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

金融数量分析8:Black-Scholes公式隐含波动率

(2012-11-02 23:41:11)
标签:

杂谈

分类: matlab与金融分析

    Black-Scholes期权定价公式、欧式期权理论价格的表达式为

http://s16/mw690/6afc56004d445be99cbbf&690

    隐含波动率是将市场上的期权交易价格带入权证理论价格的Black-Scholes模型,反推出来的波动率数值。隐含波动率是一个重要的风险指标。历史波动率反映期权标的证券在过去一段时间的波动幅度,期权发行商与投资者在期权发行初期只能利用历史波动率作参考。一般来说,期权的隐含波动率越高,其隐含的风险也就越大。期权投资者除了可以利用期权的正股价格变化方向来买卖权证外,还可以从股价的波动幅度的变化中获利。一般来说,波动率并不是无限上涨或下跌,而是在一个区间来回振荡,投资者可以采取在隐含波动率较低时买入而在较高时卖出期权的方法来获利。

    隐含波动率是把权证的价格代入BS模型中反算出来的,它反映了投资者对未来的证券波动率的预期。利用fsolve函数计算隐含波动率,fsolve是MATLAB最主要内置的解方程组的函数。

 

    假设欧式股票期权现价为100元,一年后执行价格95元,无股利支付,股价年化波动率为50%,无风险利率为10%,则期权价格运算结果为

>> [call,put]=blsprice(100,95,0.1,0.25,0.5)

call = 13.6953
put = 6.3497

    假设目前其期权交易价格为Call=15.00元,Put=7.00元,分别计算其相对应的隐含波动率。

    Step1:建立方程函数。

看涨期权隐含波动率方程的代码:

function f=ImpliedVolatitityCallObj(Volatility, Price, Strike, Rate, Time, Callprice)
[Call,Put] = blsprice(Price, Strike, Rate, Time, Volatility);
f=Call-Callprice;

看跌期权隐含波动率方程的代码:

function f=ImpliedVolatitityPutObj(Volatility, Price, Strike, Rate, Time, Putprice)
[Call,Put] = blsprice(Price, Strike, Rate, Time, Volatility);
f=Put-Putprice;

    Step2:求解方程函数

function [Vc,Vp,Cfval,Pfval]=ImpliedVolatility(Price,Strike,Rate,Time,CallPrice,PutPrice)
Volatility0=1.0;
[Vc,Cfval] =fsolve(@(Volatility) ImpliedVolatitityCallObj(Volatility, Price, Strike,...
    Rate, Time, CallPrice),Volatility0);
[Vp,Pfval] =fsolve(@(Volatility) ImpliedVolatitityPutObj(Volatility, Price, Strike, ...
    Rate, Time, PutPrice),Volatility0);

    Step3:函数求解
Price=100;
Strike=95;
Rate=0.10;
Time=1.0;
CallPrice=15.0;
PutPrice=7.0;
[Vc,Vp,Cfval,Pfval]=ImpliedVolatility(Price,Strike,Rate,Time,CallPrice,PutPrice)

 

     下图为期权价格与波动率关系图,横轴为波动率,纵轴为交易价格。

http://s1/mw690/6afc560007ba0b4622390&690

 Price=100;
Strike=95;
Rate=0.10;
Time=1.0;
Volatility=0:0.1:2.0;
n=length(Volatility);
Call=zeros(n,1);
Put=zeros(n,1);
for i=1:n
    [Call(i),Put(i)] = blsprice(Price, Strike, Rate, Time, Volatility(i));
end
subplot(2,1,1)
plot(Volatility,Call,'-*');
legend('CallPrice')
subplot(2,1,2)
plot(Volatility,Put,'-o');
legend('PutPrice')

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有