请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  数理科学 帖子:3364712 新帖:0

5日反转策略在中证500样本股中的实证分析

耶伦发表于:5 月 14 日 16:27回复(1)

一、策略简介

5日反转策略基于中国股市中存在的反转效应。反转效应认为在前一段时间表现较差的股票,在下一阶段反而会出现逆转。过去的赢家会成为将来的输家。而5日反转策略即为买入过去5日的赢家组合,同时卖出过去5日输家组合的策略。与反转效应相对的是动量策略,即买入过去赢家卖出过去输家的组合。动量策略在美股市场比较有效,但在A股效果不好,这可能与A股市场的过度反应更为显著有关。

另外,交易量在反转效应中也扮演着很重要的角色。潘莉,徐建国(2011)的研究发现,在高交易量的股票中,反转效应更加明显。一个可能的解释是交易量高的股票对于信息的反应速度更快,更容易导致过度反应,从而造成更强的反转效应。所以我们此处参照他们的方法,选出中证500中观察期成交量排名前20%的股票最为股票池,在此之上构建反转投资组合。

二、具体策略实现

1.设置参数,包括股票池,业绩评价期(观察期)和持有期(调仓周期)。此处股票池设置为中证500,业绩评价期设置为5日,而持有期设置为1日。
2.计算股票池中所有股票的上一周期的收益率 。此处为用收盘价计算业绩评价期内的收益率。
3.将股票池内所有股票按照收益率升序排序。买入排名前10%的股票,卖出后10%的股票。因为A股市场难以做空,所以此处构建指数增强组合来考察5日反转因子获得超额收益的能力。
4.每个持有期根据上述方法调整持仓。

而对于考虑成交量的交易策略,股票池需要限定为观察期内总成交量最大的20%中证500样本股,其余部分与普通反转策略没有区别。

测试时间范围:2011-01-01 – 2018-12-31

三、回测结果


1、普通反转策略



Img

2、考虑交易量的反转策略



Img

四、结论及评述

根据回测结果,我们可以发现:
1、反转策略在2017年有着不错的超额收益,但在2017年以后策略遭遇了一定的回撤,超额收益有所下滑。
2、交易量对反转策略确实有促进作用。在高成交量股票池上构造的反转策略投资组合各项绩效评价指标均优于一般的反转策略。

目前,反转策略已经不能带来持续稳定的超额收益。2017年之后,市场风格在动量和反转之间相互切换。能否通过因子择时等方式来规避掉市场风格切换带来的回撤,将是未来可行的一个研究方向。

参考文献

[1]潘莉, 徐建国:《A 股个股回报率的惯性与反转》,《金融研究》2011年第1期,第149-第166页。

5日反转策略在中证500样本股中的实证分析¶

一、策略简介¶

5日反转策略基于中国股市中存在的反转效应。反转效应认为在前一段时间表现较差的股票,在下一阶段反而会出现逆转。过去的赢家会成为将来的输家。而5日反转策略即为买入过去5日的赢家组合,同时卖出过去5日输家组合的策略,具体实现步骤为:
1、选定股票池。
2、设置证券业绩评价期(观察期)长度和持有期长度。此处设置观察期为5天,持有期为1天,即每日调整持仓。
3、根据形成期收益率的大小排序,买入前10%的股票,卖出后10%的股票。
4、持有一段时间后,重新按照以上规则选股,调整持仓。

交易量在反转效应中也扮演着很重要的角色。潘莉,徐建国(2011)的研究发现,在高交易量的股票中,反转效应更加明显。一个可能的解释是交易量高的股票对于信息的反应速度更快,更容易导致过度反应,从而造成更强的反转效应。所以我们还会选出中证500中观察期成交量排名前20%的股票最为股票池,在此之上构建反转投资组合。

二、核心代码¶

1、普通的反转策略(不考虑交易量)¶

初始化。设置手续费、基准指数等参数¶

# 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
set_order_cost(
    OrderCost(
        close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5
    ), type='stock')

#基准设为中证500指数
set_benchmark('000905.XSHG')

#开启动态复权模式
set_option('use_real_price', True)

#每日运行一次
run_daily(period,time = 'every_bar')

#设置分位数,观察期,持有期,策略日期计数
g.sec_num=10
g.observation=5
g.holding_period=1
g.days=0

获取股票列表,并获得观察期内的股价数据¶

#股票池为中证500样本股,获取其收盘价和成交量信息
stocks = get_index_stocks('000905.XSHG')
df = history(g.observation+1,'1d','close',stocks).T

根据收盘价计观察期内收益率,升序排列,选出要买入和做空的股票,构造反转策略的中证500指数增强组合¶

#计算5日收益率,升序排列并去掉空值
df['ret_5d']= df.iloc[:,-2]/df.iloc[:,0]
ret_5d=df['ret_5d'].dropna()
valid_num=len(ret_5d)
ret_5d=ret_5d.sort_values()

#根据5日收益率选股
stk_list = ret_5d.index.tolist()
buy_list = stk_list[0:int(valid_num/g.sec_num)]
sell_list = stk_list[-int(valid_num/g.sec_num):]

 #构造指数增强组合
cash=context.portfolio.total_value
for stk in stocks:
    if stk in sell_list:
        order_target_value(stk,0)
    elif stk in buy_list:
        order_target_value(stk,2*cash/valid_num)
    else:
        order_target_value(stk,cash/valid_num)

2、考虑交易量的反转策略¶

策略逻辑没有大的变化,只是在选股的股票池变为了中证500成分股在观察期内平均成交量最高的前1/5的股票。数据处理如下:

#股票池为中证500样本股,获取其收盘价和成交量信息
stocks = get_index_stocks('000905.XSHG')#+get_index_stocks('399106.XSHE')
df = history(g.observation+1,'1d','close',stocks).T
df2 = history(g.observation,'1d','volume',stocks)

#计算观察期内平均成交量,取前1/5
avg_vol = df2.sum()/g.observation
avg_vol = pd.DataFrame({'avg_vol':avg_vol})
df=pd.concat([df,avg_vol],axis=1).dropna()
df = df.sort_values(by='avg_vol',ascending=False).head(int(len(df)/5))

三、回测结果¶

1、普通反转¶

Img

2、考虑交易量的反转¶

Img

四、结论及评述¶

根据回测结果,我们可以发现:
1、反转策略在2017年有着不错的超额收益,但在2017年以后策略遭遇了一定的回撤,超额收益有所下滑。
2、交易量对反转策略确实有促进作用。在高成交量股票池上构造的反转策略投资组合各项风险指标均优于一般的反转策略。
3、反转策略已经不能带来持续的alpha收益,而是更类似于一个风格因子。2017年之后,市场风格在动量和反转之间相互切换。能否通过因子择时等方式来规避掉市场风格切换带来的回撤,将是未来可行的一个研究方向。

全部回复

0/140

达人推荐

量化课程

    移动端课程