一、配对交易介绍
配对交易是一种数学交易策略,本质上是通过两只股票具有协整性,具有的差价(spread)变化来套利的方法。
基本原理论文网
配对交易的基本原理是,两个公司的股票的走势虽然会在中间偏离,但最终都会趋于一致,这种性质就叫协整性。两家公司的股票的差价始终会围绕着一个均值在波动。我们用s1和s2来表达两家公司的股价,s1-s2就是两家公司的股票的差价。这个差价有时候会高于均值,有时候会低于均值,当高于均值的时候我们就要卖出s1,买入s2,因为根据协整性,两家股票最终会趋于一致,所以的话s1这个时候相对于s2是偏高的,因此之后是要降价的,所以这个时候要抛出,赚取差价,s2这个时候相对于s1是偏低的,之后会回升,所以要买入;同理,低于均值的时候就是相反操作。
二、导入数据,绘制趋势变化
我们用quandl模块来读取数据
quandl
阅读quandl的文档,里面要传入获取的公司名字,开始日期和结束日期
#规定起始日期和结束日期
start_date='01-07-2015'
end_date='01-07-2017'
united=quandl.get('WIKI/UAL',start_date=start_date,end_date=end_date)
america=quandl.get('WIKI/AAL',start_date=start_date,end_date=end_date)
united.head()
数据概览
可以看到我们已经成功获取了联合航空和美国航空的股票数据。接下来我们绘制下价格变化。
plt.style.use('ggplot')
united['Adj. Close'].plot(label='United Airline',figsize=(12,8))
america['Adj. Close'].plot(label='America Airline')
plt.legend(loc='best')
股票波动
从图上可以看得出,有比较明显的协整性,即差价始终都保持一定的稳定性。
三、绘制出差价(spread)变化和均值(mean)
spread=united['Adj. Close']-america['Adj. Close']
spread_mean=spread.mean()
spread.plot(label='spread')
plt.axhline(y=spread_mean, color='black')
关于绘制水平线用matplotlib的axhline方法,一般只用传入一个y值。
计算一下相关系数
在这里用的是numpy的corrcoef,相关系数矩阵的R值由协方差矩阵的C值得出,R值在-1到1之间
np.corrcoef(united['Adj. Close'], america['Adj. Close'])
可以看到相关性是0.96.
四、归一化处理
这里的归一化处理是因为从绝对值上面看比较不方便(这里其实我不太理解),可能是因为从绝对值上面来看不知道什么时候差价的变化才是显著的,所以要归一化,这样跟正态分布的z分布表才有标准的可比性。
#定义进行归一化的函数
def normed_price(price):
return (price-np.mean(spread))/np.std(spread)
normed_spread=spread.apply(normed_price)
normed_spread.plot()
可以看得到我们绘制出的图线确实是围绕着0在上下波动的,因此应该是可行的。