均线多头排列 + 放量:写成一条完整的、可回测的买入规则

均线多头排列本身只是"趋势已经向上"的一句描述,不是买入规则。要把它变成一条能回测、能每天机械执行的规则,你要补上三样东西:一个放量确认(当日成交量是 20 日均量的 1.5 倍以上)、一个"别追太高"的守门条件(股价在 20 日线上方 8% 以内,RSI 低于 70),以及一条写在买入之前的退出规则(收盘跌破 20 日线,或浮亏超过 6%)。

本文要点

  • 多头排列指短期均线在中期之上、中期在长期之上、股价在均线之上,例如 MA5 > MA20 > MA50 且价格 > MA20。它确认趋势方向,不给入场时点。
  • 只用排列,信号"又晚又多":均线滞后,排列成立时往往已经涨了一段;排列一旦成立会连续成立,等于每天都在提示买入。
  • 放量确认(vol_vs_avg20d > 1.5)把"天天成立"压缩成"少数几天成立",并要求有真实资金参与。
  • 守门条件(price_vs_ma20 < 8、rsi < 70)剔除已经拉伸过头、止损距离过大的入场。
  • 退出必须和买入一起写:跌破 20 日线(price_vs_ma20 < 0)或浮亏超过 6%(floating_loss_pct > 6),先到先走。

多头排列在说什么,为什么不够

均线是过去 N 天收盘价的平均:MA5 约一周,MA20 约一个月,MA50 约一个季度。MA5 > MA20 > MA50 且股价在 MA20 之上,意思是近期买入者的平均成本高于一个月前的,一个月前的又高于一个季度前的——市场在持续用更高的价格接货。它描述的是状态,不是变化:告诉你"现在是上升趋势",不告诉你"现在是好的上车点"。

单独使用有两个问题。

:均线滞后。MA20 越过 MA50 时,价格通常已从低点涨了 10%–20%。你买的是趋势中段而不是开头,这没错,但止损距离比想象的远、剩余空间比想象的小。

:排列是持续状态,一只股票可能连续 30、60 个交易日都满足。如果买入规则只有"排列成立",扫描器每天都会列出它。你要么每天买一点(那是定投),要么凭感觉挑一天(规则失去意义)。回测里这类规则通常表现为交易次数极多、单笔收益极薄,手续费吃掉大半。

所以排列缺的是一个"触发事件",把连续状态变成离散的入场点。

加一个放量确认

成交量是最简单的触发事件。要求 vol_vs_avg20d 大于 1.5,即当日成交量至少是 20 日均量的 1.5 倍。

它做两件事。第一,在一段多头排列里,放量到 1.5 倍以上的日子只占少数,触发频率立刻下降。第二,它要求真实资金参与:缩量上涨可能只是没人卖,放量上涨说明有人愿意在这个价位大额买入,后者更可能延续。

阈值取 1.5 是折中。太低(1.2)几乎不过滤;太高(3)只剩消息驱动的极端日子,而那正是追高的陷阱。回测时可在 1.3–2.0 之间试。

加一个"没有拉伸过头"的守门

放量日有两种:趋势中段的加速,和趋势末端的最后一冲。区分它们最可靠的办法是看股价离均线多远。

price_vs_ma20 < 8:股价在 MA20 上方不超过 8%。你的退出是跌破 MA20,如果买入时已在 MA20 上方 15%,止损距离就是 15%。把入场限制在 8% 以内,等于把最大理论止损锁在 8% 附近,才能和下面 6% 的浮亏保护配合。

rsi < 70:14 日 RSI 超过 70 通常意味着最近两周涨得过急,此时的放量更可能是最后一批人涌入。它和 price_vs_ma20 有重叠,但看的周期不同,两者一起更稳。

再加一个大盘过滤:market_index_vs_ma50_pct > 0,要求所在市场指数在自己的 50 日线之上。个股多头排列在大盘下跌时失败率明显更高,这一条直接剔除逆大盘的信号。

退出规则:买之前就写好

退出有两个出口,谁先触发谁生效:

  • price_vs_ma20 < 0:收盘跌破 20 日线。多头排列的逻辑就是"股价在 MA20 之上",一旦跌破,买入理由就消失了。
  • floating_loss_pct > 6:浮亏超过 6%。这是保险丝,防止 MA20 离得较远或跳空时亏损失控。

