【python量化策略】应用股指期货对投资组合进行β风险管理

论坛 期权论坛 期权     
天择君   2020-3-28 03:19   2027   0
↑关注【天择君】微信公众号,回复“入群”,加入“量化策略交流群”
导读:本文根据国信证券的研报向大家系统阐述“正Alpha行业配置策略(多头策略)”和“股指期货进行β风险管理”,具体研报:《数量化投资技术系列报告之二十四:应用股指期货对量化投资组合进行β风险管理的流程范例》
1.量化策略+股指期货——剥离α和β的绝佳组合
众所周知,资产的收益理论上可以分为两个部分:来自市场风险的期望收益称为Beta,而与市场风险无关的,超越市场表现的超额收益称作Alpha。利用股指期货合约,实现Alpha收益的移植,是对冲基金普遍采用的运营模式之一。
对于Alpha,可以从各种因子分析及投资方法入手去寻找其来源,设计出各种投资策略来实现这部分收益,但策略的投资组合仍然承担着市场风险,即Beta,这时就需要依靠衍生品去对冲,将这部分风险降到最低,目前,沪深300、上证50、中证500股指期货成为理想的对冲工具。使得我们可以进一步完善量化策略,实现 Alpha和Beta的分离,将投资组合的风险降到最低,最大限度地实现量化策略的效果。

图1:运用股指期货对量化增强指数资产组合进行β风险管理的示意图
2.正Alpha行业配置策略(多头策略)
1. 核心逻辑
正Alpha行业配置策略将行业分为长期Alpha距离最远的两类,这一分类的结论详见《国信证券-数量化投资系列之7:基于Alpha的行业配置方法和投资策略-总是获得正Alpha》。基于这一行业分类方法,根据Alpha收益的动量效应进行择时,在增强部分每次触发某类资产Alpha进入正值区间,买入该类资产(并卖出另一侧资产)
2.增强原理
运用上述思路,将沪深300指数成份股按照行业的属性分成A和B两类,根据A和B组合资产相对于沪深300指数的Alpha值轮动,进行超配和低配操作,获得正的Alpha,从而达到增强效果。
4.策略参数
1. 所谓增强即超配强势行业股票,设置配置比例为50/50,即50%的股票仓位复制指数,另外50%的股票仓位超额配置增强行业2. Alpha指数增强是根据两类行业Alpha的切换来进行仓位配置,这里Alpha的回归系数为250日3. 增强的标的指数为沪深300,配置的股票为沪深300成分股4. 初始资金为1千万

首日建仓设置
5. 初始股票仓位为95%,持仓过程中,仓位上限为95%,仓位下限为90%,回补仓位为92.5%,即仓位跌破下限后,补回到该仓位6. 重新调整投资比例的调整期限为10天,即股票仓位超过95%或者低于90%的时间超过10天时,重新按持仓股票市值权重调整投资比例,超过95%时使仓位回到95%,跌破90%时使仓位补回到92.5%

持仓过程中仓位控制规则
7. 初始配置及重新调整时,依据沪深300成分股的自由流通权重
5.策略增强步骤
利用正Alpha行业配置进行指数增强的交易步骤
6.根据alpha区分增强和非增强行业
国信证券将24个行业分为两类一类行业包括:采掘行业、金融行业、房地产行业、有色金属、黑色金属和交运仓储,其余所有行业为二类行业。当一类行业的alpha从负转正时,即代表该行业增强,因此正Alpha行业配置策略每天监控两类行业的alpha,当触发行业增强时,即超配该类行业中的股票权重,低配另一类行业中的股票权重。
行业alpha = 行业内所有个股的alpha均值个股alpha均值 = 个股历史250的交易日的涨跌幅与沪深300指数的线性回归值
  1. #获取时间
复制代码
  1.     date = get_last_datetime().strftime('%Y-%m-%d')
复制代码
  1.     #获取指数成分股
复制代码
  1.     stocklist = get_index_stocks(g.index,date)
复制代码
  1.     #获取权重
复制代码
  1.     df = get_index_weight(g.index,date)
复制代码
  1.     #获取行业
复制代码
  1.     dt2,dt = get_sfactor_industry(date,date,stocklist,industry='s_industryid1')
复制代码
  1.     #行业标签
复制代码
  1.     df['industry'] = df['symbol'].apply(lambda x:dt[date][x] if x in list(dt[date].index) else 'S11')
复制代码
  1.     #行业alpha计算
复制代码
  1.     data = history(stocklist+[g.index],['quote_rate'],250,'1d',skip_paused=False,fq='pre',is_panel=1)['quote_rate']
复制代码
  1.    
复制代码
  1.     alphadict = {}
