【期权量化】用Matlab模拟股票路径

论坛 期权论坛 期权     
mostgo   2016-3-23 01:28   55048   8
    受panlin的《用MATLAB构造股票过程》的启发,编了一个股票路径模拟的函数M文件,程序大大简化了,供大家参考:
[gbstock.m]
代码:
function gbstock(s0,mu,sigma,T,dt,n)
% n为路径模拟次数
t = [0:dt:T]';
for i = 1:n
w = [0 cumsum(randn(1,T/dt)*dt^0.5)]';     %标准布朗运动
    st = s0*exp((mu-0.5*sigma^2)*t+sigma*w);
    plot(t,st), hold on
end
xlabel('t'), ylabel('St'), title('股票路径模拟')
end

执行命令 gbstock(100,0.1,0.2,1,0.01,100),即可得路径模拟图。
**********************************
用MATLAB构造股票过程
    借助Matlab完全可以建立很多的分析模型,用MATLAB构造股票过程,最重要的两个基本函数就是wiener prcoess和股票过程。
构造布朗运动(Wiener_Prcoess),下面的MATLAB程序,生成一个标准Wiener Process:
------------------------------------------------------ Wiener Prcoes Generating---------------------------
function [Tt,Wn]= Wiener_Process(mu,sigma,Lt)
dt=0.001;inc=0.1;
k=sigma*sqrt(dt);
p=0.5*(1+mu*sqrt(dt)/sigma);q=1-p;sumx=0;X=[sumx];
for bt=0.1:inct
    nx=inc/dt;
    ns=binornd(nx,p);nf=nx-ns;net=ns-nf;
    sumx=sumx+(net*k);X=[X sumx];
end
t=0.1:inct;t=[0 t];n=length(t);
[W]=zeros(n,2);
W(:,1)=t';
W(:,2)=X';
plot(W(:,1),W(:,2));
Tt=W(:,1);
Wn=W(:,2);
------------------------------------------------------------------------------------------------------------------
然后,利用指数模型生成股票价格的随机过程:
S(t)=S(0)*Exp(sigma*Wiener_Process+u*t)
------------------------------------------------ Stock Process-----------------------------------------------
function [Tt,St]=Stock_Process(s0,mu,sigma,Lt)
%生成一个股票过程
[t,w]=Wiener_Process(0,1,Lt) % creat a wiener process
X=[length(t)];
X=s0*exp(sigma*w+mu*t); % the stock process
plot(t,X);
Tt=t;
St=X;
-----------------------------------------------------------------------------------------------------------------
看看一个S0=30, u=0.087, sigma=0.178,时间=30,输出的股票过程:
利用这两个函数生成股票的随机过程的数值模型,可以发现wiener process可以很好的模拟股票的价格过程。
>>s0=30;mu=0.087,;sigma=0.178,Lt=30;
>>[Tt,St]=Stock_Process(s0,mu,sigma,Lt)

MATLAB程序(简化的,易读易学)
function [t,st]=Stock(s0,mu,sigma,Lt)
%------------------------------- 初始设置------------------------------------------------------ %
t=0:0.1t;
t=t';
x=0;
w=[x];
%---------------------------------- 生成维纳过程------------------------------------------------------%
for s=0.1:0.1t;
dw=0+0.1.*rand(1,1);
x=x+dw
w=[w x]
end
w=w';
%--------------------------- 生成股票过程------------------------------------------------------%
st=s0*exp(sigma*w+(mu-(1/2)*(sigma)^2)*t);
plot(t,st)
end
%---------------------------------------------------------------------------------------------------------------------------------%
%其中有一些简单的编程技巧,不是很难懂。
举例:
%初始价格为8元、收益率预期漂移率为0.02、收益率瞬间标准差为1.05、时间为0:0.1:50
>>Stock(8,0.02,1.05,50)
***********************************
这个东西有什么用处呢?
通过多次随机抽取标的资产价格的路径,并据此计算每条路径下的期权回报,然后把期权平均回报贴现得到期权价格,即通过蒙特卡洛模拟对期权定价。
********************

注意sum和cumsum的区别
cumsum是累积相加,对于dim,当dim为1时,是按行逐个累积相加,
当dim为2时,是按列逐个累积相加,
dim为3时是按页相加,因为x2页数为1,所以累积相加还是本身。
。。。。。。。。。。。。。。。

分享到 :
1 人收藏

8 个回复

倒序浏览
简化版的模拟走势的。。。有兴趣的朋友可以拷贝matlab进去画图

clear
EEE=0.2*rand(1,1000)-0.1;
S0=5;
for i=1:1000
S0=S0+EEE(1,i)*S0;
FFF(1,i)=S0;
end
plot([0.1:0.1:100],FFF)
强烈支持楼主ing……
4#
robinyyh  2级吧友 | 2016-8-16 23:55:02 发帖IP地址来自 上海浦东新区
看起来不错
赞一个,收藏了
谢谢分享~
不明觉厉 收藏了
8#
kanyii  4级常客 | 2017-7-27 19:43:59 发帖IP地址来自 北京
学到很多东西
9#
Ming102644  3级会员 | 2017-8-13 11:16:47 发帖IP地址来自 北京
学习中
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:4920
帖子:198
精华:6
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP