- Published on
移动平均线函数库
- Authors

- Name
- CoresightQuant
NOTE
本文为公开交易策略的技战术复盘,聚焦方法逻辑、交易场景与风险边界。
在量化交易中,移动平均线(Moving Average, MA)可能是被使用最多、也最容易被低估的工具之一。它既可以作为趋势的方向标,也可以作为动态支撑阻力,更可以融入复杂的自适应系统中。最近,在公开交易社区中,一位署名 liquid-trader 的作者发布了一套名为 MovingAverages 的函数库,其核心理念并非发明全新的均线,而是将多种经典移动平均线在“计算效率”“数值稳定性”“可定制性”三个维度上做了深度升级。这篇文章将以此为基础,结合中文语境下的交易实践,为你拆解其逻辑、优势与局限,并探讨如何把它应用到自己的交易体系中。
策略解读
简单来说,这个函数库的价值并不在于提出了什么“圣杯”式的新指标,而在于把一堆耳熟能详的工具打磨得更加锋利。
移动平均线的本质是对价格序列进行平滑,以过滤掉随机噪声,提取出主要趋势。最常用的简单移动平均(SMA)虽然直观,但它对所有数据点一视同仁,且作为滞后指标,常被批评“反应太慢”。指数移动平均(EMA)改进了权重分配,越近的数据权重越大,从而缩短了滞后,但它在某些情况下会产生数值误差的累积。加权移动平均(WMA)和对称加权移动平均(SWMA)则通过更复杂的权重设计,让均线在“敏感”和“平滑”之间取得不同平衡。
而 MovingAverages 函数库在实现这些经典工具时,引入了三个关键特性:
第一,O(1) 时间复杂度。 无论数据长达 1000 根还是 100000 根,每次新增一个数据点,计算最新均线所需的时间都是恒定的。这在需要快速迭代或高频更新策略时尤为重要,极大提升了回测与实盘计算的效率。
第二,数值稳定。 长序列计算中,浮点数舍入误差会不断累积,导致均线在极端情况下产生偏差。尤其是 EMA 这类递归算法,经过成千上万次迭代后,误差可能被放大。函数库通过特定的数学技巧保证了长周期下结果依然可靠。对于超过 5000 根 K 线的周期,这种稳定性是决定性优势。
第三,锚点与分数长度。 这是最有趣的功能。传统均线以当前时间为终点,向前取固定数量的 K 线;锚点(anchor)则允许你将均线的计算起点固定在某个特定位置,例如某次宏观数据发布点、某根大阳线的开盘价,或者是你的建仓价格。分数长度则打破了“周期必须是整数”的限制,比如你可以设置一个 7.5 日均线,从而在 7 日与 8 日的灵敏度之间找到更细腻的平衡。这两个特性为策略设计打开了新的维度。
此外,库中还包含了 ATR(平均真实波幅)。ATR 本身不是移动平均线,而是一个波动率指标,但它采用类似 EMA 的平滑方式,因此被纳入该库。这提示我们,移动平均线的思想其实可以延伸到任何需要平滑的序列——价格、成交量、波动率甚至基本面指标。
名词解释
- O(1) 复杂度:算法的执行时间不随数据规模增长而增长。在移动平均线的上下文里,无论你当前处于第 100 根还是第 100000 根 K 线,计算最新值所需的时间都几乎是固定的。这意味着可以轻松应对海量数据及高频更新。
- 数值稳定:在计算机浮点数运算中,误差随着迭代会积累。数值稳定的算法能把误差控制在极小范围内,避免在长时间序列中产生放大、漂移或极端值,从而保证指标在几万根K线之后依然可信。
- 锚点(Anchor):指定移动平均线计算区间的一个固定起点。例如,从某次央行决议时刻开始,计算该时刻之后的成交量加权平均价,用来衡量市场对事件的反应。锚点让均线不再只是“滚动”的,而是具有了事件驱动的意义。
- 分数长度(Fractional Length):均线周期可以设为小数,比如 4.5。传统均线只能取整数周期,而分数长度使得周期可以更连续地微调,帮助交易者在回测中寻找更精确的最优周期,避免整数跳跃带来的离散化问题。
- EMA(Exponential Moving Average,指数移动平均):一种加权移动平均,近期数据被赋予更高的指数递减权重。它对价格变化更敏感,但容易在震荡中发出错误信号。
- HMA(Hull Moving Average,赫尔移动平均):由澳大利亚交易员 Alan Hull 发明,通过组合不同周期的 WMA 来大幅降低滞后,同时保持平滑度。常用于趋势跟踪和顺势入场。
- VWAP(Volume Weighted Average Price,成交量加权平均价):以成交量为权重计算的均价,常用于机构资金成本评估和日内趋势判断。锚定 VWAP 可以观察价格相对资金均价的位置。
- ATR(Average True Range,平均真实波幅):衡量市场波动程度的指标,通过平均一定周期内的真实波幅(即当日最大区间与前一收盘价的关系)来得出。常用于设置止损或动态仓位。
策略思路讲解
移动平均线本身并不产生信号,它是交易者用来构建信号体系的“积木”。基于 MovingAverages 这类工具库,我们可以设计出多层次的策略。
1. 趋势方向过滤。 最简单也最常用的方法是观察均线斜率与价格位置。当价格位于均线上方,且均线向上倾斜,说明多头趋势占优;反之亦然。你可以选择 SMA 作为慢线,HMA 作为快线,利用两者交叉来确认趋势的转变。由于 HMA 滞后更低,它的交叉往往比传统均线交叉更早出现。
2. 均值回归策略。 当价格偏离均线过远时,可以假设它会向均值回归。此时锚点均线特别有用:如果你在某个关键事件后设置锚点,那么价格相对于这个锚点均线的偏离程度就代表了市场情绪的过度反应。例如,锚定在某根大阳线收盘价上的 VWAP 可以被看作短期多头成本的参考,如果价格跌到该均线下方且振幅缩小,可能是假突破后的回归机会。
3. 波动率突破策略。 ATR 可以与均线结合使用。例如,计算一条快速 EMA 作为趋势线,再以 ATR 的倍数作为通道上下轨。当价格突破通道时,说明波动放大,趋势可能启动。为了提高可靠性,可以要求突破方向与更长周期的均线方向一致——如上轨突破且慢线上行才做多。
4. 多时间框架共振。 使用不同周期的均线组合,例如周线级别用 20 WMA 判断大方向,日线级别用 10 HMA 寻找具体入场点。当大小周期的方向一致时,信号胜率往往更高。分数长度功能可以让你在两个整数周期之间找到更匹配特定品种的尺度,比如某个股票表现得像“34.6 日周期”,那么一条周期为 34.6 的均线会比 34 或 35 更能贴合其价格节奏。
5. 动态止损跟踪。 均线不仅是入场工具,也是天然的移动止损线。你可以用锚点均线来设定“起始保护线”,再用 ATR 动态调整止损宽度。例如,锚定在入场当日的 VWAP,并附加 1.5 倍 ATR 作为缓冲,这种止损会随波动自动伸缩,避免在正常波动中被扫出场。
6. 线性回归作为趋势强度估计。 线性回归的端点其实就是一条拟合直线在当前时刻的取值,其斜率可以量化趋势的速度和方向。通过比较斜率的变化,可以进一步筛选高动量时段。虽然线性回归不是严格意义上的“均线”,但它提供了一种连续的、基于统计的平滑方式,与均线库配合使用,可以构成更立体的趋势分析框架。
优点
- 计算效率极高:O(1) 复杂度意味着即使处理十万根K线,每次更新的耗时也几乎不变。这对于开发高频策略或在不支持大容量缓冲区的环境中运行有极大价值。
- 数值稳定可靠:长周期计算不担心误差累积,保证了信号在长时间回测中的可复现性。尤其对于需要精确比较“5k 帧以上均线”的策略,这是一个显著的信任背书。
- 高度灵活:锚点与分数长度是两张“好牌”。锚点让均线能够绑定到具体时间窗口,分数长度让周期优化可以从离散网格变为连续空间,二者叠加后,策略的可调参数空间显著扩大。
- 一站式覆盖:SMA、EMA、WMA、HMA、VWAP、ATR等全都在一个库内,且参数设计统一。交易者无需为不同指标寻找不同来源,减少了兼容性和维护成本。
- 适合作为高阶策略的基础组件:因为所有均线共享相似的接口,你可以快速切换不同均线来做对比实验,而无需改动整体框架,便于系统性测试不同均线组合。
- 对普通交易者友好:虽然内部实现强调O(1)和稳定性,但对使用者来说,其对外接口仍然是直观的“长度 + 来源 + 锚点”,没有增加额外的学习负担。
缺点
- 本质上的滞后性:无论怎样优化,移动平均线终究是对历史数据的加权说明。HMA 虽然降低了滞后,但并不能消除它。在急涨急跌的行情中,均线信号往往会迟到,导致入场点位不佳。
- 震荡市失效:当市场无趋势、窄幅波动时,均线交叉会频繁产生假信号,造成连续止损。该库并没有提供“无趋势过滤”机制,需要交易者自行叠加 ADX 或布林带收口等条件。
- 锚点选择的主观性:锚点既是亮点也是陷阱。锚点设在哪里,往往依赖交易者对“事件”的理解,而事件的重要程度、持续时间都没有客观标准。主观锚点可能让回测结果失真,或带来过拟合风险。
- 分数长度可能引入伪精确:将周期调成 4.7 或 12.3 看似精细,但市场并不存在固定的“真实周期”。分数长度只在统计意义上具有连续性,实际使用时可能因为小数点后的微小改动导致过拟合,而并非捕捉到了真实规律。
- 缺乏信号生成逻辑:这个库的目的是提供“工具”,不是完整的策略。交易者还需要自己编写交易规则、仓位管理、风控模块,对于新手而言门槛依然存在。
- 没有基本面或情绪数据:移动平均线只能处理价格、成交量等结构化交易数据,无法感知新闻、突发事件等导致价格跳空的原因。当重大基本面变化出现时,均线几乎总是反应滞后。
起源年份考证
需要说明的是,MovingAverages 这个具体函数库的作者并未公布其创建时间,因此无法考证该版本的准确起源年份。以下时间线仅针对其中所涵盖的“移动平均线”这一大类方法在交易领域的演化进程,属于对该类方法的考证。
- 19 世纪末至 20 世纪初:技术分析萌芽期。查尔斯·道(Charles Dow)提出的道氏理论中,已隐含“价格围绕某种平均成本波动”的思想,但尚未形成明确的移动平均线公式。简单移动平均(SMA)作为统计工具在更早的数学文献中已有雏形,但真正被用来跟踪股价趋势,约在 20 世纪初期。
- 20 世纪 20-30 年代:股票技术分析逐渐职业化。一些分析师和交易员开始使用手工绘制的移动平均线来过滤行情噪声,著名技术分析师如 Richard Schabacker 等人的著作中已出现均线概念。此时均线多在图表上以“N日线”形式出现,计算简单但效率低下。
- 20 世纪 50 年代:指数移动平均(EMA)的数学基础——指数平滑法(Exponential Smoothing)——由 Robert G. Brown 在 1956 年正式提出,用于预报与控制领域。随后被引入金融市场,成为比 SMA 更灵敏的趋势跟踪工具。
- 20 世纪 80 年代至 90 年代:成交量加权平均价(VWAP)开始在机构交易中流行,因为它能较好反映一段时间内资金的真实成交成本,特别适合大宗交易和日内算法交易。同期,加权移动平均(WMA)和 Wilder 平滑法(RMA)也随着技术指标体系的成熟被广泛应用。
- 2005 年:赫尔移动平均(HMA)由澳大利亚交易员 Alan Hull 公开提出。其目的是解决传统移动平均线滞后过大的问题,通过二次加权平均实现“几乎无滞后”的平滑效果。该方法的提出有明确年份记录,但具体传播和普及则是在随后的几年间。
- 21 世纪初(2005 年之后):随着可编程图表软件逐渐普及,交易者开始自定义移动平均线的计算方式,锚点(Anchor)和分数长度(Fractional Length)等扩展功能开始在个人策略中零散出现。但目前没有公开文献能够确认这些特性的最早提出者,因此该部分起源无法考证。
总结来说,移动平均线作为趋势追踪工具,其核心理念已有逾百年历史;而锚点、分数长度等增强功能,则属于可编程交易时代的技术演化和个性化尝试,没有统一的“发明年”可查。
改进建议
- 引入自适应均线:在库中增加 KAMA(自适应移动平均)或 VIDYA(动态波动率指数移动平均),让均线周期根据市场波动率自动调整。这样可以在震荡期间放缓、趋势期间加快,减少假信号。
- 叠加趋势强度过滤:配合 ADX(平均趋向指数)或 Aroon 指标,当 ADX 低于阈值时不接受均线交叉信号。这能有效规避震荡市,提升策略的净值曲线平滑度。
- 锚点自动化:不要硬编码锚点,而是通过程序化规则自动寻找锚点。例如:锚定在最近一次波动率跳升的起点,或者锚定在价格突破关键斐波那契水平的那一刻。这样一来,锚点是数据驱动的,而非人工拍脑袋。
- 分数长度动态优化:利用频谱分析或自相关函数估计当前市场的主导周期,然后动态调整分数长度。比如在某一品种上,识别出“主导周期约为 21.7 根K线”,那么就让均线周期实时跟随这个变化,避免静态参数失效。
- 结合多均线云:将不同长度的均线绘制成一个“云带”,类似一目均衡表的作用。当价格在云带上方、云带变厚时,认定为安全趋势区;当云带变薄或价格进入云带时,减少仓位。这能综合多条均线的信息,提高决策鲁棒性。
- 加入均值回归通道:在均线基础上叠加标准误差带或 ATR 带,当价格偏离均线超过 2 倍 ATR 时,产生反向信号。这样可以让一个依赖趋势的库同时具备均值回归策略的潜力。
- 对极端值进行稳健化处理:虽然原始实现已经数值稳定,但可以进一步加入对异常K线(如跳空、错价)的过滤机制,例如用中位数或截尾均值替换极端值,避免单根K线导致均线大幅扭曲。
- 构建组合信号系统:不依赖单一均线,而是将多个均线在不同频率下的方向与斜率作为特征,输入到简单的线性模型或决策树中,生成 0~1 连续信号。这样能平滑单个指标的错误,并使策略具备一定的自适应能力。
总结
MovingAverages 函数库并不是一个开箱即用的交易圣杯,而是一把精心打磨的瑞士军刀。 它把移动平均线家族中最核心的成员汇聚到一起,并解决了 O(1) 计算与数值稳定性这两个容易被忽视的底层难题;锚点和分数长度则像是为这把军刀加上了“可伸缩调节螺丝”,让交易者能够适应更细致的市场节奏。对于普通趋势策略,它提供了效率与稳定性的保障;对于进阶研究者,它打开了从“固定周期均线”到“事件驱动均线”的新窗口。
但我们也必须清醒地看到,移动平均线无法脱离技术分析固有的滞后性,也无法预测突发消息。任何均线工具都只是帮助我们理解过去与当下的“折光镜”,而不是预测未来的“水晶球”。真正优秀的策略,来自于对工具逻辑的深刻理解、对市场环境的动态判断,以及严格的风控执行力。在把玩这些精妙均线的同时,不妨将更多注意力放在资金管理、头寸调整与心理纪律上——那才是长期盈利的基石。