×

当天新增筹码盈利占比,这篇研报中分层回测最完美的因子终于出现了!

wang wang 发表于2026-07-08 18:05:13 浏览1 评论0

抢沙发发表评论

当天新增筹码盈利占比,这篇研报中分层回测最完美的因子终于出现了!

当天新增筹码盈利占比

本文,笔者将介绍中信建投姚紫薇和陈升锐两位老师的研报《筹码分布因子系统构建》中的最后一类因子,筹码盈利因子

这一类共有9个因子,但是笔者只复现了其中五个。还有四个没有复现,因为笔者把他们当作了中间变量。

计算公式和代码

这几个因子的计算都是基于筹码峰的概念,实现的难点也在这里。关于筹码峰的计算,笔者在该系列的第一篇文章中有过相关介绍。

量化拯救散户,公众号:量化拯救散户筹码分布因子,IC不高,但是分层结果相当出色!

1

计算公式

获利比率:衡量活力筹码所占比率,即t日盈利筹码占总筹码的比率。

博弈K线:反应当天开盘于收盘获利比率变化情况,即开盘时获利比率-收盘时获利比率。

价格相对位置:衡量平均筹码成本的盈利情况,即收盘价/筹码加权平均价格-1。

剩下的四个因子,公式有点儿复杂,笔者就直接贴图了。

2

代码

processing_single_day这个方法的主要内容和之前的几篇文章是一致的,所以就不赘述了。

咱们直接来看一看需要修改的部分。

def cal_factors(self, code, close, volume, factor, tr, open_):    data = pd.concat([close, volume], axis=1)    data.columns = ['close''volume']    data = data.groupby('close', as_index=False, group_keys=False).sum()    last_data = self.last_chip.get(code, None)    open_ = open_.iloc[0]    if last_data is None:        winner_open = 0        data.iloc[:, -1] *= tr    else:        winner_open = last_data[last_data['close'] < open_]        winner_open = winner_open.iloc[:, 1].sum() / last_data.iloc[:, 1].sum()        last_data['close'] /= factor        data = data.merge(last_data, how='outer', on=['close'])        data = data.fillna(0)        data['volume'] = data.iloc[:, -1] * (1 - tr) + data.iloc[:, -2] * tr        data = data[['close''volume']]    p = close.iloc[-1]    def weighted_central_moment(x, w, k, mean):        """计算k阶加权中心矩"""        return np.average((x - mean) ** k, weights=w)    weight = data['volume'] / data['volume'].sum()    mean = np.average(data['close'], weights=weight)    winner = data[data['close'] < p]    winner = winner.iloc[:, 1].sum() / data.iloc[:, 1].sum()    candle_strick_gambling = winner_open - winner    prt = p / mean - 1    pl = (data.iloc[:, 0] >= p) * data.iloc[:, 1] * (p - data.iloc[:, 0])    pg = (data.iloc[:, 0] < p) * data.iloc[:, 1] * (data.iloc[:, 0] - p)    tl = (close >= p) * volume * (p - close) * tr    tg = (close < p) * volume * (close - p) * tr    data.iloc[:, 0] *= factor    self.last_chip[code] = data.copy()    return winner, candle_strick_gambling, tg.sum() / pg.sum(), tl.sum() / pl.sum(), prt

第5、8、11和12行代码是新增的,主要是计算开盘时获利比率,这个值使用昨天的筹码峰和今天的收盘价计算的。

第19-23行,这个代码在整个系列的第一篇文章中也出现过,主要是计算筹码加权平均价格的。

第24-25行,计算的是当日盈利筹码占比,用的是当日的筹码峰和收盘价。

第26行,计算博弈k线因子。

第27行,计算价格相对位置。

第28-31行,计算的是最后六个因子。但是,笔者将pl、pg、tl和tg当作中间变量了,没有作为因子返回,因此因子评价的时候没有他们。

3

因子逻辑

在行为金融学理论中,投资者通常对账面盈亏具有显著敏感性,特别是短期浮盈筹码可能快速获利了结,导致抛压上升。若某只股票当日新增的盈利/亏损比率较高,意味着该股票短期不稳定筹码比率越大,筹码抛压也会变大,可能对股价走势产生不利影响。

因子评价

这五个因子中,大部分因子之间的相关性还是挺高的,只有tl_ratio和tg_ratio这两个因子之间可以说是没有任何相关性。

笔者计算的这五个因子,从IC上来看最高的是tl_ratio这个因子。但是,用过去21个交易日均值进行低频化的tg_ratio这个因子在分层回测上的表现是最好的,而且IC也还行。

同时,这个结论和一位私信我的大佬是一致的,他复现了这篇研报,也得到了tg_ratio表现最好的结论。

值得一提的是,tg_ratio用标准差低频化之后的表现看起来和均值是差不多的。

01

IC分析

这个因子在2018年的时候IC挺低的,绝对值勉强达到0.02,在2019年到2023年还不错,绝对值都超过了0.06。

02

回归分析

03

换手率分析

04

收益分析

这个因子的分层回测表现确实不错,在整个回测区间里,其净值曲线和因子值大小呈现出完美的负相关。

从2020年开始,因子值最大的两组就稳定在了倒数第一和倒数第二的位置上,从2023年之后,每一层都很清晰,和其他组基本上没有相交了。

总结

这篇研报到这里也就彻底结束了,以这样一个因子收尾,笔者还是比较满意的。

不知道各位大佬是不是也比较满意,如果您有那么一点儿喜欢的话,能否点赞推荐关注和分享支持一下笔者呢

END -