动态预测波动率:ARCH模型和Heston模型

制定符合需要的资产组合需要了解每支的波动率,波动率高的资产意味着价格波动大,风险高,为了降低资产组合的风险,通常会在波动率较低的资产中分配更多的资金。同时波动率也和市场参与者的情绪有关,波动率大,资产不确定性越高,波动率低,可以反应市场或行业的相对平稳。

预测波动率时,可以使用arch模型和Heston模型,下文会提供代码,同时更多与金融、大数据等有关的代码、方案、数据可以关注gzh ‘finance褪黑素’获取。

目录

  • 一、波动率的简单定义
  • 二、ARCH模型预测
  • 三、Heston模型预测

一、波动率的简单定义

根据下图所示的收盘价计算波动率
​​在这里插入图片描述
日收益率 = 当日收盘价 − 前一日收盘价 前一日收盘价 × 100 \text{日收益率} = \frac{\text{当日收盘价} - \text{前一日收盘价}}{\text{前一日收盘价}} \times 100 日收益率=前一日收盘价当日收盘价前一日收盘价×100

将日收益率数据计算一个给定时间窗口内的标准差,标准差用于表示价格的波动性。
标准差 = ∑ i = 1 N ( 日收益率 i − 平均日收益率 ) 2 N \text{标准差} = \sqrt{\frac{\sum_{i=1}^{N}(\text{日收益率}_i - \text{平均日收益率})^2}{N}} \ 标准差=Ni=1N(日收益率i平均日收益率)2  
其中,(N) 是时间窗口内的交易日数量。

二、ARCH模型预测

arch模型认为当前时刻的波动性收到过去的影响,过去的波动率对当前的波动率有自回归的影响。

  1. ARCH(1) 模型:
    σ t 2 = α 0 + α 1 ε t − 1 2 \sigma_t^2 = \alpha_0 + \alpha_1 \varepsilon_{t-1}^2 \ σt2=α0+α1εt12 
    其中:

    • σ t 2 \sigma_t^2 σt2是在时刻 ( t ) 的条件方差(波动性)。
    • α 0 \alpha_0 α0 是模型中的常数项。
    • α 1 \alpha_1 α1 是自回归系数,表示过去方差对当前方差的影响。
    • ε t − 1 2 \varepsilon_{t-1}^2 εt12 是在 t − 1 \ t-1  t1 时刻的残差平方。
  2. ARCH ( p ) 模型:

    对于更一般的ARCH§模型,方程可表示为:
    σ t 2 = α 0 + ∑ i = 1 p α i ε t − i 2 \sigma_t^2 = \alpha_0 + \sum_{i=1}^{p} \alpha_i \varepsilon_{t-i}^2 \ σt2=α0+i=1pαiεti2 
    其中 p \ p  p 是模型中的滞后阶数。

这里的关键是 ε t \varepsilon_t εt 是残差项,表示观测值与其期望值的差异。ARCH模型的训练通常使用最大似然估计等方法,以估计模型参数 α 0 , α 1 , … , α p \alpha_0, \alpha_1, \ldots, \alpha_p α0,α1,,αp

ARCH模型通常与GARCH模型使用,arch-garch模型,GARCH模型在ARCH模型的基础上引入了过去的条件方差项,使模型更加灵活,这里只展示arch模型,arch-garch可以看博主其他文章,有介绍。

通过ACF和PACF可以确定模型参数p与q,这里建立arch(1,1)模型。

from arch import arch_model
rolling_predictions = []
window_size = 1000
test_size = len(returns) - window_size
for i in range(test_size):train = returns[i:i+window_size]am = arch_model(train,p=1,q=1)res = am.fit()pred = res.forecast(horizon=1)forecasted_variance = pred.variance.values[-1, :][0]rolling_predictions.append(forecasted_variance)

这里时间窗为1000,通过for循环函数迭代,预测波动率。在建立模型后,观察结果,该模型的参数估计表明市场波动率在一定程度上受到了先前时刻波动率的影响,符合ARCH模型的基本假设。
预测结果显示:
在这里插入图片描述

作图观察真实波动率和预测波动率的图形:
在这里插入图片描述
其实这张图是处理了异常值后的波动率图,原始图像存在远远超出其他值的点,我观察到大部分数据围绕0.05下的某个数据进行变化,但有一个值在0.3以上,不合理,于是用了平均值替代该异常值。
代码处理如下:

t = np.where(tt > 0.3, tt.mean(), tt)

三、Heston模型预测

