量化投资 — 简单均值回归策略(Mean Reverting Strategy)

均值回归_Mean Reverting Strategy

0. 引库
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn
plt.style.use('seaborn')
import matplotlib as mpl
mpl.rcParams['font.family'] = 'serif'
import warnings; warnings.simplefilter('ignore')    # 忽略警告信息
import numpy as np
import pandas as pd
import tushare as ts
1. 数据准备 & 回测准备
data = ts.get_k_data('hs300', start = '2010-01-01', end='2016-06-30')[['date','close']]
data.rename(columns={'close': 'price'}, inplace=True)
data.set_index('date', inplace = True)
data['price'].plot(figsize = (10,8));

price

data.head()
price
date
2010-01-043535.229
2010-01-053564.038
2010-01-063541.727
2010-01-073471.456
2010-01-083480.130
2. 策略开发思路
data['returns'] = np.log(data['price'] / data['price'].shift(1))
SMA = 50
data['SMA'] = data['price'].rolling(SMA).mean()
data.tail()
pricereturnsSMA
date
2016-06-243077.16-0.0129673135.5614
2016-06-273120.540.0139993132.7446
2016-06-283136.400.0050703129.9560
2016-06-293151.390.0047683127.5396
2016-06-303153.920.0008023126.0490
# 阈值
threshold = 250
data['distance'] = data['price'] - data['SMA']
data['distance'].dropna().plot(figsize=(10, 6), legend=True);
plt.axhline(threshold, color='r');
plt.axhline(-threshold, color='r');
plt.axhline(0, color='r');     

阈值

data['position'] = np.where(data['distance'] > threshold, -1, np.nan)
data['position'] = np.where(data['distance'] < -threshold, 1, data['position'])
data['position'] = np.where(data['distance'] * data['distance'].shift(1) < 0, 0, data['position'])
data['position'] = data['position'].ffill().fillna(0)
data['position'].ix[SMA:].plot(ylim=[-1.1, 1.1], figsize=(10, 6));

position

3. 计算策略年化收益并可视化
data['strategy'] = data['position'].shift(1) * data['returns']
data[['returns', 'strategy']].dropna().cumsum().apply(np.exp).plot(figsize=(10, 6));

strategy

# 计算年化收益
data[['returns', 'strategy']].mean() * 252
returns    -0.018261
strategy   -0.080739
dtype: float64
策略思想总结

均值回归策略应用了股市投资中经典的高抛低吸思想,该类策略一般在震荡市中表现优异;但在单边趋势行情中一般表现糟糕,往往会大幅跑输市场

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值