11、时间与销售(Time & Sales)分析:逐笔成交数据解析
时间与销售,圈里人常叫它 T&S 或者逐笔成交。说白了,就是交易所把每一笔真实的成交记录甩给你看。我刚开始做量化那会儿,觉得这东西不就是个流水账嘛,后来才发现——这里面藏着太多秘密了。
你想想看,K线是啥?是人家加工过的数据。一分钟里到底发生了多少笔交易?每笔多大?谁在主动买?这些细节,K线根本不会告诉你。而 T&S 就是最原始的底稿。
逐笔成交数据的结构
一份标准的 T&S 数据,通常包含这几个字段:
| 字段 | 含义 | 我的用法 |
|---|---|---|
| 时间戳 | 精确到毫秒甚至微秒 | 用来对齐其他数据源 |
| 成交价 | 这笔交易的实际价格 | 判断价格跳变是否异常 |
| 成交量 | 这笔交易的手数/股数 | 区分大单小单的核心依据 |
| 成交额 | 价×量 | 算资金流向时用 |
| 买卖方向 | 主动买/主动卖/未知 | 判断谁在主导行情 |
嗯,这里要注意——不同交易所给的字段名可能不一样。比如上交所叫“成交编号”,深交所叫“成交序号”。我踩过这个坑,写代码时没做映射,结果回测数据全对不上。
Tick 级别的交易特征
什么叫 Tick 级别?就是每一笔成交都算一个 Tick。我习惯把 Tick 数据分成三类特征来分析:
- 价格特征:这笔成交是向上跳还是向下跳?跳了多少个最小变动单位?
- 量能特征:单笔成交量是否异常放大?跟过去 N 笔比,是均值几倍?
- 时间特征:两笔成交之间的间隔是多久?密集还是稀疏?
举个例子。我在监控某只期货合约时发现,连续 3 笔 Tick 都是主动买,价格没怎么动,但量一次比一次大。这说明啥?有人在偷偷吸筹,但又不想拉高价格。这种特征,K 线根本看不出来。
核心观点:Tick 级别的分析,本质是在还原多空双方的“肌肉记忆”。每一笔成交都是博弈的结果。
大单与小单的分类方法
怎么区分大单和小单?没有统一标准。我自己的做法是——动态阈值法。
def classify_order(volume, recent_volumes):
"""
动态分类大单小单
recent_volumes: 过去100笔的成交量列表
"""
import numpy as np
median_vol = np.median(recent_volumes)
std_vol = np.std(recent_volumes)
# 超过中位数3倍标准差,算大单
if volume > median_vol + 3 * std_vol:
return 'large'
# 低于中位数,算小单
elif volume < median_vol:
return 'small'
else:
return 'medium'
为什么用中位数而不是平均数?因为成交量分布经常有极端值,平均数会被拉偏。中位数更稳健。我曾经用平均数做分类,结果某天突然来了一笔巨量,后面所有单子都变成小单了——这显然不合理。
另外,不同品种的阈值肯定不一样。螺纹钢和黄金,一手的大小天差地别。我建议你每个品种单独训练一个模型,或者至少单独算统计量。
交易节奏分析
交易节奏,说白了就是“快慢”。我一般看三个维度:
- 成交频率:每分钟多少笔成交?频率突然加快,往往意味着有大事发生。
- 间隔分布:两笔成交之间的时间间隔是否均匀?不均匀说明有人在“等”或者“急”。
- 方向连续性:连续主动买的笔数多,还是连续主动卖的笔数多?
我记得有一次做股指期货的盘后分析。那天下午 2 点之后,成交频率从每分钟 30 笔突然降到 5 笔,但每笔的量都很大。间隔时间忽长忽短,方向全是主动卖。我当时就觉得不对劲——这不是正常的交易节奏,更像是机构在偷偷出货。果不其然,收盘前最后 10 分钟,价格跳水了。
避坑指南:我曾经把交易节奏的阈值设得太死,结果错过了很多信号。后来我改用滚动窗口 + 百分位法,效果好了很多。比如,把过去 5 分钟的成交频率作为基准,当前频率超过 90% 分位就算异常。
知识体系总览
下面这张图,是我自己梳理的 T&S 分析框架。你可以把它当成一个检查清单,做分析时对着看,不容易漏东西。
注意:T&S 数据量非常大。一只活跃股票一天可能产生几十万笔成交。如果你要实时处理,建议用 C++ 或者 Rust 写核心逻辑,Python 只做分析和回测。我见过有人用纯 Python 做实时 T&S,结果延迟飙到几百毫秒,直接被行情甩下车。
好了,关于 T&S 的基础框架就这些。下一层我们聊聊怎么把这些数据用到策略里——比如怎么用逐笔成交做盘口动量判断,怎么识别主力对倒。不过那是后面的事了。
无相订单流研究社 微信Lucian808555