Alpha对冲策略

目录

Alpha对冲策略

1. 策略原理

何为alpha?

什么是alpha对冲策略?

怎么对冲?

策略收益情况

策略要点

2. 策略实现

3. 策略代码

4. 回测结果与稳健性分析

1. 策略原理

何为alpha?

提到Alpha策略,首先要理解什么是CAPM模型。

CAPM模型于1964年被Willian Sharpe等人提出。Sharpe等人认为,假设市场是均衡的,资产的预期超额收益率就由市场收益超额收益和风险暴露决定的。如下式所示。

其中rm为市场组合,rf为无风险收益率。

根据CAPM模型可知,投资组合的预期收益由两部分组成,一部分为无风险收益率rf,另一部分为风险收益率。

CAPM模型一经推出就受到了市场的追捧。但在应用过程中发现,CAPM模型表示的是在均衡状态下市场的情况,但市场并不总是处于均衡状态,个股总会获得超出市场基准水平的收益,即在CAPM模型的右端总是存在一个alpha项。

为了解决这个问题,1968年,美国经济学家迈克·詹森(Michael Jensen)提出了詹森指数来描述这个alpha,因此又称alpha指数。计算方式如式2所示。

因此,投资组合的收益可以改写成

可将投资组合的收益拆分为alpha收益和beta收益。其中beta的计算公式为

β是由市场决定的,属于系统性风险,与投资者管理能力无关,只与投资组合与市场的关系有关。当市场整体下跌时,β对应的收益也会随着下跌(假设beta为正)。alpha收益与市场无关,是投资者自身能力的体现。投资者通过自身的经验进行选股择时,得到超过市场的收益。

什么是alpha对冲策略?

所谓的alpha对冲不是将alpha收益对冲掉,恰恰相反,alpha对冲策略是将β收益对冲掉,只获取alpha收益,如下图所示。

alpha对冲策略将市场性风险对冲掉,只剩下alpha收益,整体收益完全取决于投资者自身的能力水平,与市场无关。目前,有许多私募基金采用alpha对冲策略。

怎么对冲?

alpha对冲策略常采用股指期货做对冲。在股票市场上做多头,在期货市场上做股指期货空头。当股票现货市场亏损时,可以通过期货市场弥补亏损;当期货市场亏损时,可以通过股票现货市场弥补亏损。

策略收益情况

目前alpha对冲策略主要用于各类基金中。国际上比较知名的桥水基金、AQR基金等都采用过这种策略。国内也有许多利用alpha对冲策略的基金,比如海富通阿尔法对冲混合、华宝量化对冲混合等,近一年平均收益率约为36.70%。

策略要点

alpha策略能否成功,主要包括以下几个要点

alpha对冲只是一种对冲市场风险的方法,在创建策略时需要结合其他理论一起使用,怎样获取到较高的alpha收益才是决定策略整体收益的关键。

2. 策略实现

第一步:制定一个选股策略,构建投资组合,使其同时拥有alpha和beta收益。
(本策略选取过去一天EV/EBITDA值并选取30只EV/EBITDA值最小且大于零的股票)
第二步:做空股指期货,将投资组合的beta抵消,只剩alpha部分。
第三步:进行回测。

股票池:沪深300指数
期货标的:CFFEX.IF对应的真实合约
回测时间:2017-07-01 08:00:00 至 2017-10-01 16:00:00
回测初始资金:1000万

3. 策略代码

# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
from gm.api import *
'''
本策略每隔1个月定时触发计算SHSE.000300成份股的过去一天EV/EBITDA值并选取30只EV/EBITDA值最小且大于零的股票
对不在股票池的股票平仓并等权配置股票池的标的
并用相应的CFFEX.IF对应的真实合约等额对冲
回测数据为:SHSE.000300和他们的成份股和CFFEX.IF对应的真实合约
回测时间为:2017-07-01 08:00:00到2017-10-01 16:00:00
注意:本策略仅供参考,实际使用中要考虑到期货和股票处于两个不同的账户,需要人为的保证两个账户的资金相同。
'''
def init(context):# 每月第一个交易日09:40:00的定时执行algo任务(仿真和实盘时不支持该频率)schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')# 设置开仓在股票和期货的资金百分比(期货在后面自动进行杠杆相关的调整)context.percentage_stock = 0.4context.percentage_futures = 0.4
def algo(context):# 获取当前时刻now = context.now# 获取上一个交易日last_day = get_previous_trading_date(exchange='SHSE', date=now)# 获取沪深300成份股的股票代码stock300 = get_history_constituents(index='SHSE.000300', start_date=last_day,end_date=last_day)[0]['constituents'].keys()# 获取上一个工作日的CFFEX.IF对应的合约index_futures = get_continuous_contracts(csymbol='CFFEX.IF', start_date=last_day, end_date=last_day)[-1]['symbol']# 获取当天有交易的股票not_suspended_info = get_history_instruments(symbols=stock300, start_date=now, end_date=now)not_suspended_symbols = [item['symbol'] for item in not_suspended_info if not item['is_suspended']]# 获取成份股EV/EBITDA大于0并为最小的30个fin = get_fundamentals(table='trading_derivative_indicator', symbols=not_suspended_symbols,start_date=now, end_date=now, fields='EVEBITDA',filter='EVEBITDA>0', order_by='EVEBITDA', limit=30, df=True)fin.index = fin.symbol# 获取当前仓位positions = context.account().positions()# 平不在标的池或不为当前股指期货主力合约对应真实合约的标的for position in positions:symbol = position['symbol']sec_type = get_instrumentinfos(symbols=symbol)[0]['sec_type']# 若类型为期货且不在标的池则平仓if sec_type == SEC_TYPE_FUTURE and symbol != index_futures:order_target_percent(symbol=symbol, percent=0, order_type=OrderType_Market,position_side=PositionSide_Short)print('市价单平不在标的池的', symbol)elif symbol not in fin.index:order_target_percent(symbol=symbol, percent=0, order_type=OrderType_Market,position_side=PositionSide_Long)print('市价单平不在标的池的', symbol)# 获取股票的权重percent = context.percentage_stock / len(fin.index)# 买在标的池中的股票for symbol in fin.index:order_target_percent(symbol=symbol, percent=percent, order_type=OrderType_Market,position_side=PositionSide_Long)print(symbol, '以市价单调多仓到仓位', percent)# 获取股指期货的保证金比率ratio = get_history_instruments(symbols=index_futures, start_date=last_day, end_date=last_day)[0]['margin_ratio']# 更新股指期货的权重percent = context.percentage_futures * ratio# 买入股指期货对冲# 注意:股指期货的percent参数是按照期货的保证金来算比例,不是按照合约价值, 比如说0.1就是用0.1的仓位的资金全部买入期货。order_target_percent(symbol=index_futures, percent=percent, order_type=OrderType_Market,position_side=PositionSide_Short)print(index_futures, '以市价单调空仓到仓位', percent)
if __name__ == '__main__':'''strategy_id策略ID,由系统生成filename文件名,请与本文件名保持一致mode实时模式:MODE_LIVE回测模式:MODE_BACKTESTtoken绑定计算机的ID,可在系统设置-密钥管理中生成backtest_start_time回测开始时间backtest_end_time回测结束时间backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POSTbacktest_initial_cash回测初始资金backtest_commission_ratio回测佣金比例backtest_slippage_ratio回测滑点比例'''run(strategy_id='strategy_id',filename='main.py',mode=MODE_BACKTEST,token='token_id',backtest_start_time='2017-07-01 08:00:00',backtest_end_time='2017-10-01 16:00:00',backtest_adjust=ADJUST_PREV,backtest_initial_cash=10000000,backtest_commission_ratio=0.0001,backtest_slippage_ratio=0.0001)

4. 回测结果与稳健性分析

设定初始资金1000万,手续费率为0.01%,滑点比率为0.01%。策略回测结果如下图所示。

回测期累计收益率为0.32%,年化收益率为1.32%,沪深300指数收益率为5.09%,策略整体跑输指数。最大回撤为1.17%,胜率为74.29%。

以同样的策略进行选股,不对冲beta时回测结果如下图所示。

对比可以看出,利用alpha对冲策略比未对冲策略收益低,但胜率高于普通策略,最大回撤低于未对冲策略。这也说明了alpha对冲策略能够规避一部分由市场带来的风险。

改变回测期,观察策略收益情况如下表所示(以2020年10月30日为结束期)。

由上表可知,近几年该策略的整体收益为负,只有近六月的收益率为正。策略最大回撤一直维持在相对较低的水平上,随着时间周期拉长,最大回撤不断增加,胜率不断下降。

注:来自掘金量化

