1、Spot过滤概述
先聊点实在的。我做交易系统这几年,见过太多人拿着K线图,看到一根放量阳线就冲进去,结果被套在山顶。为什么会这样?
因为市场里充斥着大量噪声信号。一根阳线可能是庄家拉高出货,也可能是某个大散户情绪上头。真正的趋势启动,往往不是一根K线说了算的。
Spot过滤,说白了就是给交易信号加一道门槛。它不是用来预测涨跌的,而是用来筛选高质量信号,把那些诱多、诱空、假突破的垃圾信号挡在门外。我个人习惯用它做风控第一道关,效果比单纯看指标要好不少。
什么是Spot过滤
Spot过滤的核心思想很简单:别信单一价格点。单个点的价格,可能是因为流动性不足、大单砸盘、甚至数据源延迟造成的。Spot过滤就是检查这个点周围的环境——比如成交量、波动率、相邻价格区间——只有当环境“及格”了,才把这个点当作有效信号。
举个例子。你在看5分钟K线,价格突破了前高。别急着下单。先问自己几个问题:
- 突破时的成交量是前几根K线的2倍以上吗?
- 突破瞬间的买卖盘口有没有巨量挂单挡路?
- 这个突破点的位置,离当天的日内高低点有多远?
这些问题,就是Spot过滤要回答的。它通过一组预定义的阈值参数,对每个潜在交易点进行打分。分数够了,才允许下单。我在项目中遇到过最典型的反例就是:有一个学员没做Spot过滤,只靠均线金叉进场,结果连续5次止损在假突破上,后来加上一个简单的波动率过滤,胜率直接从40%提到68%。
# 一个最简单的Spot过滤逻辑(伪代码)
def spot_filter(price, volume, avg_volume, threshold_volume=2.0, threshold_volatility=0.05):
# 条件1:成交量必须大于平均成交量的2倍
if volume < avg_volume * threshold_volume:
return False, "volume too low"
# 条件2:价格波动幅度不能超过5%,防止异常点
volatility = abs(price - avg_price) / avg_price
if volatility > threshold_volatility:
return False, "price spike"
return True, "pass"
嗯,这里要注意一点:过滤不是越严越好。阈值设得太高,可能会错过真正的大行情。我一般先用历史数据回测,找到一个平衡点。
过滤阈值的作用
阈值就是那条“及格线”。它的作用可以分成三个层面:
- 噪声抑制:剔除因市场随机波动产生的假信号。
- 风险控制:限制单笔交易的最大亏损风险。
- 策略一致性:确保每次进场都基于相同标准,避免情绪干扰。
我个人经验是,阈值设置最忌讳“一刀切”。不同市场的波动特性完全不一样:股票市场相对稳定,阈值可以设低一些;加密货币波动剧烈,阈值必须上提,否则一天能被止损十几次。我见过有人把同一套阈值用在A股和比特币上,结果比特币那边的胜率不到20%。
下面这张表是我自己常用的阈值初设参考,注意只是初设,具体还要根据策略回测调整:
| 参数 | 股票(日线) | 期货(1小时) | 加密货币(15分钟) |
|---|---|---|---|
| 成交量倍数阈值 | 1.5x | 2.0x | 2.5x |
| 价格波动率上限 | 3.0% | 2.0% | 5.0% |
| 盘口深度过滤(挂单量) | 否 | 是 | 是 |
| 日内区间位置过滤 | 中间20%过滤 | 中间30%过滤 | 中间10%过滤 |
常见应用场景
股市(A股/美股)
股市中Spot过滤最常用的就是放量突破阈值。你想想看,一只股票长期缩量横盘,突然某一天成交量放大到平时的3倍,价格突破箱体——这种信号的可信度就很高。我在做A股量化时,还会加上一个“均线排列过滤”:只有当5日、20日、60日均线全部多头排列时,才允许触发Spot过滤后的信号。
期货(商品期货/股指期货)
期货市场的特点是杠杆高、波动快。Spot过滤在期货里更多用于隔夜持仓的风险管理。比如,一个螺纹钢的日内信号,如果收盘前触发过滤,我可能会强行平仓不过夜。另一个常见的应用是基差过滤——当期货价格大幅升水或贴水时,现货的过滤阈值要相应调整。我记得有一次铁矿石期货涨停,现货跟涨幅度很小,如果不调整阈值,直接追期货会吃大亏。
加密货币(BTC/ETH等)
加密货币交易是我接触过的噪声最多的市场。这里Spot过滤几乎是必须的。原因很简单:加密货币24小时交易,没有熔断机制,一根针就能打掉所有止损单。我建议在这个市场至少要设两个过滤:
- 成交量确认阈值:单根K线的成交量必须达到近20根K线均值的2.5倍以上。
- 深度保护阈值:用订单簿前5档的挂单量做保护,如果买卖盘差价太大,禁止开仓。
# 加密货币深度保护过滤示例
def depth_filter(bid_volumes, ask_volumes, threshold_ratio=0.1):
total_bid = sum(bid_volumes)
total_ask = sum(ask_volumes)
# 如果买卖单量差距超过10%,可能是深度不足
if abs(total_bid - total_ask) / (total_bid + total_ask) > threshold_ratio:
return False, "depth imbalance"
return True, "depth ok"
知识结构总览:Spot过滤核心逻辑
下图是我自己梳理的Spot过滤流程。从原始市场数据开始,经过三个过滤层级,最终生成可用的交易信号。每个层级都有一个核心阈值参数,这些参数的设定方式就是我们后面章节要讲的重点。
这个流程虽然看着简单,但每个节点的阈值设定,背后都需要大量的数据分析和策略回测。我自己刚开始做的时候,也是先手动画出信号分布图,慢慢才找到感觉。别着急,一步步来。