python量化策略—— alpha 策略(2)指期对冲

alpha多因子选股对冲策略

移动波动率策略

在前面写的alpha多因子策略的基础上,加入了沪深300股指期货空头。
策略思路:筛选沪深股票池中的一篮子股票,比如20只潜力股做多,同时在期货市场做空沪深300的股指期货合约。利用对冲消除β风险,获取α收益。组合收益=α收益+β风险收益,现在利用对冲消除β,赚取稳定的α收益。
细节上,只上篇的基础上加入了对冲。
代码如下:(若没有tushare pro的token码,无法直接运行,
获取地址:https://tushare.pro/register?reg=385920,当然有其他数据库,只需替换数据获取部分即可)

##########alpha 股_指期对冲策略#############
# coding=utf-8
import math
import tushare as ts
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import talib
matplotlib.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif']=['SimHei']
ts.set_token('这里放token码')#若没有,需注册获取https://tushare.pro/register?reg=385920
pro = ts.pro_api()
df1= pro.query('daily_basic', ts_code='', trade_date='20200420',fields='ts_code,trade_date,total_mv,ps,pe,pb')#获取日期所有数据

#条
df1=df1[   df1['pe']>45   ] 
df1=df1[   df1['pb']>8     ] 
df1=df1[   df1['ps']>17   ] 
df1=df1[   df1['total_mv']<2000000   ]
#排序选股
df1=df1.sort_values(by="pe" , ascending=True)
df1=df1.head(100)#按由低到高排,选前100名
df1=df1.sort_values(by="ps" , ascending=True)
df1=df1.head(70)
df1=df1.sort_values(by="pb" , ascending=True)
df1=df1.head(20)
df1=df1['ts_code']#获得一篮子股票
df1.values.tolist()#转换成列表
stock=','.join(df1) #转换成浮点,用逗号隔开
#df2= pro.query('daily_basic', ts_code=stock, trade_date='20200211',fields='ts_code,trade_date,total_mv,ps,pe,pb')

cum=0
for i in df1:
    df=pro.query('daily', ts_code=i, start_date='20200420', end_date='20200810',fields='')   

    df=df.sort_index()
    df.index=pd.to_datetime(df.trade_date,format='%Y-%m-%d')#设置日期索引
    ret=df.change/df.close
    dd=pd.Series(1,index=df.close.index)
    cumqq=ret*dd.shift(1).dropna()
    cum=(np.cumprod(1+ret[cumqq.index[0:]])-1)/len(df1)+cum#等权重配置一篮子股票

df12 = pro.index_daily( ts_code='000300.SH', start_date='20200420', end_date='20200810')
df12=df12.sort_index()
df12.index=pd.to_datetime(df12.trade_date,format='%Y-%m-%d')#设置日期索引
ret12=df12.change/df12.close
#将顺序颠倒
aq=pd.Series(1,index=df12.close.index) 
SmaRet=ret12*aq.shift(1).dropna()
cum12=np.cumprod(1+ret12[SmaRet.index[0:]])-1
#做空沪深300股指期货
df3 = pro.fut_daily(ts_code='IF2012.CFX', start_date='20200411', end_date='20200812')
df3.sort_index()
df3.index=pd.to_datetime(df3.trade_date,format="%Y-%m-%d")
ret13=df3.change1/df3.close
sy=pd.Series(1,index=df3.close.index)
sy2=ret13*sy.shift(1).dropna()
cum13=np.cumprod(1+ret13[sy2.index[0:] ] )-1

f=cum[-2]*250/len(close)-cum13[-2]*250/len(close)
f1=100*f#换成百分制
plt.plot(cum12,label="沪深300",color='b')
plt.plot(cum-cum13,label="稳定的alph收益",color="y")
plt.plot(cum,label="股票组合",color='r')
plt.title("alpha股+指期对冲策略")
plt.legend()
print("alpha年化收益率:{:.2f}%".format(f1))


结果如下:

alpha年化收益率:8.63%

python量化策略—— alpha 策略(2)指期对冲_第1张图片
利用最新的数据,结果还可以。另外这里筛选股票采用错位的方法,即现在市场上很多理由这些多因子选股策略,我们这里不和他们一样,选择最好的,而是剔除了大家都认为的高潜力股票,再选择次优的股票,其实这是一种好方法,如果理想,可以做到快人一步入市。

下面将总市值筛选条件适当放大,

df1=df1[   df1['total_mv']<5000000   ]

结果如下:

alpha年化收益率:10.61%

python量化策略—— alpha 策略(2)指期对冲_第2张图片
可以看出效果相当好。

1.python量化——alpha股票-指数期货对冲策略
2.多因子选股策略
3.海龟交易策略
4.移动平均策略——单/双均线策略
5.改进的美林时钟策略(一)
5.改进的美林时钟策略(二)
6.改进的美林时钟策略(三)

你可能感兴趣的:(python量化,python,人工智能,索引,机器学习)