
一句话结论:MA 均线用来挑个股没用,用来看大盘有用。全 A 股票收盘上穿 5 到 250 日均线,持有 20 天全部跑输全市场;但在沪深 300 指数上「站上年线才持有」,10 年总收益 +28.6%、最大回撤 −28.6%,都好于买入持有。
第 8 课用两条均线的交叉写了第一个策略。从这一课开始,我们逐个检验指标。第一个当然是 MA:最古老、最常用,也是后面很多指标的基础。

一、原理和公式
MA(移动平均线)= 最近 N 天收盘价的平均值。
| 周期 | 俗称 | 代表 |
|---|---|---|
| MA5 | 周线 | 最近一周的平均成本 |
| MA10 | 半月线 | |
| MA20 | 月线 | 最近一个月的平均成本 |
| MA60 | 季线 | |
| MA120 | 半年线 | |
| MA250 | 年线 | 最近一年的平均成本 |
它的作用是把每天上蹿下跳的价格「抹平」,让你看清大方向。代价是滞后:N 越大越平滑,但对价格变化的反应也越慢。
最常见的两种用法:
- 1. 价格上穿均线:收盘价从均线下方升到上方,被看作转强。
- 2. 站在均线上方:只要收盘价在均线上方,就认为处于上升趋势。
二、青柠数据实验 1:个股上穿均线,后来跑赢了吗
全 A 股 2016 年 1 月至 2026 年 10 月,收盘价上穿 N 日均线的当天记一次信号,第二天开盘买入,持有 20 天。超额收益 = 信号股票收益 − 同一天全部股票的平均收益。
| 均线 | 信号次数 | 20 天收益 | 胜率 | 20 天超额 | 扣 0.15% 成本后 |
|---|---|---|---|---|---|
| MA5 | 1,191,798 | +0.93% | 48.2% | −0.03% | −0.18% |
| MA10 | 788,574 | +0.96% | 48.2% | −0.06% | −0.21% |
| MA20 | 516,850 | +0.94% | 48.4% | −0.12% | −0.27% |
| MA60 | 295,424 | +0.84% | 47.1% | −0.27% | −0.42% |
| MA120 | 221,515 | +0.86% | 47.4% | −0.32% | −0.47% |
| MA250 | 157,057 | +0.87% | 48.4% | −0.34% | −0.49% |

