【Python量化】蒙特卡洛模拟法预测股价走势

article/2025/4/2 0:47:36

文章目录

  • 蒙特卡罗模拟法的定义
  • 蒙特卡罗模拟法的的Python实现
    • 蒙特卡洛模拟法模拟股票收益率序列
    • 蒙特卡洛模拟法模拟股价序列
    • 蒙特卡洛模拟法绘制模拟股价序列图

此文章首发于公众号:Python for Finance

链接:https://mp.weixin.qq.com/s/43KQgH-BArop29uJ3Fe7MA

蒙特卡罗模拟法的定义

基本思想:蒙特卡罗模拟法(Monte Carlo Simulation, MCS)是在一定的统计分布假设下模拟风险因子的变化情况。首先假设资产收益为某一随机过程,并根据所设定的价格变动过程,大量模拟未来各种可能发生的情境,然后将某一情境下投资组合变化值排序,给出投资组合变化的分布,据此就可以估算不同置信水平下的VaR值。

基本步骤

每一次蒙特卡洛模拟,对资产组合中的每一资产按照随机过程公式模拟出下一个交易日的价格,公式中的ε可以假定服从t分布或正态分布(即资产收益率服从的分布),然后可以得到每一资产的收益率,乘以各自的权重和市值就能得到每一资产在下一个交易日的收益,全部相加就是该资产组合在下一个交易日的模拟收益。

假设股票价格符合几何布朗运动,即
d S t = μ t S t d t + σ t S t d W t dS_t=\mu_tS_tdt+\sigma_tS_tdW_t dSt=μtStdt+σtStdWt
简化处理,得到特定时期(0,T)资产价格变化过程:
Δ S t = S t ( μ Δ t + σ ε t Δ t ) , t = 1 , 2 , . . . , N , N Δ t = T \Delta S_t=S_t(\mu\Delta t+\sigma\varepsilon_t\sqrt{\Delta t}),t=1,2,...,N,N\Delta t=T ΔSt=St(μΔt+σεtΔt ),t=1,2,...,N,NΔt=T
于是得到:
S t + 1 = S t + S t ( μ Δ t + σ ε t Δ t ) , t = 1 , 2 , . . . , N , N Δ t = T S_{t+1}=S_t+S_t(\mu\Delta t+\sigma\varepsilon_t\sqrt{\Delta t}),t=1,2,...,N,N\Delta t=T St+1=St+St(μΔt+σεtΔt ),t=1,2,...,N,NΔt=T
也可表示为:
S t + 1 = S t e ( μ − σ 2 2 ) Δ t + σ ε t Δ t S_{t+1}=S_te^{(\mu-\frac{\sigma^2}2)\Delta t+\sigma\varepsilon_t\sqrt{\Delta t}} St+1=Ste(μ2σ2)Δt+σεtΔt
其中 μ \mu μ为收益率均值, σ 2 \sigma^2 σ2为收益率方差, ε \varepsilon ε服从t分布或正态分布。

则收益率为:
r e t u r n = ( μ − σ 2 2 ) d t + σ ε t d t return=(\mu-\frac{\sigma^2}2)dt+\sigma\varepsilon_t\sqrt{dt} return=(μ2σ2)dt+σεtdt

蒙特卡罗模拟法的的Python实现

蒙特卡洛模拟法模拟股票收益率序列

收益率为:
r e t u r n = ( μ − σ 2 2 ) d t + σ ε t d t return=(\mu-\frac{\sigma^2}2)dt+\sigma\varepsilon_t\sqrt{dt} return=(μ2σ2)dt+σεtdt

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import pandas as pd
import math
'''
s:股票现价
t:期限(年)
r:股票年化收益率
sigma:股票年化波动率
nper_per_year:每年的期数
'''
def generate_simulated_stock_returns(t,r,sigma,nper_per_year):      simulated_returns=[]dt=1/nper_per_yearterm = int(t*nper_per_year)for i in range (1, term+1):z=np.random.normal()simulated_return = (r-(sigma**2/2))*dt + z*sigma*(dt**(1/2))simulated_returns.append(simulated_return)array_return=np.array(simulated_returns)return array_return
# 初始股价s:100; 预期收益率r:10%;标准差:30%
s=100;r=0.1;sigma=0.3
#1年期、每年2期
t=1;nper_per_year=2
array_return = generate_simulated_stock_returns(t,r,sigma,nper_per_year)
print(array_return)
#2年期、每年24期
t=2;nper_per_year=24
array_return = generate_simulated_stock_returns(t,r,sigma,nper_per_year)
print(array_return)
[ 0.21738696 -0.06383675]
[ 0.02899686  0.00131385 -0.09489962 -0.00440415 -0.0357566  -0.052275660.07905745 -0.03065636 -0.01726008 -0.0059791   0.05072394  0.014489470.03098366 -0.05170335  0.0161574  -0.18380967 -0.0629412   0.002896410.14890079 -0.05693315  0.0931597   0.0037413  -0.05493882  0.123092810.06119329  0.04241972 -0.02030099 -0.05180438 -0.05970102  0.02290740.12618542  0.0770313   0.05075201 -0.04261307  0.00168359  0.035294210.0850315  -0.09281302 -0.08985412  0.02220526  0.01642511  0.049678190.07372143 -0.01799848  0.05595597 -0.00384655 -0.09679426 -0.08459783]

