楼主对行为金融因子比较感兴趣,但聚宽社区里对行为金融的研究比较少,本篇参考了广发证券研报《资本利得突出量CGO与风险偏好》,在聚宽实现了该因子。
概述
资本利得突出量(Capital Gain Overhang, CGO)主要利用了前景理论对处置效应的解释,即投资者亏损时风险偏好;而盈利时风险厌恶。用白话讲就是当赚钱的时候倾向于及时获利了结,而亏钱的时候不愿承认失败苦等翻身,甚至补仓。
因此,策略认为在多数投资者亏损时,由于惜售、补仓现象存在,股价很大可能反转,此时是买入的好时机;反之,多数投资者盈利则是卖出的时机。
参考价格
策略的核心就是衡量在某只股票上多数投资者盈利还是亏损。这里需要计算一个大多数投资者的成本价,研报中叫参考价格(Reference Price),将其与最新价对比即可。如何计算这个成本价呢?类似于筹码分布,这里用股票每日均价、换手率来计算。一天的均价相当于当日所有开仓投资者的平均成本。计算方法为:往前推N个交易日,每日成交均价乘以当日换手率并连乘后续日期的“不换手率”,即为当天成本“延续”到现在的比例,把所有"N个交易日延续到现在的成本"根据比例加权平均即为成本价。具体公式为
这里RP即为参考价格,k是归一化权重,作用是让权重之和为1,V是换手率,P是价格。
例如某只股票昨天的成交均价是5元,换手率是10%,那么认为有10%的资金开仓成本价是5元。前天成交均价是6元,换手率是20%,那么前天有20%的资金成本价是6元,(而昨日换手率是10%,说明有10%的部分卖出去了,剩下90%不动),进而延续到今天的部分是20%*(1-10%)=18%,每一天都以此类推。最后把权重归一化,对均价求加权平均,即为所有投资者平均的成本价。
这里的参数N从直觉上来讲不敏感,因为越往前延续到今天的比例越低,权重不断递减。研报里N=100。正是因为N不敏感,所以研报里只剔除停牌日在50%以上的个股(停牌日换手率为0不影响计算)。这里也是这么处理的。
这里回测了全市场、中证800、中证500、沪深300的风险中性、不中性情况,调仓周期为5日。风险中性是行业、市值中性,使用的是回归取残差的方法。全市场回测时剔除1年新股和ST情形。
策略回测结果
回测时间为2007年2月1日-2018年5月7日,手续费、滑点均为默认。每次等权买入十只。调仓周期为5日。
全市场非中性
全市场中性
中证800非中性
中证800中性
中证500非中性
中证500中性
沪深300非中性
沪深300中性
需要注意的地方
与研报不同的地方:
增加剔除机制:剔除前10个交易日有跌停情况的个股。个股发生跌停的时候,换手率可能比较低,导致多数投资者成本价依然较高,因此很容易被策略选出。此时的换手率不能正常反映投资者的风险处置,计算出来的参考价格包括了想卖但没法卖的交易者成本,因此剔除。
几个可以优化的地方:
逻辑优化1:用分钟数据计算参考价格。
从上述分析可以看到策略建立在比较强的假设上,例如均价代表当天所有交易的成交价,以及假设不同开仓日的交易者换手率相同。前者可以用分钟数据减小假设强度,即每个分钟的均价代替该分钟的开仓成本价(不过要注意T 1限制),后者可以引入衰减系数。
逻辑优化2:考虑成本分布的其他统计量。
计算参考价格时实际计算的是成本分布的平均值,还可以计算中位数,甚至考虑标准差等。
逻辑优化3:考虑CGO的大小而非次序。
策略是每次选择CGO最小的10只交易,没考虑CGO本身值的大小。但是如果CGO大于0就失去处置效应的意义了。如果考虑CGO本身值(例如每次选CGO小于某个阈值)说不定有自带择时的效果。研报最后有个步骤是先对CGO按大小分层,不同层再用不同因子加强,说明CGO本身的大小是有特殊意义的。大家可以简单地先筛选CGO小于0,再选10只,在股票池是中证500且不风险中性情况下好像效果更好。
逻辑优化4:加入止损,纳入其他因子。
逻辑优化5:技术类因子调仓比较快,增大成本。可以减少调仓
代码优化。 代码中每次交易都重新取前100个交易日均价、换手率数据,耗时较长。改进方法是保存数据,每次增量取(不过注意要用后复权价格)。
风险:
模型失效风险,尤其是反转类模型失效风险(见参考资料2)。从回测看确实最近一年的表现不尽人意。
代码错误风险
极端市场冲击
参考资料:
广发证券《行为金融因子研究之一——资本利得突出量 CGO 与风险偏好》
东方证券《因子选股系列研究之二十三——反转因子失效市场下的量化策略应对》
Lei《处置效应
(这篇研究得比较详细,感兴趣的同学可以用聚宽单因子分析来测试CGO的效果