企业微信

震荡行情为什么让量化交易者头疼

做量化交易的人都知道,单边趋势是朋友,震荡行情是敌人。价格上上下下,均线来回穿插,突破信号刚出现就反转,止损被打掉后市场又回到原点。这种行情下,趋势跟踪策略几乎全军覆没,账户资金曲线一路下滑。

震荡行情的本质是市场参与者分歧大,没有一方能主导价格方向。多空力量在某个区间内反复拉锯,价格像乒乓球一样在支撑和阻力之间弹来弹去。对于量化策略来说,最怕的就是这种没有持续性的波动。

量化交易如何过滤震荡行情?这几种方法你知道吗

用趋势强度指标把震荡市筛掉

最直接的过滤方法是判断市场有没有趋势。常用的指标是平均趋向指数(ADX)。ADX计算的是价格变动的方向性强度,数值在0到100之间。一般来说,ADX低于20说明市场处于无趋势状态,高于25则趋势开始形成。

量化策略可以在开仓前加一个条件:ADX大于25才允许交易。这样在震荡行情中,ADX长期低迷,策略自动停止开仓,避免了无效交易。

另一个指标是趋势跟踪效率,比如用价格净变化除以总波动幅度。如果价格走了很远又回到原点,这个比值就很低,说明是震荡市。策略可以设定阈值,低于阈值就不交易。

代码示例(Python):


import talib

def adx_filter(high, low, close, period=14, threshold=25):

    adx = talib.ADX(high, low, close, timeperiod=period)

    return adx > threshold  # True表示趋势成立

波动率过滤让假突破现形

震荡行情中,价格经常假突破。用波动率可以过滤掉这些噪音。真实波幅(ATR)衡量的是价格的平均波动幅度。在震荡市中,ATR往往较低且稳定。当价格突破关键位时,如果ATR没有明显放大,很可能是假突破。

另一种方法是布林带宽度。布林带上下轨的距离反映了波动率。当带宽收窄到历史低位时,市场处于挤压状态,往往是震荡行情的末期。量化策略可以等待带宽扩张后再入场,避开挤压阶段的反复摩擦。

实际操作中,可以计算布林带带宽的百分位。带宽处于历史20%分位以下时,不交易;带宽从低位开始扩张时,才视为趋势启动信号。

成交量确认突破的真假

价格可以骗人,成交量很难骗人。震荡行情中的假突破往往伴随成交量萎缩或没有明显放大。真正的趋势启动通常需要成交量的配合。

量化策略可以在突破信号出现时,检查成交量是否高于过去N根K线的平均成交量。如果成交量没有放大,就放弃这次突破。这个简单的过滤能大幅减少震荡市中的假信号。

具体做法:计算20周期成交量移动平均,突破当根K线的成交量必须大于均量的1.5倍。同时可以观察持仓量变化,期货市场中持仓量增加表明资金流入,突破更可靠。

多重周期共振提高胜率

单一周期的信号容易在震荡市中反复。用大周期定方向,小周期找入场点,可以过滤掉大周期震荡时的噪音。

量化策略可以设定:日线级别ADX大于20且价格在60日均线之上,才允许做多;小时线级别出现突破信号时入场。这样日线震荡时,小时线的假突破会被大周期的过滤条件挡掉。

周期共振的核心逻辑是让大周期充当方向过滤器。大周期趋势不明朗时,小周期的任何信号都不参与。这牺牲了一些交易机会,但换来了更高的胜率和更小的回撤。

用价格形态识别震荡区间

量化交易不一定要用复杂指标。简单的价格形态也能识别震荡。比如最近N根K线的高点和低点是否在一个区间内。如果最高价和最低价的差值占价格的比例小于某个阈值,说明价格在窄幅波动,大概率是震荡。

另一种形态是均线的缠绕程度。短期均线(如10日)和长期均线(如60日)的距离可以衡量趋势强度。两条均线距离很近且频繁交叉,就是震荡。策略可以要求均线距离超过一定比例才交易。

构建震荡过滤的组合条件

单一过滤条件总有漏洞。实战中,把多个条件组合起来效果更好。一个常见的组合是:ADX大于25 + 成交量放大1.5倍 + 布林带带宽从低位扩张。三个条件同时满足才开仓,能极大程度避开震荡行情。

组合条件会降低交易频率,但这正是量化交易需要的。少做无效交易,把资金留给高胜率的机会。回测时对比一下加过滤和不加过滤的资金曲线,你会发现过滤后的策略回撤明显减小,夏普比率提升。

震荡行情是市场的常态,不可能完全避开。量化交易的目标不是抓住所有波动,而是在有趋势的时候在场,在震荡的时候休息。把过滤规则写进策略里,让程序替你执行纪律,这才是量化交易的优势所在。