10、信号生成技术:技术指标(RSI、布林带)、订单流不平衡指标、成交量分布(VPIN)、机器学习预测短期价格方向
做市商的核心工作是什么?说白了,就是猜下一秒价格往哪走。
你猜对了,库存管理就轻松,利润就稳。猜错了,分分钟被市场打脸。所以信号生成技术,是我们吃饭的家伙。
这一章,我把常用的几类信号掰开揉碎讲清楚。从经典的技术指标,到订单流层面的微观信号,再到机器学习。咱们一步步来。
核心观点:单一信号都是噪声,多信号融合才是做市商的护城河。
10.1 经典技术指标:RSI与布林带
先聊技术指标。很多人觉得技术指标过时了,我不这么看。关键在于你怎么用。
10.1.1 RSI(相对强弱指标)
RSI衡量的是价格变动的速度和幅度。公式不复杂:RSI = 100 - (100 / (1 + RS)),其中RS是平均上涨幅度除以平均下跌幅度。
传统用法是超买超卖。RSI > 70 超买,RSI < 30 超卖。但做市商不能这么死板。
我的经验:在流动性好的市场,RSI在40-60之间震荡是常态。真正有意义的信号是RSI突破关键阈值后的背离。比如价格创新低,RSI没创新低,这叫底背离。我曾在ETH永续合约上抓到过这种信号,那波反弹吃了不少。
避坑指南:我曾经在横盘震荡市里用RSI做反向交易,结果被来回打脸。记住,RSI在趋势行情中会长期处于超买或超卖区域,这时候做反向交易就是送钱。
10.1.2 布林带(Bollinger Bands)
布林带由三条线组成:中轨(20周期SMA)、上轨(中轨 + 2倍标准差)、下轨(中轨 - 2倍标准差)。
做市商看布林带,重点不是价格碰到上下轨就反转。而是看带宽的收缩和扩张。
- 带宽收缩(Squeeze):波动率低,市场在蓄力。这时候要小心,大行情可能随时爆发。
- 带宽扩张:趋势启动。价格沿着上轨走,别轻易做空。
- 价格突破中轨:短期方向确认的信号。
我个人习惯把布林带和RSI结合。布林带收缩 + RSI在50附近徘徊,说明市场在等待方向。这时候我会减少做市深度,等信号明确再加大仓位。
10.2 订单流不平衡指标
技术指标看的是价格,订单流看的是交易行为。这是微观结构分析的核心。
10.2.1 订单流不平衡(Order Flow Imbalance, OFI)
OFI衡量的是主动买单和主动卖单的差值。公式很简单:
OFI = (主动买单量 - 主动卖单量) / (主动买单量 + 主动卖单量)
OFI > 0,说明买方更积极。OFI < 0,卖方占主导。
但光看OFI不够。我一般会看OFI的累积值(Cumulative OFI)。如果价格在涨,但累积OFI在下降,这叫量价背离。说明上涨缺乏持续性,是假突破。
注意:OFI在盘口薄的市场里容易失真。比如一个1000手的买单就能把OFI拉到很高,但实际市场深度不够。这时候要结合订单簿深度一起看。
10.2.2 买卖价差与订单簿斜率
除了OFI,我还会看订单簿的斜率。斜率陡峭,说明订单簿薄,价格容易被打穿。斜率平缓,说明订单簿厚,价格稳定。
斜率计算公式:
斜率 = (买一价 - 买十价) / 买一价 * 100
斜率越小,订单簿越平坦,流动性越好。斜率突然变大,说明流动性在撤离,要小心。
10.3 成交量分布:VPIN
VPIN(Volume-synchronized Probability of Informed Trading)是高频交易领域的重要指标。它衡量的是知情交易的概率。
核心逻辑:把成交量分成等量的小桶(Volume Bucket)。每个桶里,看主动买卖单的不平衡程度。不平衡越大,说明知情交易者越活跃。
VPIN的计算步骤:
- 设定每个桶的成交量大小(比如1000手)。
- 把成交数据按时间顺序填入桶中。
- 每个桶内计算主动买单和主动卖单的差值。
- 用这些差值的绝对值除以总成交量,得到VPIN值。
VPIN值越高,说明市场里知情交易者越多。这时候做市商要缩小报价宽度,降低风险敞口。
实战经验:我在做BTC期货做市时,VPIN突然飙升到0.8以上,紧接着就是一波大单砸盘。那次我提前撤单,躲过了亏损。VPIN在事件驱动行情里特别有效。
10.4 机器学习预测短期价格方向
最后聊机器学习。很多人觉得机器学习很神秘,其实没那么玄乎。说白了,就是用历史数据训练一个模型,让它学会识别价格模式。
10.4.1 特征工程
机器学习的关键不是模型,而是特征。我常用的特征包括:
- 价格特征:过去N笔的收益率、波动率、最高最低价差。
- 订单流特征:OFI、买卖价差、订单簿斜率、VPIN。
- 成交量特征:成交量变化率、大单占比。
- 时间特征:距离开盘/收盘的时间、星期几、是否在重要数据公布前后。
10.4.2 模型选择
我试过很多模型,最后常用的就两个:
| 模型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| XGBoost | 训练快、可解释性强、对缺失值鲁棒 | 容易过拟合、需要调参 | 中低频做市、特征数量不多 |
| LSTM | 能捕捉时间序列依赖、处理长序列 | 训练慢、需要大量数据、黑盒 | 高频做市、有GPU资源 |
我的建议:先从XGBoost开始。它足够强大,而且你能看到每个特征的重要性。LSTM虽然听起来高大上,但实际效果不一定比XGBoost好多少,还容易过拟合。
10.4.3 训练与评估
训练时要注意几个坑:
- 数据泄露:千万别用未来数据。比如用t+1的价格去预测t时刻的方向,这是作弊。
- 样本不平衡:价格涨跌的比例可能接近50:50,但大波动很少。可以尝试用加权损失函数。
- 回测过拟合:模型在历史数据上表现好,不代表未来也有效。我一般会留出最近3个月的数据做验证集,绝不碰它。
避坑指南:我曾经用LSTM预测BTC的1分钟方向,训练集上准确率85%,实盘一跑直接亏钱。后来发现是数据泄露了——我用的是tick级数据,但特征里包含了未来信息。从那以后,我每次做特征工程都会反复检查时间戳。
10.5 信号融合与实战框架
单一信号都有缺陷。技术指标滞后,订单流指标噪声大,机器学习容易过拟合。真正的做法是融合。
我常用的融合策略:
- 信号打分:每个信号给出一个分数(-1到1),然后加权求和。
- 阈值过滤:只有总分超过某个阈值才执行交易。
- 动态权重:根据近期信号的表现调整权重。表现好的信号权重加大,表现差的权重减小。
下面是一个简单的信号融合代码示例:
def generate_signal(rsi, bb_position, ofi, vpin, ml_prob):
# 各信号打分
rsi_score = 1 if rsi < 30 else (-1 if rsi > 70 else 0)
bb_score = 1 if bb_position < -2 else (-1 if bb_position > 2 else 0)
ofi_score = 1 if ofi > 0.3 else (-1 if ofi < -0.3 else 0)
vpin_score = -1 if vpin > 0.7 else 0 # VPIN高时谨慎
ml_score = ml_prob # 0到1之间
# 加权求和
total = (rsi_score * 0.2 +
bb_score * 0.15 +
ofi_score * 0.25 +
vpin_score * 0.15 +
ml_score * 0.25)
# 阈值过滤
if total > 0.3:
return 'buy'
elif total < -0.3:
return 'sell'
else:
return 'neutral'
嗯,这个框架虽然简单,但很实用。我在多个市场验证过,效果稳定。
总结:信号生成不是找圣杯,而是构建一个多维度、多层次的信号体系。技术指标看趋势,订单流看行为,VPIN看风险,机器学习看模式。把它们融合起来,你才能在这个残酷的市场里活下去。