第九章:大单追踪——大单定义与阈值设定,大单对盘口的冲击分析,Python实现大单监控
做量化交易的朋友,尤其是做订单流和盘口分析的,一定绕不开一个词——大单。
什么叫大单?说白了,就是那些能“砸出水花”的单子。我刚开始做盘口分析时,总以为大单就是手数大的单子。后来发现,事情没那么简单。
举个例子,一只茅台和一只ST股,同样是一万手的单子,对盘口的冲击能一样吗?显然不能。所以,大单的定义,必须结合具体的市场环境、股票流动性、以及你的交易策略来定。
这一章,我们就来聊聊大单的定义、阈值怎么设,以及如何用Python实时监控大单对盘口的冲击。
9.1 大单的定义:不是所有大单都叫“大单”
我个人习惯把大单分为两类:绝对大单和相对大单。
- 绝对大单:比如单笔成交超过500手、1000手,或者金额超过100万。这种定义简单粗暴,适合流动性好的品种。
- 相对大单:根据该股票过去一段时间的平均单笔成交量来动态设定。比如,过去20个交易日,平均单笔成交是50手,那今天突然出现一笔500手的单子,这就是相对大单。
我在项目中遇到过这样的情况:某只小盘股,平时一天才成交几万手,突然来了一笔2000手的买单,直接把价格拉涨停。如果用绝对大单的标准(比如500手),这笔单子会被捕捉到。但如果你用相对大单,它的冲击力会更明显。
9.2 阈值设定:怎么定才合理?
阈值设定,说白了就是“多大才算大”。我建议从三个维度来考虑:
- 成交量维度:单笔成交量占过去N日平均成交量的比例。比如,单笔成交量超过过去5日平均成交量的5%,就算大单。
- 金额维度:单笔成交金额。对于高价股,手数可能不大,但金额巨大。比如茅台,一手就要20多万,10手就是200万,这绝对算大单。
- 盘口冲击维度:单子成交后,盘口挂单的变化。比如,一笔买单吃掉卖一到卖五的所有挂单,这就算大单。
嗯,这里要注意:阈值不是一成不变的。我曾经在实盘中吃过亏,用固定的500手阈值去监控,结果遇到一只高送转后的股票,股价从200块跌到20块,500手变成了“小单”。从那以后,我改用动态阈值。
9.3 大单对盘口的冲击分析
大单来了,盘口会有什么反应?说白了,就是“流动性被抽走”和“价格被推动”。
我总结了大单冲击盘口的三种典型模式:
| 模式 | 特征 | 后续走势概率 |
|---|---|---|
| 主动吃单型 | 大单直接吃掉卖盘,盘口卖一迅速消失 | 大概率继续上涨,但需警惕主力诱多 |
| 挂单堆积型 | 大单挂在买一或卖一,不主动成交 | 可能是支撑或压力位,方向待定 |
| 撤单再挂型 | 大单先挂出,然后撤单,再在更优价格挂出 | 主力试盘,后续可能有动作 |
你想想看,如果一笔大单主动吃掉所有卖单,盘口瞬间变薄,价格跳涨。这时候,如果你手里有仓位,是跟还是跑?我的建议是:结合成交量放大情况来判断。如果大单成交后,后续没有跟风盘,那很可能是主力对倒,别急着追。
9.4 Python实现大单监控
好了,理论说完了,我们来点实际的。下面是我写的一个简单的大单监控脚本,基于tushare或akshare获取实时成交数据。
这个脚本的核心逻辑是:
- 实时获取逐笔成交数据
- 判断单笔成交量是否超过阈值
- 如果超过,记录并计算对盘口的冲击
import pandas as pd
import numpy as np
import time
from datetime import datetime
# 假设我们有一个函数 get_tick_data() 获取实时逐笔成交
# 这里用模拟数据演示
class BigTradeMonitor:
def __init__(self, stock_code, threshold_volume=500, threshold_amount=1000000):
self.stock_code = stock_code
self.threshold_volume = threshold_volume # 手数阈值
self.threshold_amount = threshold_amount # 金额阈值
self.trade_history = [] # 存储历史成交
def is_big_trade(self, trade):
"""判断是否为大单"""
volume = trade['volume']
amount = trade['amount']
if volume >= self.threshold_volume or amount >= self.threshold_amount:
return True
return False
def calculate_impact(self, trade, orderbook):
"""计算大单对盘口的冲击"""
# orderbook 包含买卖五档
bid_prices = orderbook['bid_prices'] # 买一到买五
ask_prices = orderbook['ask_prices'] # 卖一到卖五
# 如果是买单,看它吃掉了多少卖单
if trade['side'] == 'buy':
# 计算成交均价与卖一价的偏离
impact = (trade['price'] - ask_prices[0]) / ask_prices[0] * 10000 # 用BP表示
else:
impact = (bid_prices[0] - trade['price']) / bid_prices[0] * 10000
return impact
def run(self, data_stream):
"""实时监控主循环"""
for tick in data_stream:
if self.is_big_trade(tick):
impact = self.calculate_impact(tick, tick['orderbook'])
print(f"[{datetime.now()}] 大单发现!")
print(f" 方向: {'买入' if tick['side']=='buy' else '卖出'}")
print(f" 成交量: {tick['volume']}手, 金额: {tick['amount']:.2f}元")
print(f" 盘口冲击: {impact:.2f} BP")
print("-" * 40)
# 记录到历史
self.trade_history.append(tick)
time.sleep(0.5) # 模拟实时延迟
# 使用示例
if __name__ == "__main__":
monitor = BigTradeMonitor("000001", threshold_volume=300, threshold_amount=500000)
# monitor.run(real_data_stream) # 实际使用时传入实时数据流
print("大单监控已启动,等待数据...")
9.5 实战中的避坑指南
做了一段时间的大单监控,我踩过不少坑。这里分享几个:
- 别只看手数,要看金额。 有些高价股,几十手就是几百万,绝对算大单。
- 大单不一定代表方向。 有时候主力会用大单对倒,制造假象。要结合盘口挂单变化来判断。
- 注意时间窗口。 早盘和尾盘的大单,往往比盘中更有意义。早盘的大单可能是主力建仓,尾盘的大单可能是拉抬收盘价。
- 动态调整阈值。 市场活跃时,阈值可以适当提高;市场冷清时,阈值要降低。
我曾经在监控一只科创板股票时,发现连续出现大单买入,但价格就是不涨。后来一查,是主力在利用大单托盘,然后在小单出货。嗯,从那以后,我加了一个“价格与成交量背离”的过滤条件。
9.6 知识体系结构图
下面这张图,是我自己整理的大单追踪知识体系,方便你快速理解本章的核心逻辑:
大单追踪,说白了就是“在茫茫单海中,找到那些能改变市场格局的单子”。阈值设好了,监控跑起来了,剩下的就是结合你的交易策略去执行。
记住,大单只是信号,不是圣杯。真正赚钱的,是看懂大单背后的意图,然后做出正确的决策。