Heston模型是动态预测,是随机波动率的一种,捕捉了波动率的动态演变。这个模型的公式包含了股票价格漂移、随机波动和波动率演化,其中有随机参数和需要通过市场情况确定的参数,下面用了最大似然估计参数。
Heston模型的核心方程包括漂移、随机波动和波动率的演化方程。以下是Heston模型的主要方程:

  1. 股票价格漂移:
    d S t = μ S t d t + v t S t d W t S \ dS_t = \mu S_t dt + \sqrt{v_t} S_t dW_t^S \  dSt=μStdt+vt StdWtS 

    • S t \ S_t  St 是时刻 t \ t  t的股票价格。
    • m u \ mu  mu 是漂移率。
    • v t \ v_t  vt是时刻 t \ t  t的波动率。
    • d W t S \ dW_t^S  dWtS是股票价格的随机项(布朗运动)。
  2. 波动率演化:
    d v t = κ ( θ − v t ) d t + ξ v t d W t v \ dv_t = \kappa (\theta - v_t) dt + \xi \sqrt{v_t} dW_t^v \  dvt=κ(θvt)dt+ξvt dWtv 

    • v t \ v_t  vt 是时刻 t \ t  t 的波动率。
    • k a p p a \ kappa  kappa 是波动率回复速度。
    • θ \theta θ是波动率的长期均值。
    • ξ \xi ξ 是波动率的波动项。
    • d W t v \ dW_t^v  dWtv 是波动率的随机项(布朗运动)。
  3. 股票价格和波动率的协方差项:
    d W t S ⋅ d W t v = ρ d t \ dW_t^S \cdot dW_t^v = \rho dt \  dWtSdWtv=ρdt 

    • ρ \rho ρ 是股票价格和波动率之间的相关系数。
# HESTON模型的随机微分方程
def heston_model(params, spot_price, maturity, num_steps):kappa, theta, sigma, rho, v0 = paramsdt = maturity / num_stepsstock_prices = np.zeros(num_steps + 1)volatility = np.zeros(num_steps + 1)stock_prices[0] = spot_pricevolatility[0] = v0for i in range(1, num_steps + 1):dW1 = np.random.normal(0, np.sqrt(dt))dW2 = rho * dW1 + np.sqrt(1 - rho**2) * np.random.normal(0, np.sqrt(dt))stock_prices[i] = stock_prices[i-1] * np.exp((kappa * (theta - volatility[i-1]) - 0.5 * volatility[i-1]) * dt + np.sqrt(volatility[i-1] * dt) * dW1)volatility[i] = np.maximum(0, volatility[i-1] + sigma * np.sqrt(volatility[i-1] * dt) * dW2)return stock_prices, volatilitydef loss_function(params, spot_price, maturity, num_steps, market_data):simulated_prices, simulated_volatility = heston_model(params, spot_price, maturity, num_steps)loss = np.mean((simulated_volatility - market_data)**2)return loss
def loss_function(params, spot_price, maturity, num_steps, market_data):simulated_prices, simulated_volatility = heston_model(params, spot_price, maturity, num_steps)loss = np.mean((simulated_volatility[:len(market_data)] - market_data)**2)return loss
spot_price = data['收盘'].iloc[0]
maturity = len(returns) / 252  # 252个交易日一年
num_steps = len(returns)
market_data = returns.values 
initial_params = [1.0, 0.04, 0.1, -0.5, 0.04]  # 初始参数猜测值
result = minimize(loss_function, initial_params, args=(spot_price, maturity, num_steps, market_data))
estimated_params = result.x
print("Estimated Parameters:", estimated_params)

结果显示模型参数:
Estimated Parameters: [ 0.99999113 0.03999434 0.09999449 -0.50000155 0.04000012]
在这里插入图片描述
导出数据:

import csv
my_single_column_list = t
header = ['结果']
data = [header] + [[item] for item in my_single_column_list]
csv_file_path = '波动率.csv'
with open(csv_file_path, 'w', newline='') as csv_file:csv_writer = csv.writer(csv_file)csv_writer.writerows(data)
print(f'CSV文件已保存至 {csv_file_path}')

更多与金融、大数据等有关的代码、方案、数据可以关注gzh ‘finance褪黑素’获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2804563.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【算法与数据结构】684、685、LeetCode冗余连接I II

文章目录 一、684、冗余连接 I二、685、冗余连接 II三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、684、冗余连接 I 思路分析:题目给出一个无向有环图,要求去掉一个边以后构成一个树&#xf…

如何在VSCode中带有参数的Debug(name、program、$file、args、pickArgs、指定虚拟环境)

