量化投资_轻松实现MATLAB蒙特卡洛方法建模
1 目录
* MATLAB随机数的产生
- Uniform,Normal & Custom distributions
* 蒙特卡洛仿真
* 产生股票价格路径
* 期权定价
- 经典公式
- 和蒙特卡洛方法比较
- 方差减小技巧
- Exotic Options
* 多变量仿真
- Basket Option
- Portfolio Value at Risk
2 重点内容讲解
2.1 蒙特卡洛仿真
- 依赖随机数生成
- rand,randn,randi
注:rand:产生平均分布随机数
randn:产生正太分布随机数
randi:产生随机整数随机数
-支持的随机分布
- 随机分布拟合
2.2 在统计工具箱里面有更多的随机数生成函数

2.3 基于MATLAB常用随机数的举例
举例:生成随机数
%% Uniform distribution
%
% Numbers uniformly distributed along [0 1]
% 产生100个随机分布的随机数在[0 1]这个闭区间内
% rand的参数为n*n的矩阵
rU = rand(1,10);
hist(rU,10);
图示:

举例:生成正太分布随机数
%% Normal distribution
%
% Numbers normally distribution with mean0,std1
% 基于均值为0,标准差为1的正态分布随机数。
% randn的参数为n*n的矩阵
rN = randn(1,1000);
hist(rN,1000);
图示:

举例:设计随机种子的方式生成随机数
%% Setting the behaviour of the random numbers
%
% There are many implementations of pseudo-random number generator in
% MATLAB,we will be working with
%
% mt19937ar - Mersenne Twister,which has an approximate period of
% 2^19937-1
% We can set the behaviour in a number of ways
% Seed the generator
% 以设定种子的方式设置随机数
rng(0)
[randn(1),randn(1),randn(1),randn(1)]
rng(0);
[randn(1),randn(1),randn(1),randn(1)]
% 由于设定的种子都是一样的,因此生成的两组随机数也是一样的
% ans =
% 0.5377 1.8339 -2.2588 0.8622
% ans =
% 0.5377 1.8339 -2.2588 0.8622
举例:其他产生随机数的方法
%% Generating random numbers from different distributions
%
% Lets see a list of the supported distributions
docsearch Continuous Distributions
% 用random产生随机数,按照随机规则产生,具体规则在doc,查看flag内容
%% Now,lets choose a number of draws from one of these,say the exponential
% 产生指数的随机数,[]为矩阵形状,3为参数,exp为flag
rB = random('exp',3,[1 10000]);
hist(rB,100);
图示:

2.3 对数据进行拟合fitdist
2.4 产生股票价格路径

2.5 公开函数:随机蒙特卡洛价格路径:
function mat = pricePaths(S,r,T,sigma,nSims,nSteps)
% S ==>> 起始价格
% r ==>> 无风险回报率
% T ==>> 时间宽度
% sigma ==>> 波动率
% nSims ==>> 做多少次蒙特卡洛放在
% nSteps ==>> 在T时间内取多大的步长
% Generate asset price paths using geometric brownian motion % Determine the timestep
% 根据时间长度和步长,求出每个均匀分布点是多少长
Dt = T/(nSteps); % Generate the random numbers
% 初步随机数,多少蒙特卡罗仿真*多少步长的矩阵
mat = randn(nSteps,nSims); % Generate the returns scaled using the relevant equation
% 布朗运动公式
mat = exp((r-sigma^2/2)*Dt + sigma*sqrt(Dt).*mat); % Generate price paths
mat = cumprod(mat,1); % 按照列的方向累乘,从某一天累计的回报率 % Scale with the initial asset price
% 初始价格*实际价格=实际价格回报率后的价格
mat = [repmat(S,1,nSims); mat.*S]; end
应用实例:
%%
S = 10; % 股票起始价格
r = 0.03; % 无风险收益率
T = 1; % 时间跨度
sigma = 0.2; % 波动率
nSims = 10; % 多少条路径(多少次蒙特卡洛实验)
nSteps = 250*10; % 步长是多少 这里是2500个步长 paths = pricePaths(S,r,T,sigma,nSims,nSteps);
%% Plotting
figure;
plot(paths);
图示:我们可以看到以10为起始价格,生成10条蒙特卡洛的随机股票价格路径。生成这些随机的股票价格可以进行一些模型的压力检测。不仅在样本内可以进行检测,而且在可能会产生的不可知价格路径下,模型的鲁棒性效果如何(Robust)。

再比如我们可以把初始价格设置为3000个点也会生成如下路径:

