全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
1007 2
2019-05-31
悬赏 100 个论坛币 未解决
程序如下,是利用最小二乘法和蒙特卡洛计算美式看跌期权的价格

fhandles = {@(x)x, @(x)x.^2};NSteps=5;NRepl=10000;
S0=83.5;K=80;r=0.1;sigma=0.35;T=1;
dt = T/NSteps;
discountVet = exp(-r*dt*(1:NSteps)');
NBasis = length(fhandles);        %基函数个数
% generate sample paths
SPaths=AssetPaths(S0,r,sigma,T,NSteps,NRepl);%价格路径
CashFlows = max(0, K - SPaths(:,NSteps));%
ExerciseTime = NSteps*ones(NRepl,1);%
for step = NSteps-1:-1:1
    InMoney = find(SPaths(:,step) < K);
    XData = SPaths(InMoney,step);
    RegrMat = zeros(length(XData), NBasis);%初始化
    for k=1:NBasis
        RegrMat(:, k) = feval(fhandles{k}, XData);
    end
    YData = CashFlows(InMoney).*discountVet(ExerciseTime(InMoney)-step);
    alpha = RegrMat \ YData;
    IntrinsicValue = K - XData;
    ContinuationValue = RegrMat * alpha;
    Index = find(IntrinsicValue > ContinuationValue);
    ExercisePaths = InMoney(Index);%
    CashFlows(ExercisePaths) = IntrinsicValue(Index);%
    ExerciseTime(ExercisePaths) = step;%
end
price = max(K-S0, mean(CashFlows.*discountVet(ExerciseTime)));

想问的是YData那一句是怎么算,按我的理解是就倒着循环每一列,假如现在step=2,就是找到第二期的inmoney的行,然后将最后一列的值折现到这一期,计算出来的YData就相当于等待的价值。就相当于这个程序只要等待就是等到最后一期,所以等待的价值才是最后一期往回折现,可以这样理解吗?但是美式期权每期都有可能执行或者等待啊?所以想请教一下论坛的大佬这句到底要怎么理解?




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-5-31 10:17:00
因为急着交作业所以悬赏100个币,之前没有学过编程之类的,所以读别人程序有点困难,希望能得到大佬们的帮助,真的很急
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-5-31 10:26:31
这个是生成价格路径的代码
function SPaths=AssetPaths(S0,mu,sigma,T,NSteps,NRepl)
%生成价格路径
SPaths = zeros(NRepl, 1+NSteps);
SPaths(:,1) = S0;
dt = T/NSteps;
nudt = (mu-0.5*sigma^2)*dt;
sidt = sigma*sqrt(dt);
for i=1:NRepl
   for j=1:NSteps
      SPaths(i,j+1)=SPaths(i,j)*exp(nudt + sidt*randn);
   end
end
%作图
x1=0:dt:T;
y1=SPaths';
y2=mean(SPaths);
figure
subplot(2,1,1);
plot(x1,y1)
subplot(2,1,2);
plot(x1,y2)
xlabel('期权存续期间')
ylabel('股票价格模拟路径')
SPaths(:,1) = [];
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群