NHNL因子如何刻画行业强弱

发布时间:2023年12月24日

根据华福证券-市场情绪指标专题(五),进行了提炼和改写,特此致谢!

( N H N L ) % = ( c o u n t ( H H V ) ? c o u n t ( L L V ) ) / N (NHNL)\% = (count(HHV) - count(LLV))/N (NHNL)%=(count(HHV)?count(LLV))/N

个股的顶底强弱比较难以把握,它们的偶然性太强。董事长有可能跑路,个股也可能遇到突发利好(比如竞争对手仓库失火)。在个股的顶底处,情绪占据主导地位,理性退避次席,技术指标出现钝化,进入现状不可描述,一切皆有可能的状态。

但是,行业指数作为多个随机变量的叠加,就会出现一定的规律性(受A4系统性影响的偶然性我们先排除在外,毕竟也不是天天有A4)。这是因子分析和技术分析可以一展身手的地方。

今天要介绍的净新高占比因子,可以用来捕捉行业强弱趋势以及反转,以此因子为基础,我们可以构建指数增强策略。

因子定义

净新高占比指标是指行业指数中,创年度新高与年度新低之差的个股数占全行业个股数的百分比:

( N H N L ) % = ( c o u n t ( H H V ) ? c o u n t ( L L V ) ) / N (NHNL)\% = (count(HHV) - count(LLV))/N (NHNL)%=(count(HHV)?count(LLV))/N

因子背后的逻辑

该因子的主要金融原理是锚定效应。行为金融学告诉我们,绝大多数投资者都有很强的锚定效应。投资者始终会以自己买入股票/基金时的价格(即锚定成本)为基准,视自己的账户是处于浮盈还是浮亏状态,来确定自己的操作。

创年度新高的个股,其股票持有者均为浮盈状态,即使其计划卖出,也希望等行情再上涨一段时间,因此其抛压相对较小;而创年度新低的个股,因其股票持有者均为浮亏状态,因此只要行情反弹便有投资者卖出,抛压反而较大。这样就出现了熊市不言底,牛市不言顶的规律,或者说新高之后还有新高,新低之后还有新低的股谚。

基于这一原理,显然,净新高因子能较好地刻画行业指数的强弱。

信号构建

华福证券以中信一级行业指数为例,给出了以下参考指标:

N H N L = { x ≥ 30 % ?贪婪 ? 20 % ≤ x < 30 % ?乐观 ? ? 20 % < x < 20 % ?正常区间 ? ? 30 % < x ≤ ? 20 % ?悲观 ? x ≤ ? 30 % ?恐惧 NHNL = \begin{cases} x \geq 30\% \ 贪婪\\\ 20\% \leq x \lt 30\% \ 乐观\\\ -20\% \lt x \lt 20\% \ 正常区间\\\ -30\% \lt x \leq -20\% \ 悲观\\\ x \leq -30\% \ 恐惧 \end{cases} NHNL=? ? ??x30%?贪婪?20%x<30%?乐观??20%<x<20%?正常区间??30%<x?20%?悲观?x?30%?恐惧?

为了防止一级行业指数个股数太少引发的过大波动,他们建议当一级行业指数上市超过 1 年的个股数小于 40 时,将阈值放宽为±30%/40%。

建议该指标这样使用(以单边做多为例):

  1. 当NHNL进行乐观区间时,开始建仓,此时是动量策略
  2. 当NHNL进入贪婪区间时,注意可能到来的反转。首次从贪婪区间跌回乐观区间时,做空信号出现,下一交易日开盘卖出。
  3. 当NHNL进行恐慌区间时,注意可能到来的反转。首次从恐慌区间涨回悲观区间时,下一交易日开盘买入。此时注意设置好止损位,反弹延续才能继续持有。

代码

代码的关键是要获取行业指数及成份股行情,因为计算一年内的新高和新低非常容易。

我们以XtQuant为例进行演示。XtQuant是迅投研发的行情数据及实盘接口,开通量化权限的话,可以免费获得行情数据,因此它是又一个优秀的免费数据源。我们在第24课有详细介绍它的使用。

sectors = set()

for item in get_sector_list():
    for i in range(6, 1, -1):
        key = item[:i]

        if key.startswith("SW1"):
            sectors.add(key)
            break
print(sectors)

# 显示:
'SW1煤炭', 'SW1交通运', 'SW1综合', 'SW1通信' ...

我们大约拿到40个申万一级板块名。接下来我们就需要获取板块内的每支成分股的证券代码:

xt.get_stock_list_in_sector("SW1煤炭")

# 显示:

['600121.SH',
 '600123.SH',
 '600157.SH',
 '600188.SH',
 '600348.SH',
 '600395.SH',
 ...
]

获取个股行情数据的方法在最近的笔记中有详细介绍,这里不再重复。

更多的代码不便一一演示。我们有示例notebook可以提供。最终我们能得到这样一个效果:

Quiz

请说说为什么净新高占比因子不是在[-1,1]区间内均匀分布的。为了得出结论,你用了几秒?

本文由mdnice多平台发布

文章来源:https://blog.csdn.net/hbaaron/article/details/135174638
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。