蒙特卡洛模拟法模拟股价序列

股价为:
S i = S i − 1 × e r i − 1 S_i = S_{i-1} \times e^{r_{i-1}} Si=Si1×eri1

def generate_simulated_stock_values(s,t,r,sigma,nper_per_year):rate=generate_simulated_stock_returns(t,r,sigma,nper_per_year)stock_price = [s]term = int(t*nper_per_year)for i in range(1, term+1):values = stock_price[i-1]*math.e**(rate[i-1])stock_price.append(values)array_price = np.array(stock_price)return array_price
#1年期、每年2期
t=1;nper_per_year=2
array_price = generate_simulated_stock_values(s,t,r,sigma,nper_per_year)
print(array_price)
#2年期、每年24期
t=2;nper_per_year=24
array_price = generate_simulated_stock_values(s,t,r,sigma,nper_per_year)
print(array_price)
[100.         105.03146796 100.4594981 ]
[100.          95.90978914  95.65450188 104.70632493 102.12337933104.26726892  99.06536039 100.63054422  93.6685905   88.5759613892.41510048  89.91265499  86.27490259  87.29911775  84.2679808986.5798334   87.06325173  87.61229376  81.72201584  85.4997696982.96816113  80.11385795  83.01588423  77.73720797  72.77071263.60523084  65.39745198  69.02682262  67.64864604  62.5265315761.57041633  58.01208479  62.16882528  66.41108904  66.423671659.67428405  68.38557448  70.2657609   75.26920257  77.1586095980.52151818  74.45625968  71.23642008  70.7874225   69.6858797175.54529952  67.20571691  67.86359575  67.393064  ]

蒙特卡洛模拟法绘制模拟股价序列图

def plot_simulated_stock_values(s,t,r,sigma,nper_per_year,num_trials=1):term = int(t*nper_per_year) + 1x_axis = np.linspace(0,t,term)for i in range(num_trials):price=generate_simulated_stock_values(s,t,r,sigma,nper_per_year)plt.plot(x_axis, price)plt.title(str(num_trials)+" simulated trials")plt.xlabel("years")plt.ylabel("value")plt.show()
# 2年期、每年250期,模拟5次
t=2;nper_per_year=250;num_trials=5
plot_simulated_stock_values(s,t,r,sigma,nper_per_year,num_trials)



# 2年期、每年250期,模拟1000次
t=2;nper_per_year=250;num_trials=1000
plot_simulated_stock_values(s,t,r,sigma,nper_per_year,num_trials)


http://chatgpt.dhexx.cn/article/2Y7m8N4b.shtml

相关文章

Ubuntu18.04上安装ROS的详细教程

文章目录 前言一、环境配置二、安装步骤1.添加ROS软件源2.添加密钥3.更换软件源4.安装ROS5.初始化rosdepc6.设置环境变量7.安装 rosinstall8.验证ROS是否安装成功 总结参考文献 前言 最近,学习了胡老师的《ROS入门21讲》,在Ubuntu18.04上安装ROS过程中遇…

在Ubuntu18.04中安装ROS教程

1.创建虚拟机 自定义安装,手动选择镜像文件,处理器选择1个处理器,8个核心,其他选择默认的即可。 2.换源 新装的虚拟机会提示更新(不是更新系统),建议换完源之后再更新。 左下角点开&#xff…

Ubuntu 安装 ROS 详细教程

最近需要用ROS控制一个小车底盘,然后发现不会了。。。 所以写一篇博客记录一下,以便以后查阅。 OS:Ubuntu 20.04 ROS:noetic 1. 设置Ubuntu的软件和更新 在搜索框输入software,选择软件和更新一项,勾选 ma…

Ubuntu18.04、Ubuntu20.04之ROS安装教程

目录 Ubuntu20.04之ROS(noetic)安装教程 Ubuntu18.04之ROS(melodic)安装教程 ubuntu20.04之ROS(noetic)安装教程 1、软件源(作用是比官方快) sudo sh -c . /etc/lsb-release &…

ROS安装超详细保姆级教程

1.版本选择 ROS与Ubuntu版本是有着对应关系的,其中Ubuntu1604 ROS Kinetic;Ubuntu1804 ROS Melodic; Ubuntu2004 ROS Noetic 本文以 Ubuntu2004 ros noetic 进行安装操作演示 2.安装实操 2.1 打开网站http://wiki.ros.org/noetic/Ins…

ubuntu20.04安装ROS极简教程 (noetic)

