精华内容
下载资源
问答
  • 配对交易助手

    2016-09-06 23:08:42
    一个用于登记配对交易并提示后续配对循环的小工具.(原创) 里面有个.docx说明. 1. 行情自动获取, 2. 历史BPS, EPS自动获取鼠标悬浮显示, 3. PB, PE显示因配对的多为价值投资股需参考; 4. 港股汇率自动获取H股自动...
  • 配对交易详细解析

    2017-10-30 16:31:01
    量化交易,详细解释股票配对交易操作流程,多空对冲交易
  • 配对交易(Pairs Trading)是指八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量分析团队提出的一种市场中性投资策略,,其成员主要是物理学家、数学家、以及计算机学家。...
  • 配对交易简介配对交易是指八十年代中期华尔街著名投行 Morgan Stanley 的数量交易员 Nunzio Tartaglia 成立的一个数量分析团队提出的一种市场中性投资策略,其成员主要是物理学家、数学家、以及计算机学家。...

    配对交易简介

    配对交易是指八十年代中期华尔街著名投行 Morgan Stanley 的数量交易员 Nunzio Tartaglia 成立的一个数量分析团队提出的一种市场中性投资策略,其成员主要是物理学家、数学家、以及计算机学家。

    Ganapathy Vidyamurthy 在《 Pairs Trading: Quantitative Methods and Analysis 》一书中定义配对交易为两种类型:一类是基于统计套利的配对交易,一类是基于风险套利的配对交易。

    基于统计套利的配对交易策略是一种市场中性策略,具体的说,是指从市场上找出历史股价走势相近的股票进行配对,当配对的股票价格差( Spreads )偏离历史均值时,则做空股价较高的股票同时买进股价较低的股票,等待他们回归到长期均衡关系,由此赚取两股票价格收敛的报酬。

    数据分析

    数据包括几种常见数据货币每个小时的价格,每一种数字火币的交易记录有 20000 条。

    如下图所示:

    具体的数据如下图所示:

    数据处理

    因为每种数字货币的价格不一样,为了体现出他们的关联性,首先要进行归一化操作,将价格归一化处理。这里采用的是 sklearn 中的 MinMaxScaler 。

    ## 节选代码

    from sklearn.preprocessing import MinMaxScaler

    min_max_scaler = MinMaxScaler()

    np_list=np.asarray(data_items).reshape(-1,1)

    X_train_minmax = min_max_scaler.fit_transform(np_list)

    归一化之后,基于 matplotlib 进行可视化

    肉眼可见,最上面两个曲线之间有一定的关联性,两者在分离之后多次汇合,接下来借助协方差来评估二者之间的关联度。

    模型实现

    协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

    采用 numpy 中的 cov 函数来实现协方差的计算。

    import numpy as np

    np.cov(x,y)

    输出样例:

    [[ 9.44749900e-09 -4.05910662e-09]

    [-4.05910662e-09 3.38730102e-08]]

    效果评估

    4 个数字货币的交易记录

    其中 0,1 之间有很高的关联度

    可以在两个价格分离的时候,买入低价的 A,卖出高价的 B,当二者价格重新回归的时候平仓,即可以获得盈利。

    相关知识

    相关教程

    展开全文
  • 配对交易策略

    千次阅读 2019-07-10 10:25:43
    一、引言 在量化投资领域,既然严格的无风险套利...今天,我们就来介绍这样一种方法——配对交易。 二、统计套利 1.定义 统计套利即主要以对历史数据进行统计分析为基础,估计目标统计量的分布,再结合股票自...

    一、引言

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

    二、统计套利

    1.定义

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

    2.评价

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

    3.例子

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

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

    股票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.定义

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

    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 过程。

    推荐阅读

    1.市面上经典的量化交易策略都在这里了!

    2.海龟交易法则策略,多读几遍少走10年路

    3.配对交易—这个股票策略曾年赚5000万美元

    4.揭开日内回转交易策略做“T+0”的面纱

    5.经典量化选股方法——没有秘密的多因子

     

     

    展开全文
  • 基于python实现的金融大数据分析作业,主要实现金融领域的股票配对交易模型(模型只针对同行业的股票才有效,所以在获取数据前一定要确保用到的股票数据是同行业的)
  • 配对交易方法Abstract 抽象 This is one of the articles of A.I. Capital Management’s Research Article Series, with the intro article here. This one is about applying RL on market neutral strategies, ...

    配对交易方法

    Abstract

    抽象

    This is one of the articles of A.I. Capital Management’s Research Article Series, with the intro article here. This one is about applying RL on market neutral strategies, specifically, optimizing a simple pair trading strategy with RL agent being the capital allocator on per trade basis, while leaving the entrance/exit signal untouched. The goal is to optimize an existing signal’s sequential trade size allocation while letting the agent adapt its actions to market regimes/conditions.

    这是AI Capital Management研究文章系列的文章之一, 此处有介绍性文章。 这是关于将RL应用于市场中立策略,具体而言,以RL代理为每笔交易的资本分配者来优化简单的成对交易策略,同时保持进/出信号不变。 目的是优化现有信号的顺序交易规模分配,同时让代理人使其行动适应市场制度/条件。

    Author: Marshall Chang is the founder and CIO of A.I. Capital Management, a quantitative trading firm that is built on Deep Reinforcement Learning’s end-to-end application to momentum and market neutral trading strategies. The company primarily trades the Foreign Exchange markets in mid-to-high frequencies.

    作者: Marshall Chang是AI Capital Management的创始人兼CIO,这是一家定量交易公司,其建立在Deep Reinforcement Learning在动量和市场中性交易策略的端到端应用程序的基础上。 该公司主要以中高频交易外汇市场。

    Overview

    总览

    Pairs trading is the foundation of market neutral strategy, which is one of the most sought-after quantitative trading strategies because it does not profit from market directions, but from the relative returns between a pair of assets, avoiding systematic risk and the Random Walk complexity. The profitability of market neutral strategies lie within the assumed underlying relationship between pairs of assets, however, when such relationship no longer withhold, often during volatile regime-shifting times such as this year with COVID-19, returns generally diminishes for such strategies. In fact, according to HFR (Hedge Fund Research, Inc.), the HFRX Equity Hedge Index, by the end of July, 2020, reported a YTD return of -9.74%[1]; its close relative, the HFRX Relative Value Arbitrage Index, reported a YTD return of -0.85%. There is no secret that for market neutral quants, or perhaps any quants, the challenge is not just to find profitable signals, but more in how to quickly detect and adapt complex trading signals during regime-shifting times.

    交易对是市场中立策略的基础,这是最抢手的定量交易策略之一,因为它不从市场方向获利,而是从一对资产之间的相对收益中获利,避免了系统性风险和随机游走的复杂性。 市场中立策略的获利能力处于资产对之间假定的基本关系之内,但是,当这种关系不再保留时,通常在动荡的政权转换时期(例如今年的COVID-19),这种策略的收益通常会减少。 实际上,根据HFR(Hedge Fund Research,Inc.)的数据,截至2020年7月,HFRX股票对冲指数的年初至今回报率为-9.74% [1] ; 其近亲HFRX相对价值套利指数的年初至今回报率为-0.85%。 毫无疑问,对于市场中立的量化指标,或者也许对任何量化指标而言,面临的挑战不仅是寻找有利可图的信号,而且还在于如何在政权转换期间快速检测和适应复杂的交易信号。

    Within the field of market neutral trading, most research have been focusing on uncovering correlations and refining signals, often using proprietary alternative data purchased at high costs to find an edge. However, optimization of capital allocation at trade size and portfolio level is often neglected. We found that lots of pair trading signals, though complex, still utilizes fixed entry thresholds and linear allocations. With the recent advancement of complex models and learning algorithms such as Deep Reinforcement Learning (RL), these class of algorithm is yearning for innovation with non-linear optimization.

    在市场中立交易领域,大多数研究都集中在发现相关性和提炼信号上,通常使用高成本购买的专有替代数据来寻找优势。 但是, 经常忽略在贸易规模和投资组合水平上进行资本配置的优化 。 我们发现,许多配对交易信号尽管很复杂,但仍利用固定的进入门槛和线性分配。 随着复杂模型和学习算法(例如深度强化学习(RL))的最新发展,这类算法正渴望通过非线性优化进行创新。

    Methodology — AlphaSpread RL Solution

    方法论— AlphaSpread RL解决方案

    To address the detection and adaptation of pair trading strategies through regime shifting times, our unique approach is to solve trade allocation optimization with sequential agent-based solution directly trained on top of existing signal generalization process, with clear tracked improvement and limited overhead of deployment.

    为了解决通过制度转移时间来发现和调整配对交易策略的问题,我们独特的方法是通过在现有信号泛化过程之上直接训练的,基于顺序代理的解决方案来解决贸易分配优化问题,该解决方案具有明确的跟踪改进和有限的部署开销。

    Internally named as AlphaSpread, this project demonstrates RL sequential trade size allocation’s ROI (Return on Investment) improvement over standard linear trade size allocation on 1 pair spread trading of U.S. S&P 500 equities. We take the existing pair trading strategy with standard allocation per trade as baseline, train RL allocator represented by a deep neural network model in our customized Spread Trading Gym environment, then test on out-of-sample data and aim to outperform baseline ending ROI.

    该项目内部称为AlphaSpread ,展示了美国标准普尔500股票一对对价差交易中RL顺序交易规模分配的ROI(投资回报)​​相对于标准线性交易规模分配的提高。 我们将现有的配对交易策略(以每笔交易的标准分配作为基准)作为基准,在定制的Spread Trading Gym环境中训练由深度神经网络模型表示的RL分配器,然后对样本外数据进行测试,并力求超越基准期末ROI。

    Specifically, we select cointegrated pairs based on their stationary spreads our statistical models. Cointegrated pairs are usually within the same industry, but we also include cross sectional pairs that show strong cointegration. The trading signal are generated by reaching pre-defined threshold of z-score on residues predicted by the statistical model using daily close prices. The baseline for this example allocates fixed 50% of overall portfolio to each trading signal, whereas the RL allocator output 0–100% allocation for each trading signal sequentially based on current market condition represented by a lookback of z-score.

    具体来说,我们根据统计模型的固定价差选择协整对。 协整对通常位于同一行业,但我们还包括横截面对,它们显示出很强的协整性。 交易信号是通过使用每日收盘价通过统计模型预测的残差达到z分数的预定阈值而生成的。 此示例的基准将固定总资产组合的50%分配给每个交易信号,而RL分配器根据Z分数回溯表示的当前市场状况依次为每个交易信号输出0-100%的分配。

    AlphaSpread — In the video, the red NAV is a signal’s performance into the COVID months, the green one is the same strategy with our RL allocator. We learned that our RL agent can pick up regime shifts early on and allocate accordingly to avoid huge downturns.
    AlphaSpread —在视频中,红色的NAV是信号进入COVID月份的性能,绿色的是与RL分配器相同的策略。 我们了解到,我们的RL特工可以尽早提起政权转移,并进行相应分配,以免出现大幅下滑。

    Results Summary

    结果汇总

    We summarize our RL approach’s pairs trading ROI against baseline linear allocation for 107 U.S. Equity pairs traded. The ROI is calculated with ending NAV of testing period against each pair’s $100,000 starting capital. The result is from back-testing on out-of-sample data between 2018 to April 2020 (COVID-19 months included). The RL allocators are trained with data between 2006 and 2017. In both cases fees are not consider in the testing. We have achieved on average 9.82% per pair ROI improvement over baseline approach, with maximum of 55.62% and minimum of 0.08%.

    我们针对107个美国股票对总结了RL方法的对投资回报率与基准线性分配的对。 相对于每对100,000美元的启动资金,以测试期末的资产净值来计算ROI。 结果是对2018年至2020年4月(包括COVID-19个月)之间的样本外数据进行了回测。 RL分配器接受了2006年至2017年之间的数据培训。在两种情况下,测试均不考虑费用。 与基线方法相比,我们平均每对ROI提升了9.82%,最大为55.62%,最小为0.08%。

    In other words, with limited model tuning, this approach is able to result in generalized improvement of ROI through early detecting of regime-shifting and the accordingly capital allocation adaptation by the RL allocator agent.

    换句话说,通过有限的模型调整,该方法能够通过早期检测到体制转移以及相应地由RL分配器代理进行资本分配适应,来全面提高ROI。

    Image for post
    A snapshot of pair trading strategies’ ROIs, comparing base allocation and RL allocation配对交易策略ROI的快照,比较基本分配和RL分配

    Discussions of Generalization

    泛化讨论

    The goal of this project is to demonstrate out-of-sample generalization of the underlying improvements on a very simple one-pair trading signals, hence providing guidance on adapting such methodology on large scale complex market neutral strategies to be deployed. Below is a discussion of the 3 goals we set out to achieve in this experiment.

    该项目的目的是展示对非常简单的一对交易信号的潜在改进的样本外概括,从而为在将要部署的大规模复杂市场中立策略上采用这种方法提供指导 。 以下是我们在本实验中要实现的3个目标的讨论。

    Repeatability — This RL framework consists of customized pairs trading RL environment used to accurately train and test RL agents, RL training algorithms including DQN, DDPG and Async Actor Critics, RL automatic training roll out mechanism that integrates memory prioritized replay, dynamic model tuning, exploration/exploitation and etc., enabling repeatability for large datasets with minimum customization and hand tuning. The advantage of running RL compared with other machine learning algorithm is that it is an end-to-end system from training data generalization, reward function design, model and learning algorithm selection to output a sequential policy. A well-tuned system requires minimum maintenance and the retraining / readapting of models to new data is done in the same environment.

    重复性 -此RL框架包括用于准确训练和测试RL代理的定制交易RL环境配对交易,包括DQN,DDPG和Async Actor Critics在内的RL训练算法,集成了内存优先重放,动态模型调整,探索的RL自动训练推出机制/ exploitation等,从而以最小的自定义和手动调整实现大型数据集的可重复性。 与其他机器学习算法相比,运行RL的优势在于它是一个从训练数据概括,奖励函数设计,模型和学习算法选择到输出顺序策略的端到端系统。 调整良好的系统需要最少的维护,并且在同一环境中对新数据进行模型的重新训练/重新适应。

    Sustainability — Under the one-pair trading example, the pairs cointegration test and RL training were done using data from 2006 and 2017, and then trained agents run testing from 2018 to early 2020. The training and testing data split are roughly 80:20. With RL automatic training roll out, we can generalize sustainable improvements over baseline return for more than 2 years across hundreds of pairs. The RL agent learns to allocate according to the lookback of z-scores representing the pathway of the pair’s cointegration as well as volatility and is trained with exploration / exploitation to find policy that maximize ending ROI. Compared with traditional supervised and unsupervised learning with static input — output, RL algorithms has built-in robustness for generalization in that it directly learns state-policy values with a reward function that reflects realized P/L. The RL training targets are always non-static in that the training experience improves as the agent interacts with the environment and improves its policy, hence the reinforcement of good behavior and vice versa.

    可持续性 —在一对交易示例中,使用2006年和2017年的数据进行货币对协整测试和RL训练,然后由受过训练的代理商从2018年到2020年初进行测试。训练和测试数据的划分大致为80:20。 借助RL自动培训的推出,我们可以在数百年中对超过2年的基线回报进行可持续改进。 RL代理学习根据代表该货币对的协整和波动性的z分数的回溯进行分配,并经过探索/开发训练,以找到可最大程度提高最终投资回报率的策略。 与具有静态输入输出的传统有监督和无监督学习相比,RL算法具有内置的泛化鲁棒性,因为它可以直接使用反映已实现P / L的奖励函数来学习状态策略值。 RL培训目标始终是非静态的,因为随着代理人与环境的互动并改善其政策,培训经验将得到改善,从而加强良好行为,反之亦然。

    Scalability — Train and deploy large scale end-to-end Deep RL trading algorithms is still its infancy in quant trading, but we believe it is the future of alpha in our field, as RL has demonstrated dramatic improvement over traditional ML in the game space (AlphaGo, Dota etc.). This RL framework is well versed to apply to different pair trading strategies that is deployed by market neutral funds. With experience running RL system in multiple avenues of quant trading, we can customize environment, training algorithms and reward function to effectively solve unique tasks in portfolio optimization, powered by RL’s agent based sequential learning that traditional supervised and unsupervised learning models cannot achieve.

    可扩展性 —训练和部署大规模的端到端深度RL交易算法仍是定量交易的起步阶段,但我们相信这是我们领域alpha的未来,因为RL在游戏领域已证明优于传统ML。 (AlphaGo,Dota等)。 此RL框架非常适合应用于市场中立基金部署的不同对交易策略。 凭借在多种数量交易渠道上运行RL系统的经验,我们可以自定义环境,训练算法和奖励功能,以有效地解决投资组合优化中的独特任务,这是基于RL基于代理的顺序学习提供的,而传统的监督和无监督学习模型则无法实现。

    Key Take Away

    钥匙拿走

    If the signal makes money, it makes money with linear allocation (always trade x unit). But when it doesn’t, obviously we want to redo the signal, let it adapt to new market conditions. However, sometimes that’s not easy to do, and a quick fix might be a RL agent/layer on top of existing signal process. In our case, we let the agent observe a dataset that represents volatility of the spreads, and decide on the pertinent allocation based on past trades and P/L.

    如果信号赚钱,它就会线性分配(总是以x单位交易)赚钱。 但是,如果不这样做,显然我们要重做信号,使其适应新的市场条件。 但是,有时这并不容易做到,快速解决方案可能是在现有信号处理之上的RL代理/层。 在我们的案例中,我们让代理商观察代表价差波动性的数据集,并根据过去的交易和损益决定相关的分配。

    Background and More Details

    背景和更多详细信息

    Signal Generalization Process — We first run a linear regression on both assets’ past look back price history (2006–2017 daily price), then we do OLS test to obtain the residual, with which we run unit root test (Augmented Dickey–Fuller test) to check the existence of cointegration. In this example, we set the p-value threshold at 0.5% to reject unit root hypothesis, which results in a universe of 2794 S&P 500 pairs that pass the test. Next phrase is how we set the trigger conditions. First, we normalize the residual to get a vector that follows assumed standard normal distribution. Most tests use two sigma level reaches 95% which is relatively difficult to trigger. To generate enough trading for each pair, we set our threshold at one sigma. After normalization, we obtain a white noise follows N(0,1), and set +/- 1 as the threshold. Overall, the signal generation process is very straight forward. If the normalized residual gets above or below threshold, we long the bearish one and short the bullish one, and vice versa. We only need to generate trading signal of one asset, and the other one should be the opposite direction

    信号概括过程 —我们首先对两种资产的过去回溯价格历史记录(2006-2017年每日价格)进行线性回归,然后进行OLS测试以获取残差,然后进行单位根检验(Augmented Dickey-Fuller检验) )检查协整的存在。 在此示例中,我们将p值阈值设置为0.5%,以拒绝单位根假设,这导致2794个标准普尔500对货币对通过了测试。 接下来的短语是我们如何设置触发条件。 首先,我们对残差进行归一化以获得遵循假定标准正态分布的向量。 大多数测试使用两个西格玛水平达到95%,这相对难以触发。 为了为每个货币对产生足够的交易,我们将阈值设置为一个西格玛。 归一化后,我们获得跟随N(0,1)的白噪声,并将+/- 1设置为阈值。 总体而言,信号生成过程非常简单。 如果归一化残差高于或低于阈值,则我们做多看跌期权,而做空看涨期权,反之亦然。 我们只需要生成一种资产的交易信号,而另一种应该是相反的方向

    Deep Reinforcement Learning — The RL training regimes starts with running an exploration to exploitation linear annealed policy to generate training data by running the training environment, which in this case runs the same 2006–2017 historical data as with the cointegration. The memory is stored in groups of

    深度强化学习 — RL培训制度从运行探索线性退火策略开始,通过运行培训环境来生成培训数据,在这种情况下,该环境运行与协整相同的2006–2017历史数据。 内存按以下组存储

    State, Action, Reward, next State, next Action (SARSA)

    状态,动作,奖励,下一状态,下一动作(SARSA)

    Here we use a mixture of DQN and Policy Gradient learning target, in that our action outputs are continuous (0–100%) yet sample inefficient (within hundreds of trades per pair due to daily frequency). Our training model updates iteratively with

    在这里,我们混合使用DQN和Policy Gradient学习目标,因为我们的行动输出是连续的(0–100%),但样本效率低下(由于每日交易频率,每对交易有数百笔交易)。 我们的训练模型会迭代更新

    Q(State) = reward + Q-max (next States, next Actions)

    Q(状态)=奖励+ Q-最大值(下一个状态,下一个动作)

    Essentially, RL agent is learning the q value of continuous-DQN but trained with policy gradient on the improvements of each policy, hence avoiding the sample inefficiency (Q learning is guaranteed to converge to training global optimal) and tendency to stuck in local minimum too quickly (avoiding all 0 or 1 outputs for PG). Once the warm-up memories are stored, we train the model (in this case is a 3-layer dense net outputting single action) with the memory data as agent continues to interact with the environment and roll out older memories.

    本质上,RL代理正在学习连续DQN的q值,但是在每种策略的改进上通过策略梯度进行了训练,因此避免了样本效率低下(保证Q学习收敛到训练全局最优值)和陷入局部最小值的趋势。快速(避免PG的所有0或1输出)。 一旦存储了预热的内存,随着代理继续与环境交互并推出较旧的内存,我们将使用内存数据训练模型(在这种情况下为3层密集网络输出单个动作)。

    Sutton RS, Barto AG. Reinforcement learning: An introduction. MIT press; 2018.

    Sutton RS,Barto AG。 强化学习:简介。 麻省理工学院出版社; 2018。

    HFRX® Indices Performance Tables. (n.d.). Retrieved August 03, 2020, from https://www.hedgefundresearch.com/family-indices/hfrx

    HFRX®指数性能表。 (nd)。 于2020年8月3日从 https://www.hedgefundresearch.com/family-indices/hfrx 检索

    翻译自: https://towardsdatascience.com/adaptive-pair-trading-under-covid-19-a-reinforcement-learning-approach-ff17e6a8f0d6

    配对交易方法

    展开全文
  • 高频交易——当期货配对交易加入了止损数据介绍配对交易寻找配对标的相关性协整性策略构建回测结果总结 数据介绍 我们有38只期货合约的tick级快照数据,每只合约的数据如下: 其中的数据时间戳为100纳秒数据,并且...

    idea

    目前在配对交易的识别上比较有代表性的是根据二者的相关性来判断,也有根据标的之间协整性来进行选择的,在这里我们结合两种方式进行综合选取,即在相关性较高的合约对之中选取具有显著协整性关系的合约对,并设置一定的止损率进行投资策略的改进。

    数据介绍

    我们有38只期货合约的tick级快照数据,每只合约的数据如下:
    合约数据明细
    其中的数据时间戳为100纳秒数据,并且开始于0001年1月1日,因此在这里将其转化为现实数据,并转化为分钟数据:
    在这里插入图片描述
    最终的每个合约的分钟数据如下,基于此数据进行配对交易。
    分钟数据明细

    配对交易

    寻找配对标的

    相关性

    计算合约标的中国两两之间的相关性大小:
    在这里插入图片描述
    OK,合约太多看不清楚,我们选取部分结果展示如下,在这里不变透露合约名称,因此用合约id代表:
    在这里插入图片描述
    在这里我们应该选取相关性较高的几对合约,选取阈值为0.7,即选取相关性大于0.7的合约对储存于变量pairs:
    在这里插入图片描述
    在这里插入图片描述
    这里共有42对合约满足条件,进而判断合约对之间的协整性。

    协整性

    在进行协整性检验之前首先要验证数据是否为一阶单整的,即原始数据非平稳而一阶差分之后变为平稳的。我们以raw_clp列为检验原始数据是否为平稳的结果,diff_clp列为检验一阶差分之后的数据是否为平稳的结果,平稳为1,非平稳为0,显著性水平为0.01。可以看到数据满足一阶单整的条件,进而判断是否为协整的。
    在这里插入图片描述
    可以看到合约池中的合约都满足一阶单整的条件,可以进行协整性的判定。
    最后选出了四对具有协整性(在显著性水平α=0.01\alpha=0.01条件下)的合约,从中选取相关性较大的前三对(121408与43409, 681409和791409, 681409与851410)进行配对交易。
    在这里插入图片描述

    策略构建

    以681409与791409为例,做出二者中心化之后的价差,可以看到价差数据在0附近波动,我们设置一定的阈值,例如正负一个(或者两个标准差σσ)作为均值回复的区间进而在价差高于给定阈值时即价差值大于σ时做空高价格标的做多低价格标的,而价差值小于σ时反向操作。在这里插入图片描述
    在实际的操作中不同的品种对应该设置不同的阈值。
    下面进入策略构建环节strat_pair(id=0, sig=1.8, loss=0.05):
    (具体代码有需要可以私信我:))
    首先设置参数如下:
    id:合约对的id,在这里我们选出了三个(0, 38, 39)
    sig:为标准差的倍数,将其乘以标准差后作为上下界阈值,如果当前价差值在上界做空,反之做多。
    loss:止损率,如果当前一笔交易的收益为负,并且其绝对值小于总收益的loss倍数,则平仓止损。
    分别展示出三对合约的策略的参数以及对应的输出信息(在实际的测试当中当选取sig=1.8,loss=0.03时,发现在三对合约上都有较好的表现,因此本策略具有较强的鲁棒性)

    回测结果

    Id=0时:strat_pair(id=0, sig=1.8, loss=0.03)
    在这里插入图片描述
    Id=38时:
    在这里插入图片描述
    Id=39时:
    在这里插入图片描述

    总结

    此策略在传统的配对交易上加入了止损,同时,在筛选标的对的时候结合了相关性以及协整性,使得筛选出来的标的对更符合配对交易的宗旨,可以看到具有很好的效果。当然有待改进的地方也有几处,例如如何权衡止损率和换手率之间的关系?欢迎小伙伴批评指教!

    核心代码示例

    def find_pairs(val):
        clp_data = pd.read_csv('min_clp_data.csv')
        clp_data.index = clp_data[['date', 'time']]
        close_data = clp_data.drop(columns=['date', 'time'])
        sns.heatmap(close_data.corr(), annot=True, square=True)
        plt.show()
        cor = close_data.corr()
        A = list()
        B = list()
        C = list()
        for i in range(len(cor))[1:]:
            for j in range(i + 1, len(cor)):
                if cor.iloc[i, j] > val:
                    A.append(cor.index[i])
                    B.append(cor.index[j])
                    C.append(cor.iloc[i, j])
        pairs = pd.DataFrame([A, B, C], index=['cont1', 'cont2', 'cor_val'])
        return pairs, close_data
    
    def check_pairs(pairs, close_data):
        raw = list()
        one_lag = list()
        for i in range(pairs.shape[1]):
            res1 = adfuller(np.diff(close_data[pairs[i].iloc[0]]))
            res2 = adfuller(np.diff(close_data[pairs[i].iloc[1]]))
            if res1[0] < res1[4]['1%'] and res2[0] < res2[4]['1%']:
                one_lag.append('1')
            else:
                one_lag.append('0')
            res1 = adfuller(close_data[pairs[i].iloc[0]])
            res2 = adfuller(close_data[pairs[i].iloc[1]])
            if res1[0] < res1[4]['1%'] and res2[0] < res2[4]['1%']:
                raw.append('1')
            else:
                raw.append('0')
        check = pd.DataFrame([raw, one_lag], index=['raw_clp', 'diff_clp']).T
        coint_res = list()
        for i in range(pairs.shape[1]):
            co_val = coint(close_data[pairs[i].iloc[0]], close_data[pairs[i].iloc[1]])
            if co_val[0] <= co_val[2][2]:
                coint_res.append(1)
            else:
                coint_res.append(0)
        coint_res = pd.DataFrame(coint_res)
        var = coint_res[coint_res[0] == 1].index
        final_pairs = pairs[coint_res[coint_res[0] == 1].index]
        return final_pairs
    
    def strat_pair(id=0, sig=1.8, loss=0.05):
        pos = [0, ]
        ctlist = pd.read_csv('ContractList.csv')
        cs0 = ctlist[ctlist['ContractId'] == int(pairs[id].iloc[0])]['ContractSize'].iloc[0]
        cs1 = ctlist[ctlist['ContractId'] == int(pairs[id].iloc[1])]['ContractSize'].iloc[0]
        clp = close_data[pairs[id][:2]]
        jc = close_data[pairs[id].iloc[1]] - close_data[pairs[id].iloc[0]]
        jc_val = jc - np.mean(jc)
        sigma = np.std(jc_val)
        pro = list()
        pro.append(10000)
        up_val = sig * sigma
        down_val = - up_val
        for i in range(len(jc_val))[1:]:
            if pos[-1] == 0:
                if jc_val[i] >= up_val:  
                    ret1 = (clp.iloc[i - 1, 1] - clp.iloc[i, 1]) * cs1
                    ret0 = (clp.iloc[i, 0] - clp.iloc[i - 1, 0]) * cs0
                    pro.append(ret1 + ret0)
                    pos.append(-1)
                elif jc_val[i] <= down_val:  
                    ret1 = (clp.iloc[i, 1] - clp.iloc[i - 1, 1]) * cs1
                    ret0 = (clp.iloc[i - 1, 0] - clp.iloc[i, 0]) * cs0
                    pro.append(ret1 + ret0)
                    pos.append(1)
                else:
                    pro.append(0)
                    pos.append(0)
            else:
                if pos[-1] == -1: 
                    if jc_val[i] > down_val:  
                        ret1 = (clp.iloc[i - 1, 1] - clp.iloc[i, 1]) * cs1
                        ret0 = (clp.iloc[i, 0] - clp.iloc[i - 1, 0]) * cs0
                        if ret1 + ret0 < 0 and abs(ret1 + ret0) < sum(pro) * loss:
                            pro.append(0)
                            pos.append(0)
                            continue
                        pro.append(ret1 + ret0)
                        pos.append(-1)
                    else:  
                        ret1 = (clp.iloc[i, 1] - clp.iloc[i - 1, 1]) * cs1
                        ret0 = (clp.iloc[i - 1, 0] - clp.iloc[i, 0]) * cs0
                        if ret1 + ret0 < 0 and abs(ret1 + ret0) < sum(pro) * loss:
                            pro.append(0)
                            pos.append(0)
                            continue
                        pro.append(ret1 + ret0)
                        pos.append(1)
                else:  
                    if jc_val[i] < up_val: 
                        ret1 = (clp.iloc[i, 1] - clp.iloc[i - 1, 1]) * cs1
                        ret0 = (clp.iloc[i - 1, 0] - clp.iloc[i, 0]) * cs0
                        if ret1 + ret0 < 0 and abs(ret1 + ret0) < sum(pro) * loss:
                            pro.append(0)
                            pos.append(0)
                            continue
                        pro.append(ret1 + ret0)
                        pos.append(1)
                    else:  
                        ret1 = (clp.iloc[i - 1, 1] - clp.iloc[i, 1]) * cs1
                        ret0 = (clp.iloc[i, 0] - clp.iloc[i - 1, 0]) * cs0
                        if ret1 + ret0 < 0 and abs(ret1 + ret0) < sum(pro) * loss:
                            pro.append(0)
                            pos.append(0)
                            continue
                        pro.append(ret1 + ret0)
                        pos.append(-1)
        profit = np.cumsum(pro)
        fig = plt.figure()
        ax = plt.subplot(211)
        ax.plot(profit)
        ax.set_ylabel('profit')
        ax = plt.subplot(212)
        ax.plot(pos)
        ax.set_ylabel('position')
        ax.set_xlabel('t')
        p = (pairs[id].iloc[0], pairs[id].iloc[1])
        return pos, profit, p
    

    代码以及数据链接: https://pan.baidu.com/s/1oRdBkdg9hqf9AppreUFFeA 提取码: i19x

    展开全文
  • 配对交易启示

    2017-10-14 20:04:10
     配对分析大体为,拿基本面、技术面相似的股票做配对交易,先单位根检验平稳,再协整分析,按回归模型为:Y=C+βX+ε,做回归。  引用一下:”本策略中我们在每个月月初重做这个回归的分析以更新系数,采用的数据...
  • 大家好,我是小全,在量化投资领域,既然严格的无风险套利机会少、收益率微薄,实际的执行过程中也...股票配对交易是统计套利的主要内容之一,它旨在寻找市场上历史走势相似的股票进行配对,当价格差较大(高于历史均...
  • 配对交易——初识统计套利

    千次阅读 2019-03-27 17:31:14
    配对交易是统计套利中的非常经典的策略。众所周知,A股市场无法卖空个股,所以中性化的配对交易策略并不能直接“拿来主义”。但这并不妨碍我们学习配对交易的思想,将卖空改成卖出,构造适合A股市场的策略。下面我们...
  • 中国A股配对交易策略实证研究中国A股配对交易策略实证研究中国A股配对交易策略实证研究中国A股配对交易策略实证研究中国A股配对交易策略实证研究
  • 原 股票中的情侣——配对交易 什么是配对交易配对交易(Pairs Trading)是指八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量分析团队提出的一种市场中性投资策略,,其成员...
  • 【量化笔记】配对交易

    千次阅读 2019-08-23 17:54:35
    配对交易的步骤 1. 如何挑选进行配对的股票 2. 挑选好股票对以后,如何制定交易策略,开仓点如何设计 3. 开仓是,两只股票如何进行多空仓对比 股票对的选择 1. 行业内匹配 2. 产业链配对 3. 财务管理配对 最小距离法...
  • 沪深300配对交易

    2020-06-15 17:51:25
    配对交易获取数据相关系数三级目录协整检验聚类算法进一步筛选回测 获取数据 通过pandas_datareader来获取沪深300的股票数据,为此,先从网上爬虫得到沪深300的股票名单 import os import pandas as pd import ...
  • 接下里的文章,我们将演示如何去利用数据来创建一个自动化配对交易策略。 基本原则 我们假设你有一对股票 X 和 Y,它们之间有一些基本的经济联系,例如这是两家生产百事可乐和可口可乐的,它们拥有...
  • 全网Quant都在看!最近读到一本Springer的新书,书中提出了一种比较实用的应用到配对交易的机器学习的模型框架,本篇文章就书中提到的框架做一个脱水解读。配对交易配对交易是一种常见的多...
  • matlab实现配对交易-PairsTrading_FEX.rar 他人的好东东拿来分享一下,觉得好的给点麦片咯 PairsTrading_FEX.rar
  • 中国石化与中国人寿配对交易实例(begin) A股市场可配对交易股票检验
  • 基于动态时间规整的配对交易策略研究基于动态时间规整的配对交易策略研究数据的平稳性检验-ADF检验格兰杰因果检验相关系数法和距离法求的配对交易的股票计算两只股票间的DCCT值两只股票的布林带交易策略画图程序 ...
  • 配对交易简介配对交易是指八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量分析团队提出的一种市场中性投资策略,,其成员主要是物理学家、数学家、以及计算机学家。...
  • 在量化投资领域,既然严格的无风险套利机会少...本文,我们就来介绍这样一种方法——配对交易。 统计套利 1、定义 统计套利即主要以对历史数据进行统计分析为基础,估计目标统计量的分布,再结合股票自身基本面数...
  • 配对交易简介配对交易是指八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量分析团队提出的一种市场中性投资策略,,其成员主要是物理学家、数学家、以及计算机学家。...
  • (一)什么是配对交易? 统计套利之配对交易是一种基于数学分析交易策略,其盈利模式是通过两个标的的差价(spread)来获取,两者的价格走势虽然在中途会有所偏离,但是最终都会趋于一致。 配对交易就是利用这种价格...
  • 下面用python实现一个简单的配对交易策略: 目录 一、交易对象选取 相关性检验 ADF检验 协整检验 二、主体策略 投资组合的构建 设置开仓和止损的阈值 三、历史回测 四、注意 一、交易对象选取 我们以...
  • 配对交易动态平衡策略 在开发人员整个职业生涯中的某个时刻,无论他们的经验如何,他们很可能会在成对编程课程中处于两者中的大三或大四的情况。 在这种情况下,成为Junior不仅意味着要成为经验不足的开发人员,还...
  • 1. 配对交易策略 1.1、引言 在量化投资领域,既然严格的无风险套利机会少、收益率微薄,实际的执行过程中也不能完全消除风险。那么如果有一种选择,能够稍微放松100%无风险的要求,比如允许有5%的风险,但同时却能够...
  • Pairs Trading - Quantitative Methods and Analysis(配对交易-量化方法与分析)
  • 目录 1. 数据准备 & 回测准备 2. 策略开发思路 3. 计算策略年化收益并可视化 ...配对交易在《Pairs Trading: Quantitative Methods and Analysis》一书中,通常所说的配对交易:基于统计套利的配对交易,即寻...
  • 什么是配对交易配对交易(Pairs Trading)是指八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量分析团队提出的一种市场中性投资策略,,其成员主要是物理学家、数学家、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 522
精华内容 208
关键字:

配对交易