复制代码
  1.     g.betadict = []
复制代码
  1.    
复制代码
  1.     x = list(data[g.index])
复制代码
  1.     X = sm.add_constant(x)
复制代码
  1.    
复制代码
  1.     for s in stocklist:
复制代码
  1.         y = list(data[s])
复制代码
  1.         model = sm.OLS(y,X)
复制代码
  1.         results = model.fit()
复制代码
  1.         alpha = results.params[0]
复制代码
  1.         beta = results.params[1]
复制代码
  1.         from math import isnan
复制代码
  1.         if isnan(beta) == False:
复制代码
  1.             g.betadict.append(beta)
复制代码
  1.         alphadict[s] = alpha
复制代码
行业alpha计算代码(文末获取完整代码)
7.正Alpha行业配置策略回测结果
根据研报中的策略思路,我们在MindGo量化平台上复现并回测,回测区间为2018年至今,正Alpha行业配置策略(纯多头策略)并未获取正收益,由于2018的系统性风险较大,我们并未引用股指期货工具来管理β风险,回测结果如下:

策略绝对收益图
从策略的相对收益率看,相对收益率达到3%+,小幅跑赢沪深300指数。

策略相对收益图
3.股指期货进行β风险管理
由于没有进行β风险管理,我们已经发现纯多头的策略无法规避系统性风险,因此我们需要引进沪深300股指期货,将alpha与β分离,使得策略能获取到alpha收益。
利用股指期货管理β的相关参数:
1. 初始保证金比例:15%,即等于股票账户总资产的15%作为期货账户资金(MindGo暂时无法对两类账户进行资金转移)2. 根据现货市值及Beta系数,判断合约空头的持有上限,保证合约持仓数量不超过这一上限,并根据每日结算数据及持仓安全边界决定是否进行部分平仓或回补。
空单合约数 = (上一日股票市值*Beta)/(昨日合约收盘价*合约乘数)
  1. #期货对冲部分
复制代码
  1.     #获取当前IF交易合约
复制代码
  1.     code = get_futures_dominate('IF')
复制代码
  1.     #订阅IF品种
复制代码
  1.     subscribe(code)
复制代码
  1.     date = get_last_datetime().strftime('%Y-%m-%d')
复制代码
  1.     #当前点位
复制代码
  1.     indexnum = get_price_future(code,date,date,'1d',['close']).close.values
复制代码
  1.     #beta计算
复制代码
  1.     beta = 1
复制代码
  1.     #计算需开空数量
复制代码
  1.     num = int(market_value*beta/(indexnum*300))
复制代码
  1.     #查询当前空单数量
复制代码
  1.     future_key = list(context.portfolio.future_account.positions.keys())
复制代码
  1.    
复制代码
  1.     if len(future_key)==0:
复制代码
  1.         renum =0
复制代码
  1.     else:
复制代码
  1.         for d in future_key:
复制代码
  1.             renum = context.portfolio.future_account.positions[d].short_amount
复制代码
  1.     future_account = renum - num
复制代码
空头合约计算代码(文末获取完整代码)
3. 我们采用仿真交易的前收盘价作为成交价,收盘价作为当天结算价。4.交割日合约转移,每当账户中的持仓合约临近交割时,将临近到期的合约平仓,在下月合约进行开仓。

利用股指期货进行β管理的流程
在正Alpha行业配置策略的基础上,我们补充股指期货部分,进行β风险管理,即获取alpha收益。β风险管理下的正Alpha行业配置策略回测结果如下:

β风险管理下的正Alpha行业配置策略(2018-01-01至2019-03-12)

β风险管理下的正Alpha行业配置策略(2018-01-01至2018-11-01)

β风险管理下的正Alpha行业配置策略(2018-11-01至2019-03-12)
结束语:根据最终复现结果看,我们认为正Alpha行业配置策略在市场行情较差时,并不能产生正Alpha,而市场行情较好时,配置正alpha的行业可以获取到正Alpha。因此正Alpha行业并无法持续带来正alpha收益,其跟市场环境具有较强关联。本文结论与研报结论恰恰相反,但研报研究的环境在2014年前,本文主要研究的是近一年情况,因此随着市场不变演化,我们认为正Alpha行业配置策略已经失效,当然如果能判断出市场偏向正Alpha行业时,您依旧可以通过β风险管理下的正Alpha行业配置策略来获取到市场的正Alpha。
ps:关注微信公众号"天择君",回台回复"干货2",领取本文研报、PPT、python源代码
关注【天择君】微信公众号,回复“入群”,一起交流
汇聚各路英雄,一同探讨“量化金融与交易策略”


期待您的加入~
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP