×

脑洞大开,参考三篇研报设计了一个净逆向投资者买入占比因子,没想到效果还不错!

wang wang 发表于2026-02-26 01:37:55 浏览2 评论0

抢沙发发表评论

脑洞大开,参考三篇研报设计了一个净逆向投资者买入占比因子,没想到效果还不错!

净逆向投资者买入占比

本文的因子,可以说是笔者瞎编的(当然也有可能出现在论文或者研报里面了,但是笔者没找到)。它参考了两篇研报,分别在过度自信,一个分层回测有点逆天的因子!这个因子竟然连续6年IC绝对值超过0.1!分布估计下的主动买入占比,桃子姐的因子居然在这本书中提到过!这三篇文章中复现过。

这个因子是这么胡诌出来的。

快速下跌区间内主动买入的属于“抄底”,也可以认为他们是逆向交易者。他们当中,有的是追寻巴菲特价值投资那一套搞逆向交易的,有的则可能是之前赔了不忍心割肉选择补仓。

如果是前者,那么意味着股票的价格很有可能低于公司内在价值了,买入的份额越高未来越可能上涨;若是或者,则意味着有一部分人已经套住了,从行为金融学的角度来看大部分套住的人不会轻易割肉,当他们买入的份额越低,未来下跌的空间也就越小。

至于快速上涨区间内的主动买入则属于“追涨”,他们是趋势交易者。未来趋势一旦发生变化,他们就会从“追涨”进入到“杀跌”状态,从而引起股价进一步下跌的正反馈。(没错,这叫正反馈!作为电子工程系的毕业生,笔者觉得有必要纠正一下正负反馈的概念。股价上涨,大量买入,股价进一步上涨,这叫正反馈;股价下跌,大量卖出,股价进一步下跌,这也叫正反馈;股价上涨,大量卖出,股价下跌,是负反馈;股价下跌,大量买入,股价上涨,也是负反馈。)

一个标的里,如果逆向交易者主动买入的份额大于趋势交易者,我们就可以认为这个标的将受到逆向交易者的主导,未来下跌空间有限。

计算步骤和代码

由于这个因子参考了三篇研报的思想,所以计算步骤确实有点复杂。

再加上,笔者的语言表达能力相当匮乏,所以各位看文字的时候可能会有一点点吃力,但是代码就比较简单了。

不过,在这里,笔者还是按照惯例,既给出文字描述,也贴出代码。

1

计算步骤

第一步,按照过度自信,一个分层回测有点逆天的因子!文章中的方法,将240分钟划分为快速上涨区间和快速下跌区间。

划分方法很简单,就是收益率大于均值+1倍标准差的是快速上涨区间,小于均值-1倍标准差的是快速下跌区间。

第二步,按照分布估计下的主动买入占比,桃子姐的因子居然在这本书中提到过!文章中的方法,计算主动买入的比例。

这里采用的是均匀分布,同时对桃子姐的计算进行了改进。改进后的公式为(close-low)/(high-low)

第三步,参考这个因子竟然连续6年IC绝对值超过0.1!中(支撑成交量-阻力成交量)/流通股本的方式计算净逆向投资者买入占比,即(快速下跌区间主动买入-快速上涨区间主动买入)/流通股本

2

代码

def process_single_day(self, idx):    file_name = self.files[idx]    date_str = file_name.split('.')[0]    full_path = os.path.join(self.file_pth, file_name)    data = BaseDataLoader.load_data(full_path, fields=['close''volume''open''high''low'])    close = data.to_dataframe('close')    vol = data.to_dataframe('volume')    rtn = close / data.to_dataframe('open') - 1    mu = rtn.mean()    sigma = rtn.std()    up_flag = (rtn > mu + sigma)    down_flag = (rtn < mu - sigma)    prob = (close - data.to_dataframe('low')) / (data.to_dataframe('high') - data.to_dataframe('low'))    vol = vol * prob    res = (vol * down_flag).sum() - (vol * up_flag).sum()    res.name = pd.to_datetime(date_str) + timedelta(hours=15)    return res

前7行,读取数据。

第8-12行,执行第一步,将240分钟划分为快速上涨分钟和快速下跌分钟。

第13-14行,执行第二步,计算每分钟主动买入的成交量。

第15行,计算快速下跌区间主动买入-快速上涨区间主动买入。

得到每日的快速下跌区间主动买入-快速上涨区间主动买入后,除以每日的流通股本即可。

def __call__(self):    res = self.run()    res = pd.concat(res, axis=1).T    cap = BaseDataLoader.load_data('../../data/capital.parquet', fields=['circulating_cap'])    cap = cap.to_dataframe('circulating_cap')    res = res / cap

因子评价

这个因子用过去21个交易日的均值合成月度因子在分层回测上的表现要强于用标准差合成的。

所以,这里也仅展示一下用均值合成因子的因子评价结果。

01

IC分析

这个胡诌的因子的IC表现挺不错的,但是和这个因子竟然连续6年IC绝对值超过0.1!比起来还是差了一点。

02

回归分析

03

换手率分析

04

分层回测

分层回测的结果并不是很好,但是和这个因子竟然连续6年IC绝对值超过0.1!相比,貌似好了那么一点点。

至少,因子值较高的四组之间的区分度是比引用的文章要强一点点的。

好了,又到了求赞求分享求关注求推荐的时间了,希望各位大佬能动动金手支持一波。

END -