摘要: 负成交量NVI指标关注成交量减少时的价格变化,用于识别聪明资金动向。在股票期货交易中,NVI上升表明主力吸筹,下降表明派发,结合均线可研判买卖时机。

成交量NVI指标的基本原理

负成交量NVI(Negative Volume Index)由保罗·迪萨克提出,核心逻辑是当成交量较前一日减少时,价格的变化更能反映主力资金的行为。市场普遍认为,成交量放大时散户参与度高,而成交量萎缩时聪明资金往往在操作。NVI通过累加成交量减少日的价格百分比变化,形成一条曲线,用以追踪聪明资金的足迹。

计算NVI的步骤:

负成交量NVI指标在股票期货交易中如何应用

  • 初始值通常设为1000。

  • 当日成交量小于前一日成交量时,NVI = 前一日NVI × (1 + 当日收盘价 / 前一日收盘价 - 1)。

  • 当日成交量大于或等于前一日成交量时,NVI保持不变。

在股票和期货市场中,NVI的上升意味着在成交量萎缩时价格仍在上涨,暗示主力在吸筹;NVI下降则意味着在成交量萎缩时价格下跌,暗示主力在派发。

NVI在股票期货交易中的研判方法

趋势判断

NVI曲线与价格走势的背离是重要信号。当价格创新低而NVI未创新低,表明聪明资金并未跟随抛售,可能形成底部。当价格创新高而NVI未创新高,表明主力并未追涨,可能形成顶部。

在期货市场,由于杠杆效应,NVI的背离信号往往比股票市场更早出现。交易者可以结合持仓量变化,若NVI上升且持仓量增加,确认多头主力入场;若NVI下降且持仓量增加,确认空头主力入场。

均线系统辅助

NVI通常搭配250日移动平均线使用。当NVI上穿其250日均线,视为牛市信号;当NVI下穿其250日均线,视为熊市信号。股票市场适用250日,期货市场因交易周期短,可调整为60日或120日。

代码演示(Python


import pandas as pd

import numpy as np

def calculate_nvi(df, initial=1000):

    df = df.copy()

    df['price_change'] = df['close'].pct_change()

    df['volume_decrease'] = df['volume'] < df['volume'].shift(1)

    df['nvi'] = initial

    for i in range(1, len(df)):

        if df.loc[i, 'volume_decrease']:

            df.loc[i, 'nvi'] = df.loc[i-1, 'nvi'] * (1 + df.loc[i, 'price_change'])

        else:

            df.loc[i, 'nvi'] = df.loc[i-1, 'nvi']

    return df

# 示例数据

data = {'close': [10, 10.5, 10.3, 10.8, 11], 'volume': [1000, 1200, 800, 900, 1100]}

df = pd.DataFrame(data)

nvi_df = calculate_nvi(df)

print(nvi_df[['close', 'volume', 'nvi']])

结合正成交量PVI

NVI与正成交量PVI(Positive Volume Index)结合使用,可全面观察市场。PVI在成交量增加时计算,反映散户行为。当NVI上升而PVI下降,表明聪明资金在买入而散户在卖出,后市看涨。当NVI下降而PVI上升,表明聪明资金在卖出而散户在买入,后市看跌。

实战应用要点

股票市场

在股票市场中,NVI适用于识别中长期趋势。当NVI持续位于250日均线上方,且价格未大幅上涨,可视为建仓时机。当NVI跌破250日均线,且价格处于高位,应减仓或离场。

注意NVI对成交量数据质量要求较高,停牌或涨跌停导致的成交量异常需处理。建议使用复权价格计算,避免除权除息干扰。

期货市场

期货市场T+0交易,NVI可应用于日内或短线。由于期货成交量受主力合约切换影响,需使用连续合约数据。NVI在期货中的参数可优化,通过回测寻找最佳均线周期。

代码演示(期货NVI策略回测框架)


import backtrader as bt

class NVIStrategy(bt.Strategy):

    params = (('nvi_period', 60),)

    def __init__(self):

        self.nvi = bt.indicators.NegativeVolumeIndex(self.data)

        self.sma_nvi = bt.indicators.SMA(self.nvi, period=self.params.nvi_period)

    def next(self):

        if self.nvi[0] > self.sma_nvi[0] and not self.position:

            self.buy()

        elif self.nvi[0] < self.sma_nvi[0] and self.position:

            self.close()

风险控制

NVI信号滞后于价格,需结合止损。股票市场止损可设5%-8%,期货市场因杠杆,止损应更严格,如2%-3%。NVI在震荡市中易产生假信号,可加入ADX指标过滤,ADX低于20时忽略NVI信号。

NVI的局限性

NVI仅关注成交量减少日,可能遗漏关键信息。在成交量持续放大的趋势中,NVI长时间不变,失去参考价值。期货市场主力合约换月时,成交量突变会导致NVI计算偏差。交易者需结合价格形态、资金流向等综合判断。

量化交易中,NVI可作为因子之一,通过多因子模型提升稳健性。股票市场可结合基本面因子,期货市场可结合期限结构因子。NVI的独特视角在于捕捉聪明资金,但单一指标不足以稳定盈利,需系统化运用。