量化研究 | 改进的累积成交量指标obvm

松鼠Quant
2025-06-13


图片
量化策略开发,高质量社群,交易思路分享等相关内容

工具推荐

· 参数筛选工具

·Ai帮你编写策略

· 订单流图表

· 加入2025俱乐部

· Ai投研助手课程


『正文』

ˇ

一、背景介绍

这是一个经典 OBV 指标的平滑版本,带有信号线。您可以利用它来寻找信号线交叉和背离情况。

在本文中,我将介绍对经典指标平衡交易量(OBV)的修改。这个指标是由乔 - 格兰维尔(Joe Granville)开发的,并且在他 1963 年出版的《格兰维尔股市盈利新秘诀》(Granville's New Key To Stock Market Profits)一书里有详细介绍。

平衡交易量修正(OBVM)指标对平衡交易量进行了平滑处理,并且添加了一条信号线。交易者可以通过寻找信号线交叉和背离来产生交易信号。

图片

图 1:经典 OBV。中间窗格显示的是阿姆斯特丹交易所指数,下方窗格显示的是持仓量。20 天相关系数(上窗格)显示指数与 OBV 之间存在高度相关性(0.44+)。

当 OBV 能够追踪相关证券时,OBVM 就可以发挥作用了。图 1 中的图表展示了阿姆斯特丹交易所指数(中间窗格)和持仓量(下窗格)。20 天相关系数(上窗格)显示该指数与 OBV 之间有着高度相关性(0.44+)。

计算方法

首先,我会展示经典的持仓量计算方法,接着是修改后的方法。

持仓量计算

如果收盘价高于前一交易日的收盘价,那么

当前 OBV = 上一 OBV + 当前成交量

如果收盘价低于前一交易日的收盘价,那么

当前 OBV = 上一 OBV - 当前成交量

一般来说,看涨信号交叉能够提供参与上升趋势的低风险入场机会。

如果收盘价等于前一交易日的收盘价,那么

当前 OBV = 上一 OBV

OBVM 计算

OBVM = OBV 的 7 天 EMA(指数移动平均线

信号线:当前 OBVM 的 10 天 EMA

当前 OBVM 的 10 天 EMA(指数移动平均线)可以作为信号线,帮助识别转折点。

3/10、7/10 和 7/50 是当前 OBVM 常用的设置参数,不过您也可以根据自己的交易风格和目标替换成其他数值。

解释

OBVM 的特性与 OBV 类似。7 天指数移动平均线会对 OBV 进行平滑处理。当上涨交易日的成交量超过下跌交易日的成交量时,OBVM 会上升。当下跌交易日的成交量较大时,OBVM 则会下降。OBVM 的上升反映了积极的成交量压力,有可能推动价格上涨。相反,OBVM 的下降反映了负面的成交量压力,可能预示着价格下跌。OBVM 的绝对值并不关键,它是基于收盘价计算的。

信号线交叉

信号线是 OBVM 线的 10 天 EMA。通常情况下,信号线的变动范围在 10 到 50 之间。作为指标的移动平均线,它相较于 OBVM 会有所滞后,但更容易察觉到 OBVM 的转折。当 OBVM 向上拐头并在信号线上方交叉时,就会形成看涨交叉。当 OBVM 向下并在信号线下方交叉时,就会形成看跌交叉。交叉可能会持续几天甚至几周,这主要取决于市场变动的力度。对待信号线交叉要谨慎,相关证券的波动会增加交叉的次数。

当前 OBVM 的 10 天指数移动平均线作为信号线,能够识别转折点。

图片

图 2:修正后的 OBV。这里显示的是恒生指数(HSI)在 2003 年 3 月至 2006 年 5 月牛市期间的 OBVM(7,50)。在三年半的时间里,出现了七次看涨信号线交叉(绿色垂直线)。2004 年 1 月的第二次看涨信号线交叉出现了坏信号。一般来说,看涨信号线交叉提供了参与上升趋势的低风险入场时机。

图 2 展示了恒生指数(HSI)在 2003 年 3 月至 2006 年 5 月牛市期间的 OBVM(7,50)。在三年半的时间里,出现了七次看涨信号线(绿色垂直线)交叉。2004 年 1 月的第二次看涨信号线交叉出现了坏信号。总体而言,看涨信号线交叉为参与上升趋势提供了低风险的入场时机。

二、信号应用

2.1、OBVM改进算法对比

图片

2.2、核心交易信号

图片

三、策略构建思路

3.1、趋势跟踪

OBVM指标:先计算合约的OBV(平衡成交量),然后对其取7日EMA

信号线:对OBVM指标再取10日EMA作为信号线

趋势线:计算合约收盘价的200日SMA(简单移动平均线)作为长期趋势判断依据

3.2、均值回归策略

布林带过滤:

当价格触及下轨且OBVM底背离时做多

当价格触及上轨且OBVM顶背离时做空

持仓时间控制:

固定持仓3-5个交易日

收盘前30分钟强制平仓

3.3、跨品种套利策略

图片

四、策略代码

1、指标









































Params    Numeric OBVMLength(7);       // OBV 指数移动平均线周期    Numeric SignalLineLength(10); // 信号线周期
Vars    Series<Numeric> OBVValue;    // OBV 值    Series<Numeric> OBVMValue;   // 平滑后的 OBV 值    Series<Numeric> SignalLineValue; // 信号线值
Events    OnBar(ArrayRef<Integer> indexs){        // 计算 OBV 值        If(CurrentBar == 0)      {        OBVValue = 0;      }Else      {        If(Close>Close[1])        {          OBVValue = OBVValue[1]+Vol;        }Else If(Close<Close[1]){          OBVValue = OBVValue[1]-Vol;        }Else        {          OBVValue = OBVValue[1];        }      }
        // 计算平滑后的 OBV 值        OBVMValue = XAverage(OBVValue, OBVMLength);
        // 计算信号线值        SignalLineValue = XAverage(OBVMValue, SignalLineLength);
        // 绘制 OBVM 和信号线        PlotNumeric("OBVM", OBVMValue);        PlotNumeric("Signal Line", SignalLineValue);}

2、策略

图片
图片

防迷路


           图片

微   信|小松鼠-松鼠Quant

微信号|viquant01

25俱乐部源码OBVM》

加入2025量化俱乐部



分享