0. 省流 {"version": "0.2.0","configurations": [{"name": "调试train.py文件","type": "debugpy","request": "launch","program": "train.py","cons…

如何改变.net托管的入口main函数

有小伙伴问: .NET托管入口Main函数可以修改成别的函数,用来作为程序的入口吗? 答案:当然是可以的。这也算是.NET里面非常简单的骚操了。本篇来用最新的.NET8演示下,如何修改Main入口。 1.简单控制台例子: namespace…

美国硅谷大带宽服务器|大带宽服务器租赁贵吗?

在数字化时代,服务器成为了支撑各种在线业务和应用程序的重要基石。尤其对于那些需要处理大量数据、保证快速响应和稳定连接的企业或个人来说,大带宽服务器成为了不可或缺的选择。而美国硅谷,作为全球科技创新的摇篮,其服务器租赁…

Open CASCADE学习|绘制砂轮

今天绘制一个砂轮,其轮廓由两条直线段和两段圆弧构成,圆弧分别与直线相切,两条圆弧之间相交而非相切。建模思路是:先给定两条直线段的起始点及长度,画出直线段,然后给定其中一圆弧的半径及圆心角&#xff0…

python程序设计基础:字符串与正则表达式

第四章:字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码,最多只能表示256个符号。 随着信息技…

【新手易错点】golang中byte和rune

1 总体区别 在Golang中,byte和rune是两种不同类型的数据。简单来说,byte是一个8位的无符号整数类型,而rune则是一个32位的Unicode字符类型。 Byte: 在Golang中,byte类型实际上是uint8的别名,它用来表示8位的无符号整…

flutter使用getx实现路由跳转,页面没有执行dispose

我们看一下flutter的StatefulWidget组件的生命周期: createState: 当一个StatefulWidget插入到渲染树结构、或者从渲染树结构移除时,都会调用StatefulWidget.createState方法,从而达到更新UI的效果; initState&#…

【刷题记录】链表的回文结构

本系列博客为个人刷题思路分享,有需要借鉴即可。 1.题目链接: LINK 2.详解思路: 思路:思路:先找到中间节点,然后逆置后半部分链表,一个指针指向链表的头节点,再一个指针指向逆置的头…

怎么在wifi中实现手机和电脑文件互传

有时我们想手机电脑文件互传,数据线却不在身边,这时我们可以用MiXplorer来实现wifi中手机和电脑互相访问文件。 MiXplorer是一款来自著名安卓开发者论坛XDA的作品,免费且功能强大,被很多人誉为是“全能文件管理器”。 1.在手机上…

Golin 弱口令/漏洞/扫描/等保/基线核查的快速安全检查小工具

下载地址: 链接:https://pan.quark.cn/s/db6afba6de1f 主要功能 主机存活探测、漏洞扫描、子域名扫描、端口扫描、各类服务数据库爆破、poc扫描、xss扫描、webtitle探测、web指纹识别、web敏感信息泄露、web目录浏览、web文件下载、等保安全风险问题风险…

进程线程通信-day6

1、将信号和消息队列的课堂代码敲一遍 //发送端 #include<myhead.h>//定义一个消息结构类型 struct msgbuf {long mtype;char mtext[1024]; }; //定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const…

CSS实现半边边框(只有边框的部分可见)

CSS实现半边边框&#xff08;只有边框的部分可见&#xff09; <div class"part box"><h1>内容</h1><!-- 绘出下面两个对角边框--><div class"part-footer"></div> </div>主要代码 .box {width: 100px;height:…

cmake 项目。qt5升级 qt6 报错 error: “Qt requires a C++17 compiler 已解决

日常项目开发中。需要对qt5升级到qt6 做cmake兼容配置&#xff0c;在编译中发现&#xff0c;有c 编译环境 报错 2>C:\Qt\6.5.3\msvc2019_64\include\QtCore/qcompilerdetection.h(1226,1): fatal error C1189: #error: "Qt requires a C17 compiler, and a suitable …

ChatGPT的增长已经进入了瓶颈期

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Vue3自定义组件v-model双向绑定

无能吐槽一下&#xff0c;虽然用了很多遍v-model&#xff0c;但是还是不得要领&#xff0c;每次看官网都感觉说的不是很清晰&#xff0c;在写的时候还是要查看文档&#xff0c;可能就是不理解原理&#xff0c;这次特意好好写一篇文章&#xff0c;让自己好好理解一下。 自定义一…

React18源码: React调度中的3种优先级类型和Lane的位运算

优先级类型 React内部对于优先级的管理&#xff0c;贯穿运作流程的4个阶段&#xff08;从输入到输出&#xff09;&#xff0c;根据其功能的不同&#xff0c;可以分为3种类型&#xff1a; 1 &#xff09;fiber优先级(LanePriority) 位于 react-reconciler包&#xff0c;也就是L…

HarmonyOS Stage模型 应用配置文件讲解

好&#xff0c;上文 HarmonyOS Stage模型基本概念讲解 中&#xff0c;我们简单讲解了HarmonyOS 中 Stage模型的基本概念 那么 我们继续学习Stage模型的相关知识 上文之后 我们肯定对它的概念和基本结构 有了一个了解 那么 我们就来看一下 基于Stage模型 它里面一些基本的配置文…

FPGA领域顶级学术会议

FPGA领域顶级学术会议主要有FPGA,FCCM,FPL和FPT。 1 FPGA 会议全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 网站是:https://dl.acm.org/conference/fpga FPGA常年在美国举办,每年2月,偏FPGA基础研究; 该会议的论文免费下载。这个比…

Java项目:26 基于SpringBoot+thymeleaf实现的蓝天幼儿园管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 基于SpringBootthymeleaf实现的蓝天幼儿园管理系统是为幼儿园提供的一套管理平台&#xff0c;可以提高幼儿园信息管理的准确性&#xff0c;系统将信息…