重读信息论,香农熵邂逅效率动量

文章配图

以前读本科的时候,选修过几门通信类的课程,其中有一门叫《信息论》,上课的时候,什么信息量、香农熵、互信息那些东西也都学过,不过都是为了混学分,考过后基本就还给老师了。

后来入了量化交易的坑,每天接触得最多的是收益率、波动率、最大回撤、协方差矩阵、因子暴露这些东西,似乎已经跟通信系统八竿子打不着,着实没想到,信息论这个回旋镖有一天能打到我的量化策略里面。

为啥又跟信息论勾搭上了,还要说回我最近研究的事情。

今年不是行情比较飘忽嘛,ETF轮动作为今年正收益明显的策略,激发了很多小伙伴的研究热情,在这种氛围下,咱就想着看看能不能把之前的轮动策略也改进优化一下,看看能不能收益再往前迈一步。

而在轮动策略里面,动量因子是核心,之前弄过斜率轮动,后来又弄过效率轮动,不清楚这段开发经历的小伙伴可以去看 《ETF轮动策略迁移到实盘后,幸好守住了十年10倍+》 《十年多赚2400%,ETF轮动策略都经历了哪些改进》 这两篇文章。

因为传统的动量因子都是用N日涨幅,同样是上涨10%,中间可以是无数种价格路径,哪种趋势才是咱想要的呢?

斜率动量是从总体趋势衡量出发,效率动量是从价格路径的运行效率出发,那还有什么点是没有考虑到的呢?

在查资料当中,看到了《Frog in the Pan: Continuous Information and Momentum》这篇论文,直译过来就是《温水煮青蛙:连续信息与动量》,这篇论文研究的核心主题大意是, 如果有两只股票在过去一段的涨幅差不多,那么收益是通过大量连续的小幅价格变化慢慢形成的股票的未来表现,大概率会优于收益依靠少数几个大幅波动交易日形成的股票,要选择价格路径是温水煮青蛙型的股票更有利。

然后我去问AI,怎么去找温水煮青蛙型的价格路径,如果用公式去衡量,有没有可以参考的,它就给我推荐了香农熵公式。

忍受着一些不适的应试考试回忆,去翻了翻《信息论》的前两章,当初的书早就不知道丢到哪个犄角旮旯里了,这里翻的是电子版。

发现真的可以用得上,但在唠香农熵之前,必须先得说信息量。

这个不要按日常语言去理解,信息量不是说字数越多信息量就越大,而是和一个事件的发生概率有关。

句子1: 今天太阳会从东边升起。

句子2: 孙割要让景填还三千万。

上面两个句子字数长度是一样的,你觉得哪句话更有信息量?下面来看看信息量的计算公式。

信息量 = log(1/p) = -log(p)

其中p就是事件发生的概率,log是以2为底的对数。物依稀为贵就是这个道理,狗咬人很平常,人咬狗属于小概率事件,信息量就大,所以能上新闻,更别提孙割了。

信息论之父,数学家克劳德·香农(Claude Shannon),在1948年发表的论文《通信的数学理论》中,首次提出了“信息熵”的概念,为了纪念香农老爷子, 所以也把信息熵称为香农熵,它的本质就是信息量的数学期望,也就是对信息量进行加权平均 ,计算公式如下,信息量针对的单个事件,香农熵衡量的是整个系统。

香农熵 = Σplog(1/p) = -Σplog(p)

假设有两个抛硬币系统,硬币落地只会出现正面和反面,你觉得以下哪个系统更有确定性?

系统1: 正常硬币,正面概率50%,反面概率50%。

系统2: 做过手脚,正面概率90%,反面概率10%。

系统1的香农熵 = 0.5log(1/0.5) + 0.5log(1/0.5) = 1.0

系统2的香农熵 = 0.9log(1/0.9) + 0.1log(1/1.0) = 0.469

香农熵衡量的就是系统的不确定性,数值越大,系统越不确定,所以系统1比系统2更不确定,这非常符合直觉。热力学当中也有“熵”的概念,它衡量的是系统的混乱程度,数值越大越混乱。

