配对交易策略

作者: wqh8384 | 来源:发表于2019-04-27 19:29 被阅读4次

        前面学习了均值回归,动量等三种量化交易策略,今天继续学习配对交易策略,具体代码如下所示:

import pandas as pd

import numpy as np

import tushare as ts

import seaborn

%matplotlib inline

from matplotlib import pyplot as plt

stocks_pair = ['600199', '600702']

1. 数据准备 & 回测准备

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 = pd.concat([data1, data2], axis=1) #拼接,把两张表格的数据拼接起来;

data.set_index('date',inplace = True)

data.columns = stocks_pair

data.plot(figsize= (8,6))

2. 策略开发思路

data['priceDelta']=data['600199']-data['600702']

data['priceDelta'].plot(figsize= (8,6))

plt.ylabel('Spread')

plt.axhline(data['priceDelta'].mean())

data['zscore'] = (data['priceDelta'] - np.mean(data['priceDelta']))/np.std(data['priceDelta']) #价差的标准化;

data[data['zscore'] < - 1.5].head()

len(data[data['zscore'] < - 1.5])

data['position_1'] = np.where(data['zscore'] > 1.5, -1, np.nan)

data['position_1'] = np.where(data['zscore'] < -1.5, 1, data['position_1'])

data['position_1'] = np.where(abs(data['zscore']) < 0.5, 0, data['position_1'])

产生交易信号

data['position_1'] = data['position_1'].fillna(method = 'ffill')

data['position_1'].plot(ylim=[-1.1, 1.1], figsize=(10, 6))

data['position_2'] = -np.sign(data['position_1'])

data['position_2'].plot(ylim=[-1.1, 1.1], figsize=(10, 6))

3. 计算策略年化收益并可视化

data['returns_1'] = np.log(data['600199'] / data['600199'].shift(1))

data['returns_2'] = np.log(data['600702'] / data['600702'].shift(1))

data['strategy'] = 0.5*(data['position_1'].shift(1) * data['returns_1'])+0.5*(data['position_2'].shift(1) * data['returns_2'])

data[['returns_1','returns_2','strategy']].dropna().cumsum().apply(np.exp).plot(figsize=(10, 6))

相关文章

网友评论

    本文标题:配对交易策略

    本文链接:https://www.haomeiwen.com/subject/deflnqtx.html