看懂 K 线
K 线不是玄学符号,是 OHLC 时间序列的可视化——学会读图,同时认清技术分析的边界。
4.1 一根蜡烛,就是一次 GROUP BY
打开任何一个行情软件,满屏红红绿绿的小蜡烛会让人以为里面藏着什么密码。没有。K 线图是一次聚合查询的可视化结果,聚合函数只有四个:第一个、最大、最小、最后一个。
交易所撮合出的原始数据是一条 tick 流:每一笔成交的时间、价格、数量。把这条流按时间窗口分桶,每个桶里算四个数,就得到了一根 K 线:
SELECT
time_bucket('1 day', ts) AS bar,
first(price ORDER BY ts) AS open, -- 开盘价
max(price) AS high, -- 最高价
min(price) AS low, -- 最低价
last(price ORDER BY ts) AS close, -- 收盘价
sum(qty) AS volume -- 成交量
FROM ticks
GROUP BY bar;
画出来的时候,规则同样只有三条:
- 实体是开盘价到收盘价之间的矩形,高度 =
|close − open| - 上影线是实体顶端到最高价的那根细线,长度 =
high − max(open, close) - 下影线是实体底端到最低价的细线,长度 =
min(open, close) − low
颜色只表示一件事:close − open 的符号。A 股的习惯是红涨绿跌,和美股、欧洲市场的绿涨红跌正好相反。这是文化差异不是技术差异,红色在中国是喜庆色。同时看 A 股和美股,或者用 TradingView 这类国际软件时,第一件事是确认当前配色,否则会把满屏上涨读成暴跌。
图 4-1 · 一根 K 线的解剖:同一组 OHLC,只换开收顺序
图 4-1 里藏着两个容易被忽略的结论。
第一,颜色不编码涨跌幅。一根小小的红色实体,可能是全天从 −9% 一路拉回到 +0.1% 收盘;一根粗大的绿色实体,可能是开盘跳空高开 5% 然后回落到 +1%,全天其实是涨的。「今天几根红几根绿」这类统计信息量极低。真正表示涨跌幅的是今日收盘相对昨日收盘的百分比,而昨收这个数根本没画在这根蜡烛上。
第二,K 线是有损压缩。同一组 {open, high, low, close} 背后可以对应无数条日内路径:先冲高再砸下来、先砸下去再拉起来、全天窄幅震荡最后一分钟拉升,画出来可能是同一根蜡烛。所有「这根 K 线说明主力在洗盘」的解读,都是在对已经丢掉的信息做想象。
GROUP BY 时间窗口后的 OHLC 聚合,切换周期就是改 window size。而且这是有损聚合——就像监控系统里只保留每分钟的 min / max / first / last,你永远无法从这四个数还原出原始曲线的形状。区别在于,没人会盯着 CPU 使用率的 p99 折线图去预测下周的流量,但很多人会盯着 K 线做这件事。
4.2 周期就是 window size
同一段行情,换个聚合粒度就是另一张图。A 股一个交易日 4 小时,等于 240 分钟,所以一天可以切成 240 根 1 分钟线、48 根 5 分钟线,或者聚合成 1 根日线;5 根日线合成 1 根周线(遇上节假日不足 5 天也算 1 根),大约 21 根日线合成 1 根月线。
图 4-2 · 同一段行情的四种聚合粒度
图 4-2 值得盯着多看一会儿。同一只股票、同一段数据,在月线上你会说「这是一轮大牛市」,在周线上你会说「明显在跌」,在 5 分钟线上你只会说「一片混乱」。这三句话没有一句是错的,它们回答的是不同时间尺度上的问题。
所以不存在「更准」的周期,只存在和你持有期匹配的周期。如果你打算持有三年,5 分钟线对你就是纯噪声输入;如果你要做的是长期定投(第 7 章),你连日线都不需要看。
这背后有一个干净的数学理由。把价格近似看成带漂移的随机游走,那么在时间跨度 t 上,趋势带来的价格变化正比于 t,而波动带来的噪声正比于 √t。信噪比因此正比于 t / √t = √t。周期从日线放大到月线,跨度乘以 21,信噪比只提高约 4.6 倍——但换来的好处是,你的决策次数少了 20 倍,而每次决策都要付出真金白银的成本(第 3 章算过,一买一卖约千分之一)。
4.3 成交量:这次价格变动的置信度
成交量是那根蜡烛对应时间窗口内成交的股数,A 股常以「手」计(1 手 = 100 股);成交额则是金额。行情软件一般把它画成 K 线下方的柱状图,柱子颜色跟随当根 K 线的红绿。
价量关系不是定律,而是一个常识性的先验:成交量是这次价格变动的样本量。
| 形态 | 字面含义 | 合理的解读边界 |
|---|---|---|
| 放量上涨 | 价格涨,成交量显著高于近期均值 | 有大量资金真金白银换手,这个新价格被更多人认可 |
| 缩量上涨 | 价格涨,成交量萎缩 | 只有少量筹码在换手,价格容易被小单推动,代表性弱 |
| 放量滞涨 / 放量下跌 | 成交量放大但价格不涨或下跌 | 买卖双方分歧加大,有人在大举离场 |
| 缩量阴跌 | 价格阴跌,成交量低迷 | 卖压不重,但也没人愿意接,属于无人关注状态 |
注意这张表的第三列写的是「解读」不是「预测」。放量上涨之后既可能继续涨也可能见顶,成交量能告诉你的是这次定价的参与人数,不是下一步方向。
n。有人告诉你 A/B 实验转化率提升了 20%,你的第一个问题一定是样本量多少——3 万人的实验和 30 人的实验是两回事。看 K 线时该问同一个问题:这根阳线是几十亿成交额堆出来的,还是几百万就把它推上去的。
比较不同股票时,绝对成交量没有可比性,要看换手率 = 成交量 ÷ 流通股本。一只流通盘几十亿股的银行股成交 1 亿股是缩量,一只流通盘 1 亿股的小盘股成交 1 亿股是全天筹码换了一遍。
4.4 均线:一个天生滞后的滤波器
MA5 就是最近 5 个收盘价的算术平均,MA20 是最近 20 个。写成代码没有任何悬念:
def ma(close, n):
"""长度为 n 的滑动窗口平均,每个 tap 权重都是 1/n"""
return [sum(close[i-n+1 : i+1]) / n for i in range(n-1, len(close))]
这是一个 FIR 低通滤波器。EMA(指数移动平均)则是把权重改成按 α(1−α)^k 指数衰减,也就是一阶 IIR 低通——和 TCP 里估算 RTT 的 SRTT 平滑公式、和指数退避,是同一个数学形状。
既然是低通滤波,滞后就是它的数学性质,不是可以调掉的 bug。一个 n 日简单均线对线性趋势的响应大约滞后 (n−1)/2 天:MA20 滞后约两周,MA60 滞后约一个半月。
| 均线 | 窗口长度 | 覆盖时间 | 大致滞后 |
|---|---|---|---|
MA5 | 5 个收盘价 | 约 1 周 | 约 2 天 |
MA20 | 20 个收盘价 | 约 1 个月 | 约 10 天 |
MA60 | 60 个收盘价 | 约 1 个季度 | 约 1 个半月 |
MA250 | 250 个收盘价 | 约 1 年(A 股一年约 242~244 个交易日,也有人用 MA240) | 约半年 |
口语里这几条均线常被叫成「周线」「月线」「年线」,和 4.2 节讲的周 K 线、月 K 线完全是两回事——前者是画在日线图上的一条平滑曲线,后者是换了聚合周期的另一张图。听别人讲盘时要看上下文,这是个高频的沟通误会。
金叉是快线上穿慢线,死叉是快线下穿慢线。剥掉话术,它的定义就是:最近 5 天的均价刚刚超过最近 20 天的均价。这是一个关于已经发生的事的陈述——等到 MA5 穿过 MA20,那波上涨早就走完一段了。
这不算缺点。趋势跟踪本来就是「放弃头部和底部,赚中间那一段」的交易方式,滞后是它为了过滤噪声主动付出的代价。它真正的问题在震荡市:价格来回穿越均线,你被反复触发买卖,每次都在高点买、低点卖,成本一层层叠加。
4.5 常见形态:市场语言,不是预测函数
有几个形态值得认识,因为它们是行情讨论里的通用词汇,你需要听得懂:
- 十字星(doji):开盘价约等于收盘价,实体极小、上下影线较长。含义是多空力量接近、全天来回拉锯,它描述的是分歧,不含方向。
- 长上影线:冲高之后回落,说明在那个高价位有明确的卖压。
- 长下影线:探底之后回升,说明在那个低价位有人接。
- 跳空缺口:今天的最低价高于昨天的最高价(向上跳空),或者反过来。A 股在 9:15–9:25 的集合竞价阶段就可能直接跳开,K 线上留下一段没有成交的空白。
关于缺口有个必须分清的坑:K 线图上的缺口,很多根本不是市场行为,而是除权除息造成的技术性断层——公司分红那天股价被机械地扣掉一块。这类缺口会被复权抹平,4.7 节详细讲。把除息缺口当成「跳空下跌」来解读,是新手最常见的误读之一。
以上解读全都是对已发生事实的描述。「今天冲高回落」是一句有效的信息交流,「出现长上影线所以明天会跌」则是另一回事。任何把形态包装成预测函数的说法,都要先问三个问题:样本量多大、有没有对「你一共试了多少种形态」做统计校正、扣掉交易成本之后还剩多少。下一节就来算这笔账。
4.6 为什么「战法」在你手里会失效
这是本章最重要的一节。技术分析预测未来的能力很弱,这个结论有三层理由,从弱到强。
第一层,有效市场的挤出。如果某个形态真有稳定的预测力,机构的程序会以毫秒级把它套利掉,直到这个信号消失。你在手机上肉眼看到的形态,专业团队早就用全市场几十年的数据扫过无数遍了。你能想到的,不太可能是别人没想到的。
第二层,数据窥探与多重检验。Sullivan、Timmermann 和 White 在 1999 年《Journal of Finance》上用 White 的 Reality Check 自助法,检验了近 100 年道琼斯工业指数日线上的近 8000 条技术交易规则。结论是:一旦对「你一共试了多少条规则」做出统计校正,最好那条规则的超额收益就不再显著;而且把它拿到随后 10 年的样本外去交易,优势没有延续。
第三层,交易成本。Bajgrowicz 和 Scaillet 在 2012 年《Journal of Financial Economics》上用错误发现率(FDR)方法重做了 1897–2011 年道指上的 7846 条规则,结论更狠两句:持续性检验表明投资者事前根本无法挑出未来表现最好的规则;而且即便只看样本内,很低的交易成本就足以把超额收益完全抹平。
这些都是别人的研究。我自己做了一个更直白的实验,你可以在几十行代码里复现它。
我用随机数生成了 500 段价格序列——按构造,这些序列里不含任何规律,未来的涨跌与过去完全独立。对每一段,我在前 80 个交易日上用 36 组均线参数(快线取 3~15,慢线取 20~60)做网格搜索,选出样本内收益最高的那一组,然后把这组参数原封不动用到后 80 个交易日上。结果是:
- 样本内:500 次里有 402 次(80%)「最优参数」跑赢买入持有,平均超额 +8.4 个百分点。
- 样本外:只有 223 次(45%)跑赢,平均超额 −0.6 个百分点。而这还没扣任何交易成本。
45% 这个数字很关键:在纯噪声上,样本外的胜率就是掷硬币,甚至略低于掷硬币。而样本内那个漂亮的 80% 和 +8.4 个百分点,完全是搜索参数这个动作本身制造出来的。只要你试的参数够多,漂亮的回测是必然产物,不是发现。
图 4-3 · 一次教科书式的过拟合
顺带说一句:这张图是我从 500 段随机序列里挑出对比最鲜明的一段画的。这个挑选动作本身就是数据窥探——和「战法」课程里那些精准标注的案例图,是同一种操作。差别只是我在这里告诉了你,而他们不会。
4.7 复权:不做这一步,你看到的历史是错的
假设一家公司 10 派 5(每 10 股派 5 元现金,税前),股价 30.00 元。除息日当天,交易所会把开盘参考价直接下调到 29.50。这不是下跌——那 0.50 元从公司账上转到了你的账户里,你的总资产没有变化。送股转股同理:10 转 10 之后股价直接腰斩,但你手里的股数翻倍。
如果不处理这件事,K 线图上就会留下一连串向下的技术性缺口。一只十年涨了十倍、年年高分红的公司,不复权的走势图可能看起来「十年没怎么涨」。所有基于价格的计算——长期收益率、均线、历史高低点、当前位置判断——全部失真。
| 模式 | 做法 | 特点 | 什么时候用 |
|---|---|---|---|
| 不复权 | 直接显示交易所的历史成交价 | 除权日留有缺口;每个价格都是当年真实成交价 | 想知道「当年真的是多少钱成交的」 |
| 前复权 | 以最新价为基准,把历史价格向下调整 | 当前价与真实盘口一致;历史价低于当年真实价,长期高分红股甚至可能出现负值 | 看长期走势、算均线、判断当前位置(软件默认,也是日常首选) |
| 后复权 | 以上市首日为基准,把后续价格向上调整 | 历史价格固定不变;当前显示价高于真实盘口价 | 做长期回测、算累计收益率 |
4.8 行情软件里实际怎么用
把上面的东西落到操作上,第一次打开行情软件只需要做四件事:
- 把复权设成前复权。在 K 线图上长按或右键就有切换入口。这是唯一一个不设就会让你看错图的选项。
- 周期切到日线或周线,然后别再切回去。把 1 分钟、5 分钟线当成给做市和高频用的东西,跟你无关。
- 自选股当 watchlist 用,不是当心电图看。它的价值是降低你重复搜索的成本,不是提供每天盯盘的理由。
- 找到 F10。券商 App 和行情软件的个股页面里都有「F10」或「资料」入口,里面是公司简介、主营构成、股东户数、财务摘要、分红送配历史、限售股解禁时间表。这是你验证任何一条「消息」的第一站——第 5、6 章要用的数据基本都在这里。
至于条件选股 / 选股器:用它按市值、PE、PB、ROE、行业做基本面初筛是合理的(第 6 章会给具体的筛法);用它扫「出现 XX 形态的股票」,就是在把 4.6 节讲的过拟合自动化——搜索空间更大,假发现更多。
本章的结论可以压缩成一句话:K 线只能告诉你三件事——现在的价格位置、最近的波动幅度、市场的关注度(成交量)。这三件事对判断「现在贵不贵」有一点用,对预测「明天涨不涨」没有用。判断贵不贵需要一个锚,那个锚不在价格图里,而在公司的经营数据里。下一章开始看财报。