楼主: 晚晴12345698
2816 0

[问答] 美式期权最小二乘蒙特卡洛模拟matlab代码 [推广有奖]

  • 1关注
  • 1粉丝

高中生

5%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
248 点
帖子
11
精华
0
在线时间
21 小时
注册时间
2017-4-6
最后登录
2018-6-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
美式期权最小二乘蒙特卡洛模拟matlab代码中不懂得地方(红色标注),大家给看看啊
CheckLS.m文件:

S0 = 1; K = 1.1; r = 0.05;
sigma = 0.2; T = 1; NSteps = 100;
NRepl = 10000;
rng(0,'v5normal');
% fhandles = {@(x)ones(length(x),1), @(x)x, @(x)x.^2};
fhandles = {@(x)x, @(x)x.^2,@(x)x.^3};
pricebyLMS = GenericLS(S0,K,r,T,sigma,NSteps,NRepl,fhandles)
[assetprice, optionvalue]=binprice(S0,K,r,T,T/NSteps,sigma,0);
pricebyBIN = optionvalue(1,1)

GenericLS.m文件
function price = GenericLS(S0,K,r,T,sigma,NSteps,NRepl,fhandles)
%% 功能最小二乘的蒙特卡洛模拟
dt = T/NSteps;
discountVet = exp(-r*dt*(1:NSteps)');
NBasis = length(fhandles);        %基函数个数???
% alpha = zeros(NBasis,1);        %回归参数矩阵
% RegrMat = zeros(NRepl,NBasis);  %初始化设计矩阵。
% generate sample paths                    
SPaths=AssetPaths(S0,r,sigma,T,NSteps,NRepl);
% SPaths(:,1) = [];               % 删除第一列
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)));

AssetPaths.m文件
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) = [];



二维码

扫码加我 拉你入群

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

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

关键词:matlab代码 MATLAB 蒙特卡洛模拟 matla atlab

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-6 05:03