alpha对冲(股票+期货)——Python量化相关推荐

  1. 双均线策略(期货)——Python量化

    双均线策略 目录 双均线策略 1. 原理 均线的"前世今生" 均线理论为什么有效? 均线理论的缺陷 均线理论的改进 2. 策略逻辑 3. 策略代码 4. 回测结果与稳健性分析 1. ...

  2. 基于EVEBITDA倍数估法Alpha对冲策略(源码)

    原 基于EV/EBITDA倍数估值法的Alpha对冲策略(附源代码) Alpha对冲策略简介 什么是Alpha对冲策略? ​ 投资者在市场交易中面临着系统性风险(即Beta风险)和非系统性风险(即Al ...

  3. python量化交易教程-Python 量化交易教程.pdf

    目录 Python量化交易教程 第一部分新手入门 一量化投资视频学习课程 二Python手把手教学 量化分析师的Python日记 [第1天 :谁来给我讲讲Python ?] 量化分析师的Python日 ...

  4. python量化策略—— alpha 策略 股票-融资融券对冲(3)

    将反向操作由1.python量化--alpha股票-指数期货对冲策略的股指期货,换成筛选的后T只股票的做空(融资融券业务). 大概思路就是选择排名前T只股票做多,后T只做空. 所用库 # coding ...

  5. python量化策略——Fama-French三因子模型(回归获取alpha)阿尔法α策略。

    简单的alpha策略, 选取某一时间点所有股票的相关信息ps.pb.pe等. 用三因子回归获取alpha,分别用每只股票计算. 选取排名靠前的n只股票 计算组合净值 计算结果和画图 注:代码运行需安装 ...

  6. Python量化投资——股票择时到底能否赚钱?ADX指标的有效性回测

    ADX指标的有效性回测 Python量化投资--`ADX`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的ADX内置策略 433支股票五年回测结果 12.45% --该 ...

  7. 指数增强(股票)——Python量化

    指数增强策略 目录 指数增强策略 1. 策略原理 2. 策略步骤 3. 策略代码 4. 回测结果和稳健性分析 1. 策略原理 说到指数增强,就不得不说指数. 在进行股票投资时,有一种分类方式是将投资分 ...

  8. Python量化投资——股票择时到底能否赚钱?技术指标大比拼——AROON指标

    技术指标大比拼--AROON指标的有效性回测 Python量化投资--`AROON`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的AROON内置策略 433支股票五年 ...

  9. Python量化交易实战:获取股票数据并做分析处理

    量化交易(也称自动化交易)是一种应用数学模型帮助投资者进行判断,并且根据计算机程序发送的指令进行交易的投资方式,它极大地减少了投资者情绪波动的影响.量化交易的主要优势如下: 快速检测 客观.理性 自动 ...

  10. 【python量化交易学习】从tushare获取股票交易数据,存入后再从mysql或excel读取数据,筛选股票,用pyecharts画出K线图。

    选定日期,筛选涨幅达到10%的股票,并画出K线图.观察涨停后股票走势. 由于创业板涨停板为20%,科创板20%,北交所30%.因此筛选出的涨停股票不完全准确.考虑到目前市场打板主要集中在10%的主板股 ...

最新文章

  1. 申报成功后怎样修改_每日分享|电子税务局操作指引之更正错误申报
  2. C#里partial关键字的作用
  3. 现在的编译器还需要手动展开循环吗_DSP(知识点+思考题)
  4. 拉屎能赚钱?在马桶上月入过万?原来卫生间里还有这么多隐藏福利,超模君都惊了……
  5. 转-《高性能mysql》并不是一本好书——SQL笔记
  6. MTK驱动(53)---平台DTS文件匹配过程
  7. nuxt.js部署vue应用到服务端过程
  8. 三步教你免费下载省,市,区县行政区Shp数据
  9. 无盘php,MZD无盘系统160台网吧安装实战教程
  10. 5G时代的到来,对网络公关将产生哪些深远影响?
  11. php 简明现代魔法,【转】WinCacheGrind配合XDebug分析PHP程序性能 — 简明现代魔法...
  12. ECCV 2020|3D-CVF多模态融合(LIDAR+CAMERA)
  13. 南阳ACM 题目722 数独
  14. CF1601E Phys Ed Online题解
  15. idc具体是啥 idc服务器是什么意思?
  16. 北京小汽车出行比例首次下降
  17. 计算机常用英文简称扫盲
  18. 安卓修改大师揭秘Android手游破解全过程
  19. 跳转到App Store 指定的app
  20. HTB Busqueda WriteUP

热门文章

  1. HDU——2154——跳舞毯
  2. python中国大学慕课平台_乐学Python,中国大学MOOC(慕课)答案公众号搜题
  3. 特斯拉开火,状告5名前员工、小鹏汽车、Zoox身陷漩涡
  4. 论文笔记: FSA-Net
  5. Xilinx FPGA下载器(DLC9)的 [Labtoolstcl 44-494] 报错解决方法
  6. 秸秆开启黑土地绿色低碳循环经济链 国稻种芯绿色沃土计划
  7. 关于项目一直updating indexes不停的解决方案
  8. 计算机设置密码打印机无法共享,win7设置开机密码后无法连接共享打印机
  9. [OGeek2019 Final]OVM(简易虚拟机逃逸)
  10. 告诉你如何回答线上CPU100%排查面试问题