六个周期全部跑输,而且周期越长越差。上穿年线这种「重大突破」,反而是表现最差的一组。
站在均线上方更好吗
| 均线 | 状态 | 20 天收益 | 胜率 | 20 天超额 |
|---|---|---|---|---|
| MA20 | 上方 | +0.73% | 47.2% | −0.17% |
| MA20 | 下方 | +1.19% | 49.5% | +0.16% |
| MA60 | 上方 | +0.37% | 45.0% | −0.19% |
| MA60 | 下方 | +1.49% | 51.2% | +0.16% |
| MA250 | 上方 | +0.53% | 46.0% | −0.08% |
| MA250 | 下方 | +1.36% | 50.5% | +0.07% |
结果和直觉相反:在均线下方的股票,之后 20 天反而表现更好。 这说明 A 股个股在这个时间尺度上更接近「涨多了会回落、跌多了会反弹」,而不是「强者恒强」。
分年份和牛熊
上穿 MA20 每年的 20 天超额:
| 年份 | 信号次数 | 20 天收益 | 20 天超额 |
|---|---|---|---|
| 2016 | 28,921 | +2.08% | −0.09% |
| 2017 | 30,405 | −0.54% | −0.07% |
| 2018 | 35,763 | −3.55% | −0.48% |
| 2019 | 40,511 | +2.02% | −0.11% |
| 2020 | 43,230 | +1.43% | +0.41% |
| 2021 | 47,448 | +2.07% | +0.07% |
| 2022 | 52,004 | −0.30% | −0.19% |
| 2023 | 60,880 | −0.26% | −0.11% |
| 2024 | 59,291 | +2.00% | −0.15% |
| 2025 | 68,535 | +3.73% | −0.06% |
| 2026 | 49,862 | −0.46% | −0.58% |
11 年里只有 2020、2021 两年超额为正,扣掉成本后只剩 2020 年。
按大盘牛熊分(沪深 300 在年线上方为牛市,下方为熊市):
| 市况 | 信号次数 | 20 天收益 | 20 天超额 |
|---|---|---|---|
| 牛市 | 281,819 | +0.69% | −0.05% |
| 熊市 | 235,031 | +1.26% | −0.20% |
两种市况下都跑输。
三、青柠数据实验 2:用均线看大盘
个股上不灵,换个用法:用均线判断沪深 300 指数的大方向,收盘站上 N 日均线就第二天持有指数,跌破就空仓,每次换仓扣 0.075%。
| 做法 | 总收益 | 年化 | 最大回撤 | 换仓次数 |
|---|---|---|---|---|
| 买入持有 | +14.84% | +1.29% | −45.60% | 1 |
| 站上 MA20 | −20.53% | −2.11% | −40.82% | 314 |
| 站上 MA60 | +15.31% | +1.33% | −27.92% | 154 |
| 站上 MA120 | +26.25% | +2.19% | −34.56% | 110 |
| 站上 MA250 | +28.59% | +2.36% | −28.58% | 52 |
这次结果反过来了:周期越长越好。 年线择时 10 年只换仓 52 次,总收益比买入持有多一倍,最大回撤少了 17 个百分点。20 日线换仓 314 次,来回打脸加上成本,10 年亏了两成。
为什么个股上没用、指数上有用?指数是几百只股票的平均,个股的随机波动被抵消,剩下的更多是整体趋势;而且长均线在 2018 年、2022 年这种持续下跌里能让你早早离场。
但要说清楚:这段时间沪深 300 有一次长达三年半的下跌(2021 年 2 月到 2024 年 9 月),年线择时正好躲过了大部分。海外研究也发现,200 日均线择时主要作用是降低回撤,收益优势并不稳定(Northstar)。它是风险控制工具,不是赚钱机器。
四、参数怎么选
| 用途 | 建议 | 原因 |
|---|---|---|
| 选个股买点 | 不建议单独用 | 所有周期都跑输全市场 |
| 判断大盘方向 | 120 或 250 日 | 换仓少、回撤控制好 |
| 作为其他策略的过滤条件 | 大盘站上年线才开仓 | 第 53 课会专门检验 |
五、常见误区
「股价站上均线就是走强,该买」
全 A 数据里,站在均线上方的股票之后 20 天反而跑输。
「上穿年线是重大突破」
上穿年线的 20 天超额是 −0.34%,六个周期里最差。
「短均线反应快,更好」
在指数上,20 日线换仓 314 次,10 年亏 20.5%。反应快也意味着假信号多。
「年线择时能多赚」
本段数据里多赚了,但主要是躲过了一次大跌。它的稳定作用是少亏。
在青柠中实操
- 1. 打开 量化策略 → + 新建策略,从 指标 拖入 MA,周期填 250。
- 2. 在 条件 里用 金叉/上穿 表示「收盘价上穿 MA250」作入场,死叉/下穿 作离场。
- 3. 回测标的选沪深 300 相关的指数基金或成分股,对比买入持有。
- 4. 把周期改成 20、60、120 各跑一次,看换仓次数和最大回撤怎么变。
- 5. 进阶:在你自己的选股策略里加一条「大盘收盘在年线上方」作为过滤,观察回撤变化。
想看别人怎么用均线,可以去青柠策略市场:
下一课(第 11 课)比较 EMA 和 SMA:均线该算得「快」还是「稳」。
常见问题
MA 和 SMA 是一回事吗?
是的。MA 一般指简单移动平均(SMA),每天权重相同。第 11 课会讲权重不同的 EMA。
为什么第 5 课的年线择时收益和这里略有不同?
第 5 课每次换仓扣 0.1%、数据截止 10 月 9 日;本课扣 0.075%、截止 10 月 12 日。结论一致。
均线用收盘价还是其他价格?
默认用收盘价。用开盘价或最高最低价的平均也可以,差别不大。
上市不满一年的股票怎么算年线?
算不出来。本课只统计至少有 250 根日线的股票。
口径说明
个股实验股票池为全 A 股,排除 ST(按当前名称)和北交所,剔除未复权收盘价低于 3 元、日线不足 250 根的股票,价格后复权;区间 2016-01-04 至 2026-10-12,共 4,931 只股票、2,614 个交易日。上穿定义为前一日收盘不高于前一日均线、当日收盘高于当日均线;信号日收盘确认,次日开盘买入,持有至第 20 个交易日收盘;次日一字涨停视为买不进并剔除。超额收益 = 信号股票收益 − 同日股票池全部股票同口径平均,按笔平均。牛熊按沪深 300 收盘相对其 250 日均线划分。沪深 300 使用指数日线(000300.SH,价格指数,不含分红),收盘站上均线则次日持有,每次换仓扣 0.075%。2026 年为不完整年度。数据由青柠量化回测数据库计算。历史统计不代表未来表现,不构成投资建议。
读到这里,不如自己验证一次
文章里的逻辑,你可以在青柠量化里用真实数据重新跑一遍。免费,零代码。