原文链接:http://tecdat.cn/?p=27099
介绍
金融资产 / 证券已应用多种技术进行建模。该项目标次要指标是应用几何布朗运动模型和蒙特卡罗模仿来模仿股票价格。该模型基于受乘性噪声影响的随机(与确定性相同)变量。
该我的项目分两局部实现:
-
第一局部波及为几何布朗运动编写代码,并检查和验证它是否工作。这是应用 Python 中的几个函数实现的,并应用迭代设置将后续股票价格建模为马尔可夫链,给定初始起始价格 S0。验证过程包含运行多个模仿或随机游走样本,而后查看后果散布,以查看股票价格、收益和波动性是否满足某些属性和假如。
-
第二阶段波及摸索,将模型理论利用于理论股票价格,并应用耐克股票的实在股票数据进行回测。模仿是通过获取收益率 μ 和稳定率 σ 的样本值并察看股票价格演变的模仿数据和实在数据之间的相干水平来实现的。
模仿须要大概 10-15 分钟能力齐全运行。请留神,对模仿后果的所有解释都是通过解释价格水平和收益率的后果散布的均值和方差等参数来实现的。
假如
此我的项目中应用了以下变量和符号列表:
-
S0 – 初始股票价格
-
St – 工夫的股票价格,t
-
μ – 在特定时间段内均匀的股票收益(漂移)率
-
σ – 在特定时间段内均匀的股票稳定率(标准差)
-
dt – 模仿的工夫步长,对应于一天内股票价格采样的频率
-
N – 模仿的总天数。
-
r – 无风险利率,任何人都能够借 / 贷
还对股票市场 / 价格做出了以下假如。尽管这些假如的确有助于大大简化模型,但它们十分事实,有助于在现实状况下制订模型。
-
股票价格遵循马尔科夫过程,即是无记忆的,随后的股票价格仅取决于以后价值,而不取决于任何先前的价值。
-
与 N 相比,思考的工夫步长 dt 较短,即 Ndt>>1
-
市场残缺高效,不存在套利机会。
-
没有股息、交易成本或税收思考。
维纳过程和几何布朗运动
维纳过程(也称为布朗运动)是一个具备连续变量和间断工夫的马尔可夫过程。对于随机变量 z,它有两个重要的性质:
-
所有的 Δz 都是统计独立的。
-
dz = εdt
其中 ϵ 来自正态分布
通过将漂移项 a(x,t)dt 增加到随机过程 dz 上,能够将维纳过程进一步推广到 Ito 过程。
对于股票价格,上述方程是 Ito 过程,也称为几何布朗运动,形容了随工夫的随机变动。请留神,μ 和 σ 别离是刹时漂移和标准偏差率。S 遵循一个受乘性噪声影响的随机过程。这里还须要留神的是,几何布朗运动模型防止了负股票价格的问题。
为股票价格的解决方案建模
上述随机微分方程 (SDE) 具备以下模式的解析解:
请留神,在上述等式中,常数 μ 和 σ 别离对应于股票价格的百分比漂移(收益)和百分比稳定(标准差)率。Wt 指的是由 dz=ϵdt 给出的维纳过程,如上所述。该解方程用于以下列形式迭代计算每个工夫步的 St:
这里,t 是计算的工夫步长,每个 St 仅取决于之前的起始价格 St−1,这是布朗运动模型所要求的,因为它是一个马尔可夫过程。请留神,通过抉择一个小的工夫步长,咱们能够靠近间断工夫的极限。
因而,给定某个工夫步长,随后的每个股票价格 St 齐全由三个参数形容:
-
初始“开始”价格,St−1
-
百分比收益(漂移)率,μ
-
稳定率或标准偏差率,σ
上面的代码实现了下面形容的迭代过程。工夫步长由 dt 给出,对应于对股票价格进行采样的频率,N 是模仿运行的总天数。
# 几何布朗运动模型
#应用 mu= 收益率
#sigma= 稳定率
#dt= 工夫步长
#Si= 每个时间段的初始(开始)价格值
#价格和收益的工夫演变
#应用布朗运动模型来生成 N 天(时间段)的价格列表
def gices(mu, sigma, dt, Si, N):
pirr = np.zeros(N) #初始化一个长度为 N 的向量来存储价格值
pr_r\[0\] = Si #存储第一个价格值
retrr = np.zeros(N) #初始化向量来存储返回值
#还能够计算间断 N 之间的价格回报率
for i in range (1,N):
#留神 price\[i-1\] 是每次迭代的 Si
pr\_arr\[i\] = geoeti\_bown(mu, sigma, dt, price_arr\[i-1\])
运行单个模仿 / 步行
这部分代码只是调用下面编写的函数并绘制后果。给出了收益率和稳定率、起始价格和工夫步长的样本值。以下数字按呈现程序显示:
-
股票价格的演变,St 作为 N 的函数
-
股票价格程度的散布,绘制为直方图。
-
收益和对数收益的散布,也绘制为直方图。
在随后的局部中进行了屡次模仿,以理论验证模型的正确性。
# 运行单个模仿以查看性能
#应用 mu、sigma 和 Si 的样本值进行测试
#调用函数
Slst, RitRlolist = gpes(mu, sigma, dt, Si, N)
#绘制后果
plt.figure(figsize=(15,5))
# 用于获取 mu\_multiple 和 sigma\_multiple
#将价格数组作为输出并返回 mu 和 sigma
def v\_tun(price\_array):
mu_single = 0
sgm_sigle = 0
#计算模仿的均匀收益率,mu 和均匀稳定率,sigma
musigle = np.mean(mu_temp)
sigmsile = np.std(mu_temp)
#Monte Carlo 模仿几何布朗运动演变
#运行几个模仿来生成几个可能的价格演变数组
#用它来计算均匀稳定率和回报率
def gmlie(mu, sigma, dt, Si, N, sim_count):
cacies = np.zeros(shape=(N,sim_count)) #创立一个数组来存储模仿值
#对于 alc_res 数组,咱们只关怀值
#创立数组来存储每个的 mu 和 sigma 的值
m\_mutple = np.zeros(sim\_count)
sigmmiple = np.zeros(sim_count)
vl = np.linspace(0,N-1,N)
#运行模仿并绘制每个价格演变的后果
plt.figure(figsize=(20,20))
检查和测试多个模仿的代码
下面的代码蕴含一个函数,能够为几何布朗运动形容的随机游走运行多个模仿。还编写了另一个计算给定输出数组的均匀收益和稳定率程度的函数。这两个函数都用于生成几个模仿 / 随机游走,如上图所示。
上图显示了在雷同起始价格、S0=100 和收益率和稳定率、μ=0.2 和 σ=0.07 下运行的 500 次模仿图。应用的工夫步长为 dt=0.01,示意每天对股票价格进行频繁抽样。每条线代表应用后面形容的几何布朗运动模型建模的样本随机游走。而后通过绘制股票价格、收益和标准差的散布来剖析应用这些模仿生成的数据。而后剖析这些价格水平、收益和稳定率的散布,以查看其正确性和一致性。
从上面的第一张图中能够看出,价格水平遵循近似对数正态分布。这实际上是一个预期的后果。解,St 是一个对数正态分布的随机变量,其期望值和方差由下式给出:
从上面的第一幅图中能够看出,对于 sim_count = 500 次模仿,价格水平的确近似于对数正态分布,平均值约为 200。应用 tats.lmfit 函数测量的均值和方差也与以上定义的值在正当的误差范畴内。对于应用下面给出的参数的模仿运行,它们被计算为:
上面的第二张图显示了下面运行的模仿的收益率散布。能够很容易地察看到,收益呈正态分布,平均值约为 0.15,这是模仿中 μ 的输出值。这种收益率的正态分布也是布朗运动模型的预期后果。上面的第三张图显示了标准偏差率的散布,也能够察看到其呈正态分布,平均值约为 0.07,这是模仿的 σ 输出值。
因而,上述探讨验证了几何布朗运动编码模型的确按预期工作,并生成与模型的属性和假如绝对应的后果。自相似性也被证实实用于模型,其中不同的工夫步长 dt 与调整后的 μ 和 σ 一起应用,以产生类似的价格水平和收益散布。这是模型的另一个预期后果,因为布朗运动在不同尺度上体现出分形行为。
# 绘制价格水平和收益的散布以查看代码的有效性
#价格水平应依据几何布朗运动模型呈对数正态分布
#Retu ate 和 Vlatiiy 应该是正态分布的
#Plot 价格水平
plt.figure(figsize=(15,5))
#与上面给出的均值和标准差的对数正态分布进行比拟
logorman = Si\*np.exp(mu\*N*dt)
logmvar = (Si\*\*2)\*np.exp(2\*mu\*N\*dt)\*(np.exp((sigma\*\*2)\*N*dt)-1)
plt.plot(bns,lonm_dst,"g",lw=5) #绘制预期的对数正态密度散布
#绘制收益和稳定率散布
plt.figure(figsize=(15,5))
print(lono_ean)
print(np.sqrt(loomvr))
摸索:应用实在股票数据测试模型
一旦模型被查看为失常工作,它就会用实在的库存数据进行测试。耐克 (NKE) 2013-2015 年的股价被用来回测该模型。并且应用上述几何布朗运动模型运行 Monte Carlo 模仿。
以下值用于在两年期间应用 NKE 的实在数据测试代码。假如一年大概有 250 个工作日,N = 500 示意大概两年的工夫框架。通过将数据导入独自的 .csv 文件并对股票价格的收益率和标准差进行所需的计算来计算收益率和稳定率。
-
截至 2013 年 1 月 2 日,起始价格 S0 为 52.4。两年期末的预期价格 St 预计在 98.6 左右。
-
两年年化收益率为 μ=0.13,这是应用雅虎财经历史记录生成的价格列表计算得出的。
-
两年年化稳定率也从价格中取得,σ=0.05。
以下代码调用函数以通过几何布朗运动模型生成随机游走。
# 应用这些价格计算回报率和稳定率。pprint(k.geical('2013-01-01', '2015-01-01'))
# 应用输出参数的样本值运行多个模仿
dt = 0.01
sim_count = 500
#调用函数并运行模仿
prie, mu_arr, sigrr = geiple(mu, sgma, dt, Si, N, icont)
在 \[29\] 中:lorm_ean = Si\*np.exp(mu\*N*dt)
解释模仿后果
从上图中生成的随机游走能够看出,咱们在这里应用的模型乍一看仿佛产生了正确方向和近似幅度的价格演变。因为它是一个随机游走模型,重要的是要留神,后果只能解释为价格水平或整体收益散布,而不是单个模仿。上面的代码和数字为价格水平和收益率和稳定率生成所需的分布图。
首先须要留神的是,应用等式 E[St]=S0e(μNt) 的对数正态分布价格水平的计算平均值为 100.374。这位于实在值 98.6 的 5% 误差范畴内,是应用 500 次模仿生成的。
其次,能够看出几何布朗运动的所有性质都失去满足——价格水平遵从对数正态分布,收益率和稳定率正态分布,均值对应于输出参数值。
请留神,模仿还针对其余工夫范畴和不同的股票价格运行,均匀而言,该模型显示的值在圣路易斯实在价值的 10% 以内。
# 绘制价格水平的散布并返回以查看实在数据的代码
#价格水平应依据几何布朗运动模型呈对数正态分布
#Return Rate 和 Volatility 应该是正态分布的
#Plot 价格水平
plt.hist(prestiple,bins=100,normed=1,label="R")
#与上面给出的均值和标准差的对数正态分布进行比拟
lognorm_mean = Si\*np.exp(mu\*N*dt)
lognorm_var = (Si\*\*2)\*np.exp(2\*mu\*N\*dt)\*(np.exp((sigma\*\*2)\*N*dt)-1)
#绘制预期的对数正态密度散布
#绘制收益和稳定率散布
plt.hist(mu_arr,bins=100,normed=1,label="R")
评论和论断
从生成的模仿后果能够看出,几何布朗运动模型能够很好地应用下面探讨的随机过程来模仿股票价格。该模型首先被查看以满足几何布朗运动的个性,而后用实在的股票价格数据进行回测。NKE 2013-2015 年的股票价格用于计算 μ 和 σ 的值,而后用于运行该期间的模仿。股票价格的模仿后果和实在价值在 5% 的误差范畴内类似。
最受欢迎的见解
1.R 语言对 S&P500 股票指数进行 ARIMA + GARCH 交易策略
2.R 语言改良的股票配对交易策略剖析 SPY—TLT 组合和中国股市投资组合
3.R 语言工夫序列:ARIMA GARCH 模型的交易策略在外汇市场预测利用
4.TMA 三均线期指高频交易策略的 R 语言实现
5.r 语言多均线量化策略回测比拟
6. 用 R 语言实现神经网络预测股票实例
7.r 语言预测稳定率的实现:ARCH 模型与 HAR-RV 模型
8.R 语言如何做马尔科夫转换模型 markov switching model
9.matlab 应用 Copula 仿真优化市场危险