量化投资_轻松实现MATLAB蒙特卡洛方法建模的更多相关文章
- 量化投资_关于Multicharts砖型图(传统砖型图和非传统砖型图)最详细的解释_调用篇
1. 砖图形成数组后,我们再对他们复制到数组中然后再调用出来看一下. 2. 如下是累计只取20个数组大小为例,如果开始阶段数组长度组成初始的Array[20]的长度,然后这个数组的最后一个值填满后,进 ...
- 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)
http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...
- 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)
http://www.matlabsky.com/thread-43937-1-1.html <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下) ...
- 从随机过程到马尔科夫链蒙特卡洛方法(MCMC)
从随机过程到马尔科夫链蒙特卡洛方法 1. Introduction 第一次接触到 Markov Chain Monte Carlo (MCMC) 是在 theano 的 deep learning t ...
- Python金融应用编程(数据分析、定价与量化投资)
近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...
- 量化投资与Python
目录: 一.量化投资第三方相关模块 NumPy:数组批量计算 Pandas:表计算与数据分析 Matplotlib:图表绘制 二.IPython的介绍 IPython:和Python一样 三.如何使用 ...
- python书籍推荐:量化投资:以Python为工具
所属网站分类: 资源下载 > python电子书 作者:mimi 链接:http://www.pythonheidong.com/blog/article/451/ 来源:python黑洞网 内 ...
- 量化投资技术分析工具---ipython使用
量化投资实际上就是分析数据从而做出决策的过程python数据处理相关模块NumPy:数组批量计算pandas:灵活的表计算Matplotlib:数据可视化 学习目标:用NumPy+pandas+Mat ...
- 1、量化投资—为什么选择Python?
Python在量化领域的现状 就跟Java在web领域无可撼动的地位一样,Python也已经在金融量化投资领域占据了重要位置,从各个业务链条都能找到相应的框架实现. 在量化投资(证券和比特币)开源项目 ...
随机推荐
- docker搭建redis主从集群和sentinel哨兵集群,springboot客户端连接
花了两天搭建redis主从集群和sentinel哨兵集群,讲一下springboot客户端连接测试情况 redis主从集群 从网上查看说是有两种方式:一种是指定配置文件,一种是不指定配置文件 引用地址 ...
- 深入浅出Python装饰器
1.前言 装饰器是Python的特有的语法,刚接触装饰器的同学可能会觉得装饰器很难理解,装饰器的功能也可以不用装饰器实现,但是装饰器无疑是提高你Python代码质量的利器(尤其是使用在一些具有重复功能 ...
- vue element-ui Table数据解除自动响应方法
在对列表Table进行数据编辑时,会存在table的增删改操作后,列表view也自动响应发生了变化,原因是赋值的数据是一个引用类型共享一个内存区域的.所以我们就不能直接连等复制,需要重新克隆一份新的数 ...
- AT2000 Leftmost Ball 解题报告
题面 给你n种颜色的球,每个球有k个,把这n*k个球排成一排,把每一种颜色的最左边出现的球涂成白色(初始球不包含白色),求有多少种不同的颜色序列,答案对1e9+7取模 解法 设\(f(i,\;j)\) ...
- JS向固定数组中添加不重复元素并冒泡排序
向数组{7,20,12,6,25}中添加一个不重复的数字,然后按照从小到大的顺序排列 源代码: <!DOCTYPE html> <html> <head> < ...
- java 继承条件下的构造方法调用
运行 TestInherits.java示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第 ...
- 7)给tab下面添加一个子非模态对话框
1)还是沿袭(6)那个代码 2)下面是步骤: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·~~~~~~~~~~~~~~~~~~~~~~~~~~~ 然后,修改这个对 ...
- SQL基础教程(第2版)第4章 数据更新:4-2 数据的删除(DELETE)
第4章 数据更新:4-2 数据的删除(DELETE) ● 如果想将整个表全部删除,可以使用DROP TABLE语句,如果只想删除表中全部数据,需使用DELETE语句.● 如果想删除部分数据行,只需在W ...
- vSphere 6.7 新特性 — 基于虚拟化的安全 (VBS)
https://blogs.vmware.com/china/2018/07/27/vsphere-6-7-%E6%96%B0%E7%89%B9%E6%80%A7-%E5%9F%BA%E4%BA%8E ...
- Lyft、Uber、滴滴涉足汽车租赁领域,能打破既有汽车所有权模式吗?
自共享经济出现之后,众多相关项目遍地开花.这些共享经济项目对于人们来说,最直观的感受就是实惠.性价比高.方便.不过抛开这些使用层面的优点来看的话,共享经济项目最大的特色或许就是改变了事物的所有权.一件 ...