4. 分化规律的数据观察方法

退潮期的分化规律不是靠盯盘“感觉”出来的,而是靠可复现的数据观察得到的。所谓“数据观察方法”,本质是把“退潮期个股表现差异”这一模糊现象,转化为一组可定义、可采集、可计算、可比较的量化对象。本节围绕三个环节展开:先界定样本池的边界,再设计能刻画分化的指标,最后落到数据采集与清洗的具体操作。

一、样本池:先定义“谁被观察”

分化度指标只有在同一口径的样本池上才有意义。退潮期样本池的构建要回答四个问题:时间窗口、股票范围、剔除规则、分组标签。

时间窗口建议以“情绪高点日”为锚点,向后取 5~10 个交易日作为退潮观察期。锚点日的定义要固定,例如“全市场涨停家数连续两日下降且炸板率上升的首日”,或直接采用某个情绪指数的高点日。锚点一旦确定,全样本共用,避免不同个股用不同起点导致不可比。

股票范围建议取锚点日前一交易日“有涨停或涨幅≥7%”的个股,加上“近 20 日曾涨停”的活跃股,构成候选池。这样做的理由是:退潮期分化主要发生在前期强势股内部,弱势股本身缺乏分化空间。

剔除规则必须写死在采集脚本里:剔除锚点日后连续停牌超过 2 日的个股、剔除观察期内发生重大资产重组或退市风险警示的个股、剔除上市不足 60 日的新股。剔除记录要单独留存,便于复核。

分组标签是后续对比的基础。常用分组维度包括:锚点日前 20 日累计涨幅(高/中/低三档)、锚点日是否为首板/连板(连板高度)、所属板块(主线/支线/独立题材)、流通市值(大/中/小)。分组标签在样本池建立时一次性打上,后续指标计算按组聚合。

二、分化度指标:把“分化”拆成可计算的量

分化度至少需要两类指标:一类刻画“涨跌幅的离散程度”,一类刻画“资金流的方向差异”。

涨跌幅离散度。最直接的是观察期内每日收益率的横截面标准差。设第 t 日样本池内个股收益率为 ri,t,样本数为 N,则当日离散度 σt = sqrt( Σ(ri,t − r̄t)² / (N−1) )。σt 越大,说明当日个股表现越分散。但标准差对极端值敏感,建议同时计算分位数差:Dt = P90(rt) − P10(rt),即当日收益率 90 分位与 10 分位之差,它更稳健地反映“头部与尾部拉开多远”。

还需要一个“累计分化”指标:观察期末,统计样本池内累计收益率排名前 20% 与后 20% 的均值差,记为累计分化幅度。这个值回答的是“退潮走完,强弱差距拉到了多少”。

资金流分化。用主力净流入额占成交额的比例(净流入率)作为个股资金流强度,记为 fi,t。资金流分化度可用两种方式度量:一是横截面标准差,二是“资金流方向一致性”,即净流入为正的个股占比 pt。pt 接近 0.5 说明资金分歧最大,接近 1 或 0 说明资金一致流入或一致流出。把 pt 与 σt 放在同一时间轴上,往往能看到“先分歧、后收敛”的退潮节奏。

此外建议加一个“分化持续性”指标:连续 3 日收益率排名前 30% 的个股,在第 4 日仍留在前 30% 的比例。这个比例越高,说明分化越有结构、越可跟踪;比例接近随机水平,说明分化只是噪声。

退潮期分化度数据观察链路 样本池构建 锚点日 + 5~10 日窗口 前期强势股候选 停牌/新股/重组剔除 涨幅/连板/板块/市值分组 采集与清洗 日线行情 + 资金流字段 复权对齐、缺失值处理 异常值截尾(±20%) 剔除记录单独留存 分化度指标 σₜ 横截面标准差 Dₜ = P90 − P10 资金流分化 pₜ / σ(f) 累计分化幅度、持续性 结果判读 分化是否放大 资金是否分歧 强弱是否可跟踪 分组差异是否显著 观察期指标走势示意(示例数据,非实测) 锚点日 T+2 T+4 T+6 T+8 涨跌幅离散度 σₜ 资金流一致性 pₜ 读图要点:σₜ 先升后降、pₜ 在 0.5 附近停留最久,通常对应“分歧最大、分化最剧烈”的阶段

三、数据采集与清洗实战

采集环节的关键是“字段口径统一”。以日频为例,至少需要以下字段:交易日、股票代码、开盘/收盘价(后复权)、涨跌幅、成交额、换手率、主力净流入额、流通市值、所属行业。主力净流入额的口径各数据源不同,必须在样本池建立时固定一个来源,并在元数据中记录来源与口径,避免中途换源导致指标跳变。

清洗的第一步是复权对齐。若用不复权价格计算收益率,除权日会出现虚假大跌,直接污染离散度。统一采用后复权收盘价计算日收益率:ri,t = Pi,t / Pi,t−1 − 1。第二步是缺失值处理:停牌日不参与当日横截面计算,但要在样本数 N 中如实反映;若某日有效样本数低于候选池的 70%,该日指标标记为“样本不足”,不纳入趋势判断。第三步是异常值处理:对单日收益率做 ±20% 截尾(仅用于计算离散度,不修改原始数据),防止个别极端值把 σt 拉偏。

下面是一段可直接改造使用的 Python 清洗与指标计算骨架,示例参数均为教学假设:

import pandas as pd, numpy as np

# df: 列含 date, code, close_adj, pct_chg, net_inflow, amount, group
df = df.sort_values(["code", "date"])
df["ret"] = df.groupby("code")["close_adj"].pct_change()

# 单日横截面指标
def daily_metrics(g):
    r = g["ret"].dropna()
    f = (g["net_inflow"] / g["amount"]).dropna()
    return pd.Series({
        "N": len(r),
        "sigma": r.std(ddof=1),
        "p90_p10": r.quantile(0.9) - r.quantile(0.1),
        "p_inflow": (f > 0).mean(),
        "f_sigma": f.std(ddof=1)
    })

metrics = df.groupby("date").apply(daily_metrics).reset_index()
metrics["valid"] = metrics["N"] >= 0.7 * candidate_n

计算完成后,先看指标序列的形态,再看分组差异。一个实用的判读顺序是:先确认 σt 与 Dt 是否同向放大(同向说明分化是普遍的,而非个别极端值造成);再看 pt 是否在 0.4~0.6 区间停留较久(停留越久,资金分歧越充分);最后按分组标签聚合累计分化幅度,比较“高涨幅组 vs 低涨幅组”“连板组 vs 首板组”的差距是否拉开。若高涨幅组的累计分化幅度显著大于低涨幅组,说明退潮期的分化主要发生在前期强势股内部,这与“强者补跌、弱者钝化”的常见结构相互印证。

样本池、字段口径、剔除规则、指标公式应固化为一套可重复执行的脚本与元数据说明。每次观察只改变时间窗口与分组标签,不改变计算口径,这样不同退潮期之间才具备可比性。
分化度指标是描述性工具,不是预测工具。σt 放大只说明当日表现分散,不能直接推出“次日继续分化”。指标必须与样本数、有效样本比例、分组样本量一起看,分组样本量过小(例如少于 8 只)时,组内均值差不宜作为结论。