香农熵有个性质,就是当系统当中所有独立事件的发生概率相等时,熵的数值达到最大,下图展示的就是抛硬币系统当中不同正面概率下的熵曲线,在正反面等概率时熵达到最大值。

文章配图

正是利用这个性质,咱可以利用香农熵的这种数学形式,迁移到温水煮青蛙价格路径的“路径熵”上面来, 因为将事件发生概率p替换成每日价格变动占统计期间价格总距离的贡献度,那么当每个交易日的贡献度相同时,路径熵达到最大值。

假设一个ETF过去20个交易日总共走出了10%的上涨,而且每天大约贡献0.5%,那么相对上涨得比较均匀,符合温水煮青蛙的价格路径形式,路径熵自然比较高。反过来,如果绝大部分涨幅集中在某一天,比如有一天突然上涨9%,剩下十几个交易日加起来才贡献1%,整个上涨分布高度集中,路径熵自然下降。

不过真把路径熵放进策略里跑了一遍之后,发现了一个问题,它虽然能够衡量价格变化是不是均匀,有没有集中在少数几个交易日,但它把上涨和下跌都放在一起了,只要一段价格变化足够大,不论方向,它都会贡献路径长度。

于是乎,又往前多走了一步,构造了“顺向路径熵”,也就是在计算路径熵的时候,路径贡献度只考虑与总动量同向的交易日,也就是说,总动量是上涨的,只考虑上涨的交易日,总动量是下跌的,只考虑下跌的交易日,因为是这些交易日起了核心作用。

咱把斜率动量、效率动量、路径熵和顺向路径熵的ETF轮动策略的表现放到一起,可以看出依旧是效率动量的表现最猛,路径熵和顺向路径熵表现介于斜率动量和效率动量之间。

文章配图

效率动量衡量的是价格路径有没有走弯路,顺向路径熵衡量的是价格路径有没有小步快走,那就把它们结合起来使用,搭一个新的ETF轮动策略,为了跟之前的策略区分开,就简化叫“ETF顺向路径熵轮动策略”吧,下面是回测绩效,测试环境跟之前的那些策略都是一样的,为了防止未来函数,T日只能看到T-1日及之前的数据,正常费率。

文章配图

文章配图

回测时间是2015年至今,ETF顺向路径熵轮动策略累计收益率是5360.7%,年化收益是42.71%,夏普比率为1.5182,最大回撤为28.0%,比之前最激进的效率轮动策略收益还要高一些,效率轮动策略的年化收益是38.81%,不过最大回撤也加大了,从26.05%扩大到了28.0%,相当于是收益提高了将近4%,最大回撤扩大了2%,不过总体还是好的,夏普率从1.3460提高到了1.5182。

对了,补充说明一下,计算信息量和香农熵的公式当中,log可以不以2为底,只不过底不同时,信息量的单位也不同,以2为底时,单位是比特bits,使用自然对数时,单位是奈特nats,因为在ETF轮动策略当中,是横截面比较,只要底数相同就行,无须纠结量纲。

本文主要是唠一唠最近新发现的动量度量方式,抛砖引玉,希望能对搞ETF轮动的小伙伴有思路上的启发,接下来再给想用该策略进行魔改/模拟盘/实盘的小伙伴的说一说参数设置的要点。

文章配图

ACCOUNT_ID :就是你自己的股票账户的资金账号,回测的时候可以不填或乱填,实盘的时候一定要填自己正确的账号。

ACCOUNT_TYPE :因为ETF要使用股票账户进行交易,所以该参数固定为“STOCK”。

ACCOUNT_MODE :就是你打算用多少钱来跑这个ETF轮动策略,可选值为MONEY和RATIO。选MONEY就表示按照ACCOUNT_MONEY设定的金额,选RATIO就表示使用总账户ACCOUNT_RATIO那么多比例的资金。

ACCOUNT_MONEY :策略金额,单位是“元”,根据自己的资金情况设置,最低限度为能买得起候选池中任意一手ETF,建议不低于1000元。

ACCOUNT_RATIO :占总账户资金的比例,数值在0~1.0之间,0.3表示占30%比例。

STRATEGY_TRADETIME :策略进行交易的时间,因为ETF轮动策略是日线策略,一天那么长,所以需要指定一个具体的时间进行下单交易。