两条是 OR 关系,要分别放在两个条件组里。误写成 AND 就变成"既要跌破 20 日线又要亏超 6% 才走",大部分时候会晚很多。止损为什么要写在买入之前、为什么难执行,见止损为什么做不到

大盘股和小盘股,同一条规则表现不同

规则里的每个数字都隐含了一个波动率假设。

跟随指数的大盘股(港股大型银行、美股大型科技):日均波动多在 1%–2%,股价与 MA20 的距离通常在 ±5% 以内。1.5 倍放量是有含义的事件,6% 浮亏保护约等于 3–4 天正常波动,不易被噪音扫出。规则基本可以原样用。

波动大的小盘股:日均波动 4%–5% 很常见。三个问题:1.5 倍放量几乎每周都有,阈值可能要提到 2.0 以上;6% 浮亏只相当于一天多的正常波动,可能要放宽到 10% 并相应缩小仓位;price_vs_ma20 < 8 反而太严,这类股票在健康趋势中也常在 MA20 上方 10% 以上运行。

结论:先看这只股票的 atr14_pct,再决定用哪组数字。仓位跟着止损距离反推,方法见仓位管理

一个完整的例子(示例数据)

假设一只港股大盘股,以下数字均为示例,不对应任何真实股票。

项目数值
当日收盘价52.80
MA5 / MA20 / MA5051.90 / 50.20 / 47.60
price_vs_ma20+5.2%
当日成交量 / 20 日均量2,800 万股 / 1,600 万股 → vol_vs_avg20d = 1.75
RSI(14)63
恒指相对 MA50+2.4%

逐条核对:MA5 > MA20 > MA50 成立;股价在 MA20 上方 5.2%,在 0 到 8 之间;成交量 1.75 倍;RSI 63;大盘在 50 日线之上。七个条件全部满足,当天出现买入信号。

买入价 52.80,两条退出线同时生效:MA20 在 50.20,跌破约 -4.9%;6% 浮亏保护在 49.63。当前起作用的是 MA20 这条,它会随均线上移而抬高。

一个对照:晚两天,股价 55.00,MA20 上移到 50.60,price_vs_ma20 = +8.7%。排列和放量可能都还成立,但守门条件不通过,规则不发信号。同一波上涨,晚两天入场,止损距离从 4.9% 变成 8.7%,这正是它要防的。

再往后(仍是示例):八个交易日后股价 57.10,浮盈 8.1%,MA20 抬到 51.40。随后回调,某天收于 50.90 而 MA20 已升至 52.00,price_vs_ma20 = -2.1%,触发退出,单笔结果约 -3.6%。这笔没赚钱,但亏损在规则事先设定的范围内——"完整规则"不承诺每次都对,只承诺每次结果都在你事先接受的范围里。

在 Stock Compass 里怎么设

下面是完整的买入 + 退出策略,可以直接粘贴。Stock Compass 不连接券商、不下单,只是每天用这些条件扫描你自己的股票池,列出满足条件的股票。

{
  "name": "均线多头排列 + 放量",
  "market": "hk",
  "rules": {
    "buy": {
      "v": 2,
      "outerOp": "OR",
      "groups": [
        {
          "innerOp": "AND",
          "conditions": [
            { "indicator": "ma5_above_ma20", "operator": "==", "value": 1 },
            { "indicator": "ma20_above_ma50", "operator": "==", "value": 1 },
            { "indicator": "price_vs_ma20", "operator": ">", "value": 0 },
            { "indicator": "price_vs_ma20", "operator": "<", "value": 8 },
            { "indicator": "vol_vs_avg20d", "operator": ">", "value": 1.5 },
            { "indicator": "rsi", "operator": "<", "value": 70 },
            { "indicator": "market_index_vs_ma50_pct", "operator": ">", "value": 0 }
          ]
        }
      ]
    },
    "add": { "v": 2, "outerOp": "OR", "groups": [] },
    "trim": { "v": 2, "outerOp": "OR", "groups": [] },
    "exit": {
      "v": 2,
      "outerOp": "OR",
      "groups": [
        {
          "innerOp": "AND",
          "conditions": [
            { "indicator": "price_vs_ma20", "operator": "<", "value": 0 }
          ]
        },
        {
          "innerOp": "AND",
          "conditions": [
            { "indicator": "floating_loss_pct", "operator": ">", "value": 6 }
          ]
        }
      ]
    }
  }
}

