4. 能量分布指标设计

盘口能量分布,说白了就是看资金在什么位置、以什么力度在交易。我做了这么多年量化,发现很多新手只盯着价格涨跌,却忽略了背后的能量变化。今天我们就来聊聊四个核心指标:VWAP、OBV、MFI和主动买卖盘能量比。

核心观点:价格是表象,能量才是本质。谁在买、谁在卖、花了多少钱——这些信息比K线本身更有价值。

盘口能量分布指标 VWAP 成交量加权平均价 OBV 能量潮指标 MFI 资金流向指标 主动买卖盘 能量比 日内交易基准 量价背离判断 超买超卖识别 多空力量对比 综合判断:资金意图 + 交易时机

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