ORDER_TIMEOUT :订单超时时间,默认是60秒,下单后超过60秒没有全部成交就是超时, 策略程序会自动检查出超时的委托单,然后撤单重下 。

STRATEGY_PATH :策略相关文件的存储路径,策略程序会在STRATEGY_PATH这个路径底下再新建一个名为STRATEGY_NAME的文件夹,策略相关的持仓文件和交易日志文件都会保存在这个文件夹底下,这些文件是做仓位隔离和信息回溯的关键。

STRATEGY_NAME :策略名称, 一旦开启实盘之后,策略名称不要随意修改 ,不然就无法识别策略持仓文件,如果在盘中修改然后重启策略的话,就识别不了修改之前下的委托单和成交单。 特别说明就是,策略名称除了中文和英文之外,不要含有任何特殊字符,不然就无法正确识别券商柜台的委托回报。

CODE_LIST :ETF候选池的代码列表,你也可以把自己想轮动的ETF加入进去。

N_DAYS :用来计算ETF价格动量、效率系数和路径熵的交易日天数,默认是20天。

SELECT_NUM :选择几个效率动量趋势最强的ETF,可以选1个,也可以选前面的N个,任君选择。

本次 『 ETF顺向路径熵轮动策略』 的回测/实盘源代码,已经分享在『 量化达摩院 』社群当中,群友请原路径自取,还不会使用QMT进行策略回测和实盘的小伙伴,请参照社群知识库第二章的第3和第4部分进行操作。

文章配图

根据之前的规则约定,带V1字样的是回测版,仅支持回测,主要是代码少,方便看策略逻辑,带V2字样的是回测实盘一体版,同时兼顾实盘和回测,方便对比回测实盘之间的差异,后缀py的是策略源码文件,rzrk是QMT当中的策略备份文件,在QMT中导入后,除了能看到源码外,还会带有策略回测时的各项参数,因此墙裂建议量化萌新通过rzrk导入的方式使用策略,会非常省心省力。

下期见~


往期回顾

------量化社群------

量化达摩院

量化藏经阁Max

量化藏经阁2026

------量化策略------

桥水全天候策略 风险平价策略

聪明钱 TrendModelSys 张坤策略

RSRS 北向资金 F-Score 鱼身策略

TrendPattern 波动率收敛 RSJ策略

期货Alpha 跨品种套利 GARP策略

MACD形态 导数策略 Trendflex

绩优小市值 漂亮50 操盘手 Rumi

AI择时 K线面积法 零代码策略

贴水策略 概率密度策略 一致预期

RSRS复现1 RSRS复现2 ICU均线

野路子策略 ETF轮动 ETF轮动2

菜场大妈&马科维茨 多赚200%

美债&A股择时 价比斜率套利

黄金价格预测 量化兵器库

十年零回撤 红利策略 数字信号

------心得杂谈------

入门路径 量化书单 量化神作

打开黑箱 量化手册 量化攻略

个人量化 量化误解 高收入背后

西蒙斯 雪球爆仓 量化交易邪术

量化网站1 量化网站2 量化狠人

年化577倍 抄底&摸顶 策略开发

未来函数 回测&过拟合 回测&实盘

Alpha&风险因子 MACD参数

资金流 吃贴水 回测提速 量价背离

自学路径 文章合辑 151个策略

chatGPT选股 量化注册制

5年131倍 量化编程神器

4000因子 因子库 量化神集

量化深坑 老胡炒股 私募上班

机器学习算法Top10 微盘股

量化的一天 失败的Quant

十年8万倍 五穷六绝 一月之殇

_ Tip:点击关键字可以直接查看对应文章。 _

END

如果对本文有疑惑,或是想聊聊

亦或是围观朋友圈当点赞之交

戳我,让我们一路同行

吃瓜吐槽写代码

文章配图

风险提示:市场有风险,投资需谨慎。所有策略思路和策略源码仅供参考和学习,不构成投资建议,策略回测仅代表历史收益,不代表未来收益。

— 全文完 —

本文由量化君原创。转载时请注明作者及出处。

在微信公众号阅读原文 ↗