1.基础安装步骤 # 1.添加 sources.list sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list # 2.添加 keys sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-ke…

ubuntu16.04 ROS安装

ros安装官方链接:cn/kinetic/Installation/Ubuntu - ROS Wiki 建议参考链接:Ubuntu16.04 安装ROS Kinetic 究级详细教程_IU知恩于心的博客-CSDN博客_ubuntu16.04安装ros 问题现象: 下列软件包有未满足的依赖关系: ros-kinetic…

详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)

2020年的10月份,我整理写了一篇名为:详细介绍如何在ubuntu20.04中安装ROS系统,以及安装过程中出现的常见错误的解决方法,填坑!!!的博客,已经经过了很多小伙伴的验证,确实…

ros2安装教程

ros官网安装指导: https://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html 1、确保支持UTF-8语言环境 locale # check for UTF-8sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-loca…

Apollo ROS安装教程

1.安装Ubuntu 14.04 2.安装ROS Indigo版本 安装可能以下出现的问题 错误信息:Unpacking ros-indigo-desktop-full (1.1.6-0trusty-20181006-135515-0800) ... Errors were encountered while processing:/var/cache/apt/archives/python-rosdistro-modules_0.7.0…

Ubuntu 安装 ROS 教程

Ubuntu 安装 ROS 一、修改为国内镜像源二、ROS 官网安装介绍(kinetic-16.04、melodic-18.04、noetic-20.04)三、ROS 安装步骤1.添加 ROS 软件源到 sources.list2.导入密钥3.更新4.安装 ROS 完整版5.初始化rosdep第一步第二步 6.配置环境变量7.安装 rosin…

Ubuntu18.04安装 ROS Melodic教程

Ubuntu对应ROS的不同版本: 我的操作系统为Ubuntu 18.04 LTS 64bit应采用ROS版本为ROS Melodic。 下面以我的版本为例: 配置Ubuntu软件仓库 打开软件中心,按照下图进行配置。 确保你的"restricted", “universe&#…

ROS安装教程详解

一、准备工作 1. 一个装有Ubuntu14.04镜像文件的U盘启动盘 2. 电脑安装EASYBCD、分区助手软件 3. 保证电脑硬盘有一个分区有足够的空间安装ROS,和Ubuntu14.04 二、制作启动盘 1.首先我们先安装软碟通,完成安装后打开软碟通,文件->打开,打开我们的iso镜像 2.然后选择…

ROS安装教程(ubuntu18.04+melodic版本)

1. ROS版本选择 ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作系统所提供的功能,包括硬件抽象描述、底层驱动程序管理、公用功能的执行、程序间的消息传递、程序发行包管理,可以极大简化繁…

ROS 安装教程Ubuntu16.04(2022年最新)

ROS是机器人操作系统(Robot Operating System)的英文缩写,源自斯坦福的开源项目。 Ubuntu16.04只能安装ROS Lunar Loggerhead或ROS Kinetic Kame 依次完成以下四步. 第四步提示是否不验证,需输入y ,等待安装完成 sudo sh -c echo "de…

ROS安装教程(详细)

总结一下这两天安装ROS的过程。 1 配置软件库 桌面左侧栏 点search your computer,输入updates,点 Software & Updates,将main,universe,multiuniverse,restricted全都勾上,将Download from换成中科大的 http://mirrors.ust…

Ubuntu18.04对应的ROS安装步骤教程

Ubuntu18.04对应的ROS安装教程 一、ROS配置1 配置Ubuntu18.04 软件仓库2 开始安装3 测试 二、遇到的问题1 ROS无法下载问题2 sudo: rosdep: command not found3 rosdep update4 roscore 无法运行 三、不同Ubuntu系统下ROS版本安装教程1 Ubuntu 18.04 对应 ROS Melodic Morenia2…

ROS教程(一):ROS安装教程(详细图文)

ros教程:ros详细安装步骤(添加源、下载ROS及环境配置) 文章目录 前言一、版本选择二、开始安装2.1 软件中心配置2.2 添加源(注)2.3 安装2.4 配置ROS环境到系统 三、验证ROS 前言 关于ROS(Robot OS 机器人操…

ROS安装教程

本文为原创博客, 转载请注明出处:https://blog.csdn.net/q_z_r_s 参考自:http://wiki.ros.org/ROS/Tutorials 机器感知 一个专注于SLAM、三维重建、机器视觉等相关技术文章分享的公众号 开源地址:点击该链接 ROS安装教程 ROS Indigo仅适用于Ubuntu 13.10和Ubu…

百分百成功的ros安装教程,有手就能看懂!!!

肯定有许多人在安装ros的过程中遇到过各种各样的问题,接下来我将对ros安装进行详细的描述 1、下载操作系统 首先是版本的对应问题,ros安装一定要对应相应的操作系统版本,这里我们要安装的是Ros-Melodic-Morenia版本,对应的是Ubun…