金融量化

您所在的位置:网站首页 股票最大利润算法流程图 金融量化

金融量化

2024-03-21 18:44| 来源: 网络整理| 查看: 265

1. 配对交易策略 1.1、引言

在量化投资领域,既然严格的无风险套利机会少、收益率微薄,实际的执行过程中也不能完全消除风险。那么如果有一种选择,能够稍微放松100%无风险的要求,比如允许有5%的风险,但同时却能够让套利机会增加100%以上,那岂不是一个更好的选择?今天,我们就来介绍这样一种方法——配对交易。

1.2、统计套利 1.2.1 定义

统计套利即主要以对历史数据进行统计分析为基础,估计目标统计量的分布,再结合股票自身基本面数据来指导套利交易。

1.2.2 评价

统计套利相对于无风险套利,它增加了一些风险,但也伴随着诱人的风险溢价,即获得更多套利机会。不过它一个本质上的局限来自于使用的历史数据,其只能反映过去的信息,用之预测未来有时难以讲得通。

1.2.3 例子

统计套利的原理其实用下面这张图就可以解释:

老头小狗走路时随机的,但老头和小狗的中间距离是0到绳子的长度, 具备稳定性

老头小狗走路时随机的,但老头和小狗的中间距离是0到绳子的长度, 具备稳定性

我们现在把这个场景应用到市场上,以股票为例:

股票A、B: 价格——Random Walk;

股票A和B的差价(或者其他的 Linear combination 的时间序列)——具备稳定性。

假设我们现在找到了这样一个股票 A 和 B 的序列,他们的差价,经过统计学的 Cointegration test 证明具备稳定性(如 Adfuller test),我们计算出该时间序列的 mean 和 std , 就可以设定一个稳定阀域,在偏离的时候买入/卖出,等到回归到稳定阀域再平仓。

举例,过去6个月内,A 股票和 B 股票的价差序列为平稳序列,均值为 10,标准差为 2,我们设定阀域为1.5个标准差,那么平稳区间就是 7-13 。

当 A-B > 13 时,我们买入 B , 卖出 A;

当 A-B < 7 时,我们买入 A , 卖出 B 。

等到回归到平稳区间平仓。

1.3 股票配对交易 1.3.1 定义

股票配对交易是统计套利的主要内容之一,它旨在寻找市场上历史走势相似的股票进行配对,当价格差较大(高于历史均值)时高卖低买进行套利。

1.3.2 主要方法

i.距离法

定 义:距离法使用一个回溯时间区间,标准化价格。然后在 2 范数下计算 n 只股票两两间的配对距离(SSD)。以 SSD 值最小的前 20 对作为标的,在后续 6 个月内以 2 倍标准差作为阈值进行统计套利,距离回到均值时平仓。6 个月后更新标的继续套利。

评 价:标的选择标准中蕴含着其无法最大化利润,因每对的收益与其价差(SSD)成正比;此外高相关性不代表协整,从而均值回复得不到保证。

改 进:(a) 只在同一行业内选择标的;

(b)使用 Pearson 相关系数度量期内相关性。

ii.协整法

前 提: 不平稳的经济时间序列的线性组合可能实现平稳。

在这里插入图片描述

Engle-Granger 法: 用对数价格进行 OLS 回归,对残差进行 ADF 检验,其中误差修正模型为 Johansen 方法。若验证了协整关系,即可说明股价 A,B之间存在长期均衡关系,从而残差序列是均值回复的。

评 价: 模型太单一,标的仅为两种股票,时限仅限于 2 年之内,单笔收益最大化不保证整体收益最大化。

改 进: 先进行距离筛选后再做协整。

iii.时间序列法

定 义: 假定价差为具有均值回归特性的马尔科夫链,伴随着高斯噪声。

在这里插入图片描述

评 价: 该方法优越性在于抓住了配对交易的核心—均值回复性;其次该模型是连续的,因而可以用于预测;最后,该模型易处理,可通过卡尔曼滤波方法得到最小 MSE 参数估计。 不过,价差应使用价格的自然对数差来避免量纲不同的影响;模型条件苛求收益平价,这实际很难达到;金融资产数据现实中并不满足Ornstein-Uhlenbeck 过程。

2. python 实现

Pair trading 策略 - 考虑时间序列平稳性

2.1 数据准备 & 回测准备 import pandas as pd import numpy as np import tushare as ts import seaborn from matplotlib import pyplot as plt plt.style.use('seaborn') %matplotlib inline data1 = ts.get_k_data('600199', '2013-06-01', '2014-12-31')[['date','close']] data2 = ts.get_k_data('600702', '2013-06-01', '2014-12-31')['close'] data.set_index('date',inplace = True) data.columns = stocks_pair data.head(


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3