首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >复核 EMA 指标时,我会先固定这三个计算口径

复核 EMA 指标时,我会先固定这三个计算口径

原创
作者头像
量化行业新引擎
发布于 2026-10-21 09:57:34
发布于 2026-10-21 09:57:34
00
举报
文章被收录于专栏:AI量化视界AI量化视界

复核策略里的 EMA 时,最容易出现的情况是:周期都写着 20,结果却和行情软件、另一套回测代码对不上。问题往往不在公式本身,而是计算口径没有写清楚。pandas 的 ewm 参数不少,我现在至少会固定下面三项。

一、先决定 adjust

pandas 默认 adjust=True,它会把历史数据按指数衰减权重重新归一化;adjust=False 则按递推式计算:本期 EMA = (1-α)×上期 EMA + α×本期价格。两种写法在样本刚开始时差异比较明显,数据足够长后才会逐渐接近。如果策略要和常见的递推指标保持一致,我会明确写成:

ema20 = close.ewm(span=20, adjust=False, min_periods=20).mean()

二、缺失值不能只做一次 dropna

ignore_na=False 是默认值,权重按原始位置计算;设为 True 后,权重按非空观测之间的相对位置计算。股票停牌、数据源漏值或拼接不同交易日时,这个区别会直接改变缺口之后的 EMA。更稳妥的做法是先确定缺失值代表什么,再决定填充、保留还是跳过,不能为了让代码运行就统一前向填充。

三、给指标留足预热期

min_periods 默认可以很早输出结果,但这不等于指标已经稳定。设置 min_periods=20 能避免不足 20 个有效观测时就生成信号。不过即使这样,回测开始处仍可能受初值影响。我通常会额外加载一段历史数据用于预热,算完指标后再截取正式回测区间。

最后还要注意,span=20 并不是“只使用最近 20 天”,它对应的平滑系数是 α=2/(20+1),更早的数据仍以递减权重参与计算。把 adjust、ignore_na、min_periods 和预热长度写进策略配置,比只记录一句“20 日 EMA”更利于复现,也能减少不同环境之间的对账误差。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档