F=x-f(x)的零点解.
说起来容易做起来难,大家还是慢慢体会吧........
把书从少看多,再从多到少...., 现在说的少..怎么说多呢, 当然具体问题还要具体解决....
下面一black shols的计算,(1)..(2)...(3)计算效率都有不同的提高,当然(1)不是我写的
(2),(3)是我修改的..... 结果能出还行..
///(1)
%N表示总股本,M表示认股权证数量
N=64.553;
M=12.65;
stk_price=45;%('股票现价');
strick_price=40;%('执行价格');
m_time=5;%('年化存续期');
vol=0.30;%('波动率');
pchange=0.05;%('敏感性分析中的价格变化幅度');
vchange=0.05;%('敏感性分析中的隐含波动率变化幅度');
result=[0 vol-1*vchange:vchange:vol+10*vchange];
for stk_temp=stk_price-5*pchange:pchange:stk_price+5*pchange
result_temp=[stk_temp];
for
vol_temp=vol-1*vchange:vchange:vol+10*vchange
[stk_temp,vol_temp]
temp=[];
bls=blsprice(stk_temp,strick_price,0.0252,m_time,vol_temp);
for w=bls*0.8:0.001:bls*1
temp_bls=blsprice(stk_temp+(M/N)*w,strick_price,0.0252,m_time,vol_temp)*N/(M+N);
temp=[temp;[w,temp_bls abs(w-temp_bls)]];
end
% sort(temp,3)
temp1=min(abs(temp(:,3)));
n=find(temp(:,3)==temp1);
result_temp=[result_temp temp(n,1)];
end
result=[result;result_temp];
end
result
(2)//
%[Call, Put] = blsprice(Price, Strike, Rate, Time, Volatility,
Yield)
%N表示总股本,M表示认股权证数量
N=64.553;
M=12.65;
stk_price=45; %('股票现价');
strick_price=40;%('执行价格');
m_time=5; %('年化存续期');
vol=0.30; %('波动率');
rate=0.0252; %Annualized, continuously compounded risk-free rate of
%return over the life of the option, expressed as a positive
decimal number.
pchange=0.05; %('敏感性分析中的价格变化幅度');
vchange=0.05; %('敏感性分析中的隐含波动率变化幅度');
%分析区间
stk_temp=stk_price-5*pchange:pchange:stk_price+5*pchange;
stk_temp_num=size(stk_temp,2);
vol_temp=vol-1*vchange:vchange:vol+10*vchange;
vol_temp_num=size(vol_temp,2);
%结果是一个stk_temp_num X vol_temp_num的表;
result=zeros(stk_temp_num,vol_temp_num);
for
i=1:stk_temp_num %stk_temp=stk_price-5*pchange:pchange:stk_price+5*pchange
%result_temp=[stk_temp];
for
j=1:vol_temp_num
%vol_temp=vol-1*vchange:vchange:vol+10*vchange
%temp=[];
[i,j]
bls=blsprice(stk_temp(i), strick_price, rate, m_time, vol_temp(j)
);
%find min result start
w=bls*0.8:0.001:bls*1;
w_num=size(w,2);
temp_bls=zeros(1,w_num);
for k=1:w_num
temp_bls(k)=blsprice(stk_temp(i)+(M/N)*w(k), strick_price, rate,
m_time, vol_temp(j))*N/(M+N);
%temp=[temp;[w,temp_bls abs(w-temp_bls)]];
end
% sort(temp,3) sort的计算复杂性比较高,在这里只取最大用sort没有意义;