配对交易定义
配对交易是一种基于数学分析交易策略,其盈利模式是通过两只证券的差价(spread)来获取,理论上可以做到和大盘走势完全无关。但其本质上是一种统计套利,也具有一定的风险性。
基本原理
配对交易的基本原理是,两个相似期货品种,其价格走势虽然在中途会有所偏离,但是最终都会趋于一致。配对交易就是利用这种价格偏离获取收益:当差价高于均值时,卖空涨得多的品种,差价小于均值时,买入涨得少的品种。具有这种关系的两个品种,在数学上称作协整性(cointegration),即它们之间的差价会围绕某一个均值来回摆动,这是配对交易策略可以盈利的基础。通俗点来讲,如果两个品种或者变量之间具有强协整性,那么不论它们中途怎么走的,它们的目的地总是一样的。
相关性分析
只有两个期货品种具有一定的相关性,那么对这两个品种做配对交易才有意义。那么首先就需要对各个品种做一个相关性分析。
那么要如何用Python对当前市场上所有的期货品种进行相关性分析呢?首先第一步,需要获取市场上所有的主力连续合约代码,在此之前当然还是我们熟悉的各种导入三方库。
import time
import numpy as np
import pandas as pd
%matplotlib inline
import seaborn
import matplotlib.pyplot as plt
import warnings; warnings.simplefilter('ignore') #忽略可能会出现的警告信息,警告并不是错误,可以忽略;
import akshare as ak
三方库导入完毕后,那我们开始用AKShare三方库获取当前期货市场上所有的期货连续合约代码。并整理数据。
df=ak.futures_display_main_sina()
df.set_index('symbol',inplace=True)
利用遍历循环批量获取期货连续合约的历史行情数据:
log=pd.DataFrame()
for contract_code in df.index[:10]: # 大批量数据调取会报错,只对列表前10个期货品种进行分析
time.sleep(1) # 尽量控制调取数据频率
contract_name=df.loc[contract_code]['name']
data=ak.futures_main_sina(symbol=contract_code)
data['日期']=pd.to_datetime(data['日期'])
data.set_index('日期',inplace=True)
data=data[['收盘价']]
data.rename(columns={'收盘价':contract_name},inplace=True)
log[contract_name]=data[contract_name]
将获取的行情数据进行处理,计算每日涨跌幅,并由此计算期货品种间的相关性:
data=log.copy() # 复制数据,保留原始数据以便后续对原始数据进行二次分析
returns=data/data.shift(1)-1
corrs=returns.corr() # 计算相关性
将各个品种的期货相关性以热力图的形式呈现出来:
import seaborn
fig = plt.figure(figsize=(18,18))
seaborn.heatmap(corrs)
颜色越浅相关性越高,可以看出在当前的品种中,塑料和聚丙烯之间的相关性较高。
以上便完成了对期货品种间的相关性分析。