每一条的含义:

  • ma5_above_ma20 == 1:5 日线在 20 日线之上(布尔量用 == 1)。
  • ma20_above_ma50 == 1:20 日线在 50 日线之上。两条合起来就是 MA5 > MA20 > MA50。
  • price_vs_ma20 > 0:收盘价在 20 日线上方。
  • price_vs_ma20 < 8:但不超过 20 日线上方 8%,防止追高。
  • vol_vs_avg20d > 1.5:当日成交量超过 20 日均量的 1.5 倍。
  • rsi < 70:14 日 RSI 未进入超买区。
  • market_index_vs_ma50_pct > 0:所在市场指数在其 50 日线之上。
  • 退出组一 price_vs_ma20 < 0:收盘跌破 20 日线。
  • 退出组二 floating_loss_pct > 6:浮亏超过 6%。两组之间是 OR,任一成立即退出。

设好后先回测:看交易次数、胜率、平均盈亏和最大回撤,再决定要不要调阈值。

常见错误

  • 把排列本身当信号:没有放量触发,规则每天都在响,回测里表现为交易次数极多、单笔收益极薄。
  • 两条退出写成 AND:应为两个独立条件组(OR)。写成 AND 会让退出严重滞后。
  • 忘记守门条件:在 MA20 上方 15% 处放量入场,止损距离一开始就超出预算。
  • 一套参数套所有股票:小盘股要用更高的放量阈值、更宽的止损和更小的仓位。
  • 只数买入信号,不看退出执行:规则的价值一半在退出上,回测和实盘都要盯住"是否按规则退出"。

小结

均线多头排列描述的是趋势状态,不是入场时点。要把它变成完整的买入规则,补上三件事:放量触发(vol_vs_avg20d > 1.5),让信号从连续变离散;守门条件(price_vs_ma20 < 8、rsi < 70、大盘在 50 日线上),剔除拉伸过头和逆大盘的入场;两条 OR 关系的退出(跌破 MA20 或浮亏超 6%)。数字不是圣旨,大盘股可以原样用,小盘股要按波动率调,但每个数字都要写下来、回测过、每天机械执行。想看更多把口头逻辑翻译成条件的例子,见把逻辑写成买入规则

常见问题

多头排列该用哪几条均线?

MA5、MA20、MA50 是日线上常见的一组,分别对应约一周、一个月、一个季度。Stock Compass 提供 ma5_above_ma20、ma10_above_ma20、ma20_above_ma30、ma20_above_ma50 几个布尔指标,你也可以组成 MA10 > MA20 > MA30 这样更短周期的版本。无论选哪组,退出规则要用同一组均线,保证买入和退出描述的是同一个趋势。

为什么放量阈值是 20 日均量的 1.5 倍,而不是别的数?

1.5 是起点,不是定律。低于 1.2 左右几乎过滤不掉什么;高于 3 左右只剩下消息驱动的极端日子,而那往往是最不该入场的时候。对大多数大盘股,1.5 倍已经是一个明显比平时活跃的交易日。对波动大的小盘股,1.5 倍几乎每周都会出现,可以在回测里试 2.0 或更高。

退出一定要同时设跌破 MA20 和浮亏 6% 两条吗?

要,而且要分成两个独立的 OR 条件组。跌破 MA20 这条跟着趋势走,均线上移它就跟着抬高;6% 浮亏是固定的保险丝,专门应付 MA20 离买入价较远、或隔夜跳空的情况。大部分交易会先触发 MA20 那条。如果写成一个 AND 组,规则会等两条都成立才退出,通常意味着更大的亏损。

这条规则可以直接用在美股和 A 股上吗?

指标 id 在各个市场是一样的,只需改 market 字段,market_index_vs_ma50_pct 背后对应的指数也会随之切换。实际不同的是波动率和交易成本:换市场前先看每只股票的 atr14_pct,再决定浮亏阈值;A 股还有涨跌停限制,可能让退出实际成交价比规则触发的位置更差。

规则触发后 Stock Compass 会帮我买入吗?

不会。Stock Compass 不连接券商,也不下单。它只是每天用你保存的条件扫描你自己的股票池,列出今天满足买入条件的股票,以及持仓里触发了退出条件的股票。要不要动手、买多少,仍然由你决定——仓位怎么定,另有一篇指南专门讲。