1. 尾段价格回落识别:分时均价与瞬时价背离初筛

任务拆解:把“感觉在跌”变成可核对的背离清单

尾段回落的第一层识别,不是先算跌幅,而是先回答一个问题:14:30 之后,瞬时价是否持续运行在分时均价下方,并且偏离得足够明显?分时均价(当日累计成交额 ÷ 累计成交量)代表全天成交的平均成本线,瞬时价跌破它并拉开距离,说明尾段新增成交在压低整体持仓成本,是回落初筛的可靠信号。

本例对单个交易日做三件事:取 14:30 之后的分时数据,逐分钟计算背离幅度 D = (P_avg − P) / P_avg × 100%(正值表示瞬时价低于均价),筛出 D ≥ 阈值 的时段,输出时段清单。阈值取 0.30% 作为初筛线,它足够宽松以捕捉真实回落,又足够严格以过滤正常抖动。

计算口径与判定规则

  • P:该分钟收盘瞬时价;P_avg:该分钟的分时均价(累计成交额/累计成交量)。
  • 背离幅度 D:以均价为基准的百分比偏离,正值为价格低于均价。
  • 初筛条件:D ≥ 0.30% 记为“背离时段”;连续背离时段合并为一段,段内最长持续分钟数记为持续时长。
  • 排除项:若某分钟成交量极小(如低于尾段均量的 10%),该分钟背离不计入,避免零星成交造成的假信号。
尾段背离初筛:均价线之上的价格与跌破后的背离幅度 14:30 14:40 14:50 15:00 收盘 价格 分时均价 P_avg 瞬时价 P 背离区 D ≥ 0.30% 背离起点 ≈ 14:47 D = (P_avg − P) / P_avg 阈值 0.30% 连续背离合并为一段 低量分钟不计入

示例数据与逐分钟计算

下表为某交易日 14:30 后的分时片段(示例数据,用于演示计算过程)。均价由累计成交额与累计成交量推算,D 按上式逐分钟计算。

时间瞬时价 P分时均价 P_avg背离 D成交量占比判定
14:3010.4210.430.10%正常—
14:4010.3810.410.29%正常临界
14:4710.3310.370.39%正常背离
14:5210.2810.350.68%正常背离
14:5810.2410.330.87%正常背离
15:0010.2210.320.97%正常背离

按规则合并后,输出清单为:14:47–15:00,持续 13 分钟,最大背离 0.97%,平均背离约 0.73%。14:40 的 0.29% 未达阈值,不进入清单,但可作为“临界观察点”保留,便于次日对比。

可执行的计算脚本

把分时数据整理为 time, price, avg_price, vol_ratio 四列后,用下面脚本直接产出时段清单。脚本自包含,输入为示例列表,替换数据即可复用。

from datetime import datetime

THRESHOLD = 0.30      # 背离阈值 %
MIN_VOL_RATIO = 0.10  # 低量过滤线

bars = [
    ("14:30", 10.42, 10.43, 1.0),
    ("14:40", 10.38, 10.41, 1.0),
    ("14:47", 10.33, 10.37, 1.0),
    ("14:52", 10.28, 10.35, 1.0),
    ("14:58", 10.24, 10.33, 1.0),
    ("15:00", 10.22, 10.32, 1.0),
]

def divergence(p, avg):
    return (avg - p) / avg * 100

segments, cur = [], None
for t, p, avg, vr in bars:
    d = divergence(p, avg)
    hit = d >= THRESHOLD and vr >= MIN_VOL_RATIO
    if hit:
        if cur is None:
            cur = {"start": t, "end": t, "max_d": d, "sum_d": d, "n": 1}
        else:
            cur["end"] = t
            cur["max_d"] = max(cur["max_d"], d)
            cur["sum_d"] += d
            cur["n"] += 1
    elif cur is not None:
        segments.append(cur); cur = None
if cur is not None:
    segments.append(cur)

for s in segments:
    print(f"{s['start']}-{s['end']} 最大背离 {s['max_d']:.2f}% "
          f"平均背离 {s['sum_d']/s['n']:.2f}% 分钟数 {s['n']}")

预期输出:14:47-15:00 最大背离 0.97% 平均背离 0.73% 分钟数 4。若把阈值改为 0.20%,14:40 会被并入,清单起点提前到 14:40,说明阈值选择直接决定初筛灵敏度,需在固定口径下横向比较不同交易日。

初筛清单只回答“是否出现背离”,不回答“跌了多少”。最大背离与持续时长是两个独立维度:短时大背离多为集中抛压,长时小背离多为持续阴跌,两者在后续量化中应分开处理。
分时均价依赖累计成交数据,若数据源在尾段存在延迟或缺失,均价会被拉偏,导致 D 失真。使用前先核对尾段每分钟成交量是否连续,缺失分钟应标记而非插值。