4. 能量分布指标设计
盘口能量分布,说白了就是看资金在什么位置、以什么力度在交易。我做了这么多年量化,发现很多新手只盯着价格涨跌,却忽略了背后的能量变化。今天我们就来聊聊四个核心指标:VWAP、OBV、MFI和主动买卖盘能量比。
核心观点:价格是表象,能量才是本质。谁在买、谁在卖、花了多少钱——这些信息比K线本身更有价值。
4.1 成交量加权平均价(VWAP)
VWAP,全称Volume Weighted Average Price。说白了就是「按成交量算的平均成交价」。机构交易员特别喜欢用它,因为它能告诉你:今天市场参与者平均花了多少钱买这只股票。
我刚开始做日内交易时,总觉得自己买在了低点。后来一算VWAP,才发现我买的比市场平均价还高。嗯,这就是典型的「我以为我抄底了,其实我在接盘」。
计算公式:
VWAP = Σ(价格 × 成交量) / Σ(成交量)
// 逐笔累加版本
cumulative_volume = 0
cumulative_pv = 0
for each trade:
cumulative_pv += price * volume
cumulative_volume += volume
vwap = cumulative_pv / cumulative_volume
实战技巧:我个人习惯把VWAP当作「多空分水岭」。价格在VWAP上方运行,说明今天买方占优;跌破VWAP,就要小心了。我曾经用这个逻辑在2023年某次量化大赛中躲过了一波回调。
盘口应用场景:
- 日内交易基准:低于VWAP买入,高于VWAP卖出——这是最基础的用法
- 大单监控:当价格快速偏离VWAP且成交量放大,说明有大资金在行动
- 算法交易:机构常用VWAP作为执行基准,力求成交价不劣于VWAP
4.2 能量潮指标(OBV)的盘口应用
OBV,On-Balance Volume,由Joe Granville在1963年提出。它的逻辑很简单:价格上涨时的成交量算作「正能量」,价格下跌时的成交量算作「负能量」,然后累加起来。
你想想看,如果价格涨了但OBV没跟上,说明什么?说明上涨没有成交量支撑,是虚涨。反过来,价格跌了但OBV在上升,说明有人在悄悄吸筹。
计算公式:
if close > close_prev:
obv = obv_prev + volume
elif close < close_prev:
obv = obv_prev - volume
else:
obv = obv_prev
避坑指南:我曾经犯过一个错误——直接用日线数据算OBV,结果发现信号滞后严重。后来改用分钟级Tick数据,效果好了很多。记住,OBV对数据频率很敏感。
盘口应用要点:
- 背离判断:价格创新高但OBV没创新高 → 顶背离,准备跑
- 趋势确认:OBV和价格同步上升 → 趋势健康,可以持有
- 突破确认:价格突破阻力位时OBV同步突破 → 真突破概率大
4.3 资金流向(MFI)计算
MFI,Money Flow Index,可以理解为「带成交量的RSI」。它把价格和成交量结合起来,判断资金是在流入还是流出。
为什么叫「资金流向」?因为它算的是「聪明钱」在干嘛。MFI高于80说明资金过热,低于20说明资金过度悲观——这时候往往会出现反转。
计算步骤:
# 1. 计算典型价格
typical_price = (high + low + close) / 3
# 2. 计算资金流
money_flow = typical_price * volume
# 3. 区分正负资金流
if typical_price > typical_price_prev:
positive_flow += money_flow
else:
negative_flow += money_flow
# 4. 计算资金比率
money_ratio = positive_flow / negative_flow
# 5. 计算MFI
mfi = 100 - (100 / (1 + money_ratio))
| MFI数值 | 含义 | 操作建议 |
|---|---|---|
| 80 - 100 | 超买,资金过热 | 考虑减仓或做空 |
| 20 - 80 | 正常波动区间 | 结合其他指标判断 |
| 0 - 20 | 超卖,资金恐慌 | 关注买入机会 |
个人经验:我一般把MFI和VWAP配合使用。当MFI低于20且价格低于VWAP时,我会重点关注——这往往是「错杀」的信号。2022年某次新能源板块大跌,我就是靠这个组合抓住了反弹机会。
4.4 主动买卖盘能量比
这个指标是我自己特别喜欢用的。它直接告诉你:当前市场上,主动买的人和主动卖的人,谁更着急。
主动买盘:以卖一价或更高价成交的单子,说明买方迫不及待。
主动卖盘:以买一价或更低价成交的单子,说明卖方急于出手。
能量比计算公式:
# 主动买卖盘能量比
buy_volume = 主动买盘成交量
sell_volume = 主动卖盘成交量
energy_ratio = buy_volume / (buy_volume + sell_volume)
# 也可以算差值
net_energy = buy_volume - sell_volume
盘口实战应用:
- 能量比 > 0.6:买方主导,价格大概率继续上行
- 能量比 < 0.4:卖方主导,小心回调
- 能量比在0.4-0.6之间:多空均衡,观望为主
一个小技巧:我习惯把能量比和价格走势叠加看。如果价格在涨但能量比在下降,说明上涨是靠少量大单拉起来的,持续性存疑。这时候我会减仓观察。
代码实现示例:
import pandas as pd
import numpy as np
def calculate_energy_ratio(tick_data):
"""
tick_data: DataFrame, 包含字段 ['price', 'volume', 'side']
side: 'buy' 表示主动买盘, 'sell' 表示主动卖盘
"""
buy_mask = tick_data['side'] == 'buy'
sell_mask = tick_data['side'] == 'sell'
buy_vol = tick_data.loc[buy_mask, 'volume'].sum()
sell_vol = tick_data.loc[sell_mask, 'volume'].sum()
total_vol = buy_vol + sell_vol
if total_vol == 0:
return 0.5
energy_ratio = buy_vol / total_vol
return energy_ratio
# 滚动计算5分钟窗口的能量比
def rolling_energy_ratio(tick_data, window='5min'):
tick_data = tick_data.set_index('timestamp')
resampled = tick_data.resample(window)
energy_ratios = []
for _, group in resampled:
ratio = calculate_energy_ratio(group)
energy_ratios.append(ratio)
return energy_ratios
注意:不同交易所对「主动买盘」的定义可能不同。有些用「Taker Buy」来标识,有些用「成交方向」来判断。我曾经因为数据源的问题,算出来的能量比完全反了——嗯,那次亏了不少钱才发现的。
好了,四个指标都讲完了。VWAP告诉你成本基准,OBV告诉你量价关系,MFI告诉你资金冷热,能量比告诉你多空力度。把它们组合起来,你就能看到盘口背后真正的能量分布。
下一章我们会聊如何把这些指标整合成一个完整的交易系统。不过在那之前,我建议你先在历史数据上跑一跑这些代码,感受一下它们各自的特点。
公众号:蓝海数据掘金营,微信deep3321