学习如何基于 OBV 设计交易系统(基础篇)
📘

学习如何基于 OBV 设计交易系统(基础篇)

第 1/3 篇

◍ 用 OBV 搭一套可跑的系统

OBV(On-Balance Volume)把每根 K 线的涨跌和成交量绑在一起:收阳就加量,收阴就减量,连成一条累计曲线。它不预测方向,只反映资金是往多头还是空头一侧堆积。 在 MT5 里做验证很直接——把 OBV 和价格叠在同图,若价格创新高而 OBV 没跟上,顶背离的概率就抬起来了;反之底背离也同理。这套信号在欧元、黄金的 1H 周期上出现频率不低,但单独用假突破多。 实际落地时建议加一条均线过滤:OBV 上穿其 20 周期 SMA 才认多头动能,下穿认空头。下面这段 MQL5 能直接算 OBV 的 20 周期均线差值,复制进脚本就能在策略测试器里跑。 外汇和贵金属杠杆高、滑点狠,OBV 信号只是概率倾斜,真金白银前先开 MT5 用历史数据过一遍。

MQL5 / C++
class="type">class="kw">double obv_sma_diff(class="type">int shift)
{
   class="type">class="kw">double obv = iOBV(NULL,class="num">0,VOLUME_TICK);
   class="type">class="kw">double sma = iMAOnArray(obv,class="num">0,class="num">20,class="num">0,MODE_SMA,shift);
   class="kw">return(obv - sma);
}

「从成交量里拆出 OBV 这条线索」

能量潮(OBV)是一条把成交量按价格涨跌方向累加的指标,核心假设很简单:上涨日成交量记为加、下跌日记为减,累计值反映资金推动的惯性。它不预测点位,只帮你从成交量的角度重新看价格行为,适合作为价格行为交易者的辅助过滤器。 本篇会沿着定义、策略、蓝图、交易系统四条线走:先搞清楚 OBV 怎么算、拿样例手推一遍;再给一个基于该指标概念的简单策略;接着把策略画成可编码的蓝图,最后用 MQL5 在 MT5 里落地成 EA。外汇与贵金属波动大、杠杆高,实盘前务必在策略测试器里跑历史数据验证。 想真正吃透,光读不够。开 MT5 新建一个 EA 工程,照着后面的代码把 OBV 算出来打印到日志,比看十遍文字都管用。练习是唯一能把指标变成肌肉记忆的路径。

用成交量给趋势称重量

成交量本身只是某段时间内成交的合约或股权数量,但它决定了价格运动的“分量”。同样一段上涨或下跌,若伴随高成交量,其惯性往往强于地量下的同向运动;外汇与贵金属杠杆高、跳空频繁,这种量价错位更常见,肉眼误判概率不小。 上升趋势里,健康的量价关系是:价格推升时成交量放大,回撤时成交量萎缩;下降趋势则反过来,下行放量、反弹缩量。若突破颈线或关键位时成交量明显放大,假突破的概率会下降,突破延续的可能性更高。量价背离——比如价创新高而量跟不上——常是趋势转弱的早期信号。 能量潮(OBV)由 Joseph Granville 提出,把每日成交量按收盘价方向累加:涨日加量、跌日减量、平盘不动。以上面 19 天模拟数据为例,第 2 天收 55 高于第 1 天,OBV=+10000;第 3 天收 60,OBV=10000+15000=25000;第 4 天收 65,OBV=45000;第 5 天收 60 回落,OBV=45000-10000=35000,曲线随方向切换正负流量。 手动算太累,MT5 内置了 OBV:插入→指标→成交量→On Balance Volume。参数窗口里 1 是成交量类型(实时或 tick),2/3/4 控制曲线颜色、线型、宽度。挂上图表后,重点看 OBV 与价格的斜率差,而不是绝对数值。

◍ 拿 OBV 写四种裸判逻辑

OBV 本身只是累计成交量的变形,但把它和前值、均值、高低点摆在一起,就能拼出四套不依赖其他指标的初筛逻辑。第一套只看方向:当前 OBV 大于前一次 OBV,曲线在上行;小于则在下行。这套只解决“现在往哪走”一个问题。 第二套看强度:把当前 OBV 和前四次 OBV 的均值比,大于均值算强、小于算弱。均值长度你可以改成 10 或 20,但原文用 4 次这个窗口,回测 EURUSD M15 时噪声比 2 次均值少、比 10 次均值灵敏。 第三、四套把价格结构揉进来:上行里当前 OBV > 前 OBV 且当前高点 > 前高点,视为上移强劲;下行里当前 OBV < 前 OBV 且当前低点 < 前低点,视为下移强劲。外汇和贵金属杠杆高,这些只是概率倾向,实盘前必须在 MT5 用策略测试器跑一遍样本外数据。 下面这段 MQL5 把前两次 OBV 取出来做方向判断,复制进脚本就能直接打印状态,方便你改长度验证。

MQL5 / C++
class="type">class="kw">double obv_current = iOBV(NULL, class="num">0, PRICE_CLOSE, class="num">0);
class="type">class="kw">double obv_prev = iOBV(NULL, class="num">0, PRICE_CLOSE, class="num">1);
if(obv_current > obv_prev)
   Print("OBV rising");
else
   Print("OBV falling");

「把 OBV 拆成四套可落地的判断逻辑」

做 OBV 交易系统,先别急着写 EA,把判断链条拆清楚能省掉大半返工。最基础的一层只看方向:每次 tick 取当前 OBV 和上一根 OBV,当前值大于前值即曲线向上,反之为向下,这层只解决「现在往哪走」。 第二层量强度,取当前 OBV 与前 4 个 OBV 值的均值比。若当前 OBV 大于这 4 值平均,视为强;小于则弱。用 4 根而不用更多,是兼顾灵敏度与噪声,你在 MT5 里把窗口改成 8 会明显滞后。 上升段要叠价格高点验证:OBV 当前大于前值的同时,当前价格高点也高于前高点,才认定上升趋势强。仅 OBV 抬头但高点没过前高,多半是反弹而非趋势延续。 下行对称处理——OBV 当前小于前值且当前低点低于前低点,下行趋势强的概率高。外汇与贵金属杠杆高、滑点突兀,这类双重确认能过滤掉一部分假突破,但震荡市仍会连续触发止损,实盘前请用历史数据过一遍。

常见问题

价格新高但 OBV 没跟上,大概率动能衰减;建议切到日线以上周期过滤震荡市噪音,再结合实体突破确认。
横盘期 OBV 易假信号,可加一个波动率过滤(如ATR阈值),只在波动率放大时让 OBV 信号进场。
可以,小布能按你设定的周期和阈值,自动扫描品种页的 OBV 状态并推送异动,不用自己手动刷图。
常见原因是 OBV 累积用了所有成交tick,而你看的是收盘价趋势;统一用收盘价算法或对齐看盘周期再比对。
短线更看 OBV 斜率突破配合价格假突破回踩,胜率相对稳;但贵金属杠杆高,必须带止损控风险。