【视频】随机波动率SV模型原理和Python对标普SP500股票指数预测|数据分享

简介: 【视频】随机波动率SV模型原理和Python对标普SP500股票指数预测|数据分享

原文链接:http://tecdat.cn/?p=22546


什么是随机波动率?


随机波动率 (SV) 是指资产价格的波动率是变化的而不是恒定的。


“随机”一词意味着某些变量是随机确定的,无法精确预测。


在金融建模的背景下,随机建模迭代随机变量的连续值,这些值彼此不独立。非独立的意思是虽然变量的值会随机变化,但其起点将取决于其先前的值,因此取决于其先前的值,依此类推;这描述了所谓的随机游走。


点击标题查阅往期内容


Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型


01

02

03

04


随机波动率的经验证据


在定义了波动率的含义之后,我们现在通过讨论波动率随机变化的证据来引导其余部分。我们(大体上)遵循,对现金和期权市场中观察到的价格行为进行一些实证观察。我们考虑了一些经济解释,并将它们与手头的主题联系起来:


厚尾


现在普遍接受的是,资产收益的经验分布是尖峰的意思(大致),即关于均值的四阶矩大于具有相同方差的正态分布的相同统计量。这意味着观察到更多的极端回报和更少的中等回报,“尖峰”意味着实际分布中靠近均值的天数更多,“厚尾”表示极端收益率出现的频率高于正态分布的预测,比如出人意料的“黑天鹅事件”。

波动性聚类和持久性


看一眼金融时间序列通常会立即发现高波动期和低波动期。


事实上,肥尾和波动性聚类是同一枚硬币的两个方面。众所周知,分布的混合,例如根据正态分布分布的价格变化,但具有随机方差,可以复制肥尾。然而,通过直接将基础价格分布建模为具有肥尾,可以同样很好地解释肥尾和波动性聚类。另一个经验事实是波动机制的持续存在,存在高波动期和低波动期,而不仅仅是随机事件。这一观察表明了任何提议的波动率模型的某些内容。


什么是随机建模?


随机建模是一种用于帮助做出投资决策的财务模型。这种类型的建模使用随机变量预测不同条件下各种结果的概率。

随机建模呈现数据并预测结果,这些结果说明了一定程度的不可预测性或随机性。许多行业的公司都可以使用随机模型来改进他们的业务实践并提高盈利能力。在金融服务领域,规划师、分析师和投资组合经理使用随机模型来管理他们的资产和负债并优化他们的投资组合。


关键要点


  • 随机模型使用随机变量预测不同条件下各种结果的概率。

  • 随机建模呈现数据并预测结果,这些结果说明了一定程度的不可预测性或随机性。

  • 在金融服务领域,规划师、分析师和投资组合经理使用随机模型来管理他们的资产和负债并优化他们的投资组合。

  • 与随机建模相反的是确定性建模,它每次都为一组特定的输入提供相同的精确结果。

  • 蒙特卡洛模拟是随机模型的一个例子。它可以根据单个股票收益的概率分布来模拟投资组合的表现。


了解随机建模:恒定与可变


要理解随机建模的概念,将其与相反的确定性建模进行比较会有所帮助。


确定性建模产生恒定的结果


无论您重新计算模型多少次,确定性建模都可以为特定的一组输入提供相同的精确结果。在这里,数学性质是已知的。它们都不是随机的,只有一组特定值和一个问题的答案或解决方案。对于确定性模型,不确定因素是模型外部的。


随机建模产生多变的结果


另一方面,随机建模本质上是随机的,模型中内置了不确定因素。该模型产生了许多答案、估计和结果——例如将变量添加到复杂的数学问题中——以查看它们对解决方案的不同影响。然后在各种情况下重复多次相同的过程。


波动性


资产的波动性是期权定价的关键组成部分。随机波动率模型是出于对期权定价的 Black Scholes 模型进行修改的需要而开发的,该模型未能有效地考虑到标的证券价格波动性可能发生变化的事实。Black Scholes 模型反而做了简化假设,即基础证券的波动性是恒定的。随机波动率模型通过允许基础证券的价格波动率作为随机变量波动来纠正这一点。通过允许价格变化,随机波动率模型提高了计算和预测的准确性。

随机波动的一般形式


连续时间金融模型被写成使用随机微分方程的扩散过程。我们正在研究的模型的一般形式是

这些方程意味着 S 的瞬时回报由一些确定性项加上一些随机噪声给出。本身遵循类似(但更一般)的随机动态。


Heston 随机波动率模型


Heston 模型是由金融学者 Steven Heston 在 1993 年创建的随机波动率模型。该模型使用波动率或多或少是随机的假设,并具有以下区别于其他随机波动率模型的特征:


  • 它考虑了资产价格与其波动性之间的相关性。

  • 它将波动理解为回归均值。

  • 它不要求股票价格遵循对数正态概率分布。

如下图所示,观察到的股票波动率可能会飙升至高于或低于平均水平,但似乎总是在平均水平附近。高波动期之后通常是低波动期,反之亦然。使用均值回归确定波动范围并结合 预测 技术,投资者可以选择最佳交易。


Python随机波动率(SV)模型对标普500指数时间序列波动性预测


资产价格具有随时间变化的波动性(逐日收益率的方差)。在某些时期,收益率是高度变化的,而在其他时期则非常平稳。随机波动率模型用一个潜在的波动率变量来模拟这种情况,该变量被建模为随机过程。下面的模型与 No-U-Turn Sampler 论文中描述的模型相似,Hoffman (2011) p21。

这里,r是每日收益率序列,s是潜在的对数波动率过程。


建立模型


首先,我们加载标普500指数的每日收益率。

returns = (pm.get_data("SP500"))
returns\[:5\]

正如你所看到的,波动性似乎随着时间的推移有很大的变化,但集中在某些时间段。在2500-3000个时间点附近,你可以看到2009年的金融风暴。

ax.plot(returns)

指定模型。

GaussianRandomWalk('s', hape=len(returns))
nu = Exponential(  .1)
r = StudentT(  pm.math.exp(-2*s),
                    obs=returns)


拟合模型


对于这个模型,最大后验(_Maximum_ A _Posteriori_,MAP)概率估计具有无限的密度。然而,NUTS给出了正确的后验。

pm.sample(tune=2000
Auto-assigning NUTS sampler...

plot(trace\['s'\]);

观察一段时间内的收益率,并叠加估计的标准差,我们可以看到该模型是如何拟合一段时间内的波动率的。

plot(returns)
plot(exp(trace\[s\]);

np.exp(trace\[s\])


参考文献


  1. Hoffman & Gelman. (2011). The No-U-Turn Sampler: Adaptively Setting Path Lengths in Hamiltonian Monte Carlo.
相关文章
|
21小时前
|
API Python
使用Python获取HTTP请求头数据
在Python Web开发中,`requests`库用于发送HTTP请求,请求头是关键元素,包含客户端信息和请求详情。要查看请求头,先创建`Request`对象,打印其`headers`属性,然后使用`get`等方法发送请求并获取响应头。别忘了处理不同HTTP方法、内容类型以及异常。使用`Session`管理会话状态,并考虑日志记录以调试。通过控制请求头,能有效与服务器通信。
10 0
|
1天前
|
XML 前端开发 数据挖掘
Web数据提取:Python中BeautifulSoup与htmltab的结合使用
Web数据提取:Python中BeautifulSoup与htmltab的结合使用
|
2天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
|
2天前
|
存储 安全 Java
在Python中,引用和赋值机制是理解变量和数据对象之间关系的关键
【6月更文挑战第16天】Python变量是对象引用,不存储数据,指向内存中的对象。赋值`=`创建引用,不复制对象。`b = a`时,a和b指向同一对象。引用计数管理对象生命周期,垃圾回收在引用数为0时回收对象。理解这些机制对优化内存使用关键。
23 7
|
3天前
|
存储 Python 容器
【Python数据魔术】:揭秘类型奥秘,赋能代码创造
【Python数据魔术】:揭秘类型奥秘,赋能代码创造
|
3天前
|
Shell Python
GitHub星标破千Star!Python游戏编程的初学者指南
Python 是一种高级程序设计语言,因其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言。 目前的编程书籍大多分为两种类型。第一种,与其说是教编程的书,倒不如说是在教“游戏制作软件”,或教授使用一种呆板的语言,使得编程“简单”到不再是编程。而第二种,它们就像是教数学课一样教编程:所有的原理和概念都以小的应用程序的方式呈现给读者。
|
3天前
|
机器学习/深度学习 存储 自然语言处理
惊艳!老司机熬夜总结的Python高性能编程,高效、稳定、快速!
Python 语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理机器学习、科学计算、推荐系统构建等。 能够轻松实现和代码跑得够快之间的取舍却是一个世人皆知且令人惋惜的现象而这个问题其实是可以解决的。 有些人想要让顺序执行的过程跑得更快。有些人需要利用多核架构、集群,或者图形处理单元的优势来解决他们的问题。有些人需要可伸缩系统在保证可靠性的前提下酌情或根据资金多少处理更多或更少的工作。有些人意识到他们的编程技巧,通常是来自其他语言,可能不如别人的自然。
|
3天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
3天前
|
存储 Python 索引
【Python编程挑战】:单链表实现技巧与最佳实践
【Python编程挑战】:单链表实现技巧与最佳实践