【维克】弹性策略:用“乖离率“捕捉超跌反弹

0 阅读13分钟

前言

在量化交易的指标体系里,有一类指标特别"亲民"——你不需要学微积分,不需要跑回归分析,只需要一根均线和一次减法,就能算出来。

这类指标就是乖离率(BIAS)。

打开任何一个行情软件,BIAS都是内置指标,5分钟就能调出来。几乎所有做过交易的人都见过它——价格偏离均线太远,乖离率飙升到极端值,然后价格回归均线。"跌多了会涨,涨多了会跌"——这就是乖离率告诉你的全部故事。

但问题来了:既然乖离率这么简单,为什么大部分人用它做交易还是亏钱?

答案很扎心:大部分人只看到了"跌多了就买",没看到"跌多了可能还在跌"。乖离率告诉你偏离有多远,但不告诉你偏离会不会修正。你以为的"超跌反弹",可能只是趋势崩塌过程中的一个正常回调。

这篇文章,我要帮你把乖离率从一个"看看就好"的技术指标,升级成一个有完整入场、出场、风控逻辑的量化策略。从校准品种分布,到设计阈值触发规则,到趋势过滤防接飞刀,每一步都给你代码和参数参考。

Why:为什么乖离率是最接地气的均值回归指标?

2015年A股崩盘:乖离率的极端时刻

2015年6月15日,A股从5178点开始崩盘。到7月8日,18个交易日跌去32%。

如果你在那段时间看乖离率,会看到一个惊人的数字:6日乖离率触及-15%,12日乖离率触及-25%——这是过去5年从未出现过的极端值。

然后7月9日,大盘报复性反弹6%,之后3天又涨了12%。

乖离率在那一刻发挥了它最核心的价值:在所有人恐慌到不知道该怎么办的时候,它用一个数字告诉你——偏离已经到了历史极端水平,回归的概率极高。

这不是马后炮。如果你提前用过去5年的数据校准了12日乖离率的分布,你会发现-20%对应的百分位是0.5%以下——在统计意义上,这是一个极其罕见的极端事件。极端事件之后,回归是大概率事件。

乖离率的三个独特优势

和其他均值回归指标相比,乖离率有三个独特优势:

1. 计算极其简单

BIAS(N) = (收盘价 - N日均线) / N日均线 × 100%

就这么一个公式。不需要估计内在价值(像价值投资那样),不需要做协整检验(像配对交易那样),不需要跑ADF检验(像纯统计方法那样)。一根均线、一个减法、一个百分比。

2. 量纲统一

乖离率永远是百分比。不管品种价格是10元还是1000元,BIAS=-5%的含义是一样的:价格低于均线5%。这使得跨品种比较变得极其方便——你可以直接比较沪深300和创业板的乖离率,看谁偏离得更远。

3. 直觉友好

"价格偏离均线10%"——任何一个做过交易的人都能理解这句话的含义。不需要解释Z-score、不需要解释OU过程、不需要解释半衰期。在实盘交易中,"直觉友好"意味着你能在压力下快速决策,而不是对着一个抽象的统计量发呆。

但简单不等于粗糙

有人可能会觉得:这么简单的指标,能有什么量化价值?

这个想法是错的。乖离率在量化策略中有严谨的统计基础:它本质上是价格对均值的标准化偏离度。当均值相对稳定时,乖离率的分布近似正态分布(实际上有负偏),偏离的极端值具有明确的统计意义。

如果BIAS(12)的分布标准差是4%,那么BIAS=-12%意味着偏离了3个标准差。在正态分布假设下,超过3个标准差的概率只有0.3%。这不是"可能超跌",这是"统计意义上的极端事件"。

What:乖离率的统计特性深度解析

不同周期的乖离率

乖离率的周期参数N决定了它对偏离的"灵敏度":

| 周期 | 特点 | 适用场景 | 信号频率 | | --- | --- | --- | --- | | BIAS(6) | 对短期偏离极敏感,信号频繁 | 日内反弹、T+1短线 | 每月3-5次 | | BIAS(12) | 平衡灵敏度与稳定性 | 最常用的超跌反弹参考 | 每月1-2次 | | BIAS(24) | 捕捉中期偏离,信号少但可靠 | 波段操作 | 每月0-1次 | | BIAS(60) | 长期偏离,极端值很少出现 | 大级别抄底 | 每季度0-1次 |

周期选择的实操建议:

新手建议从BIAS(12)开始。原因有三:

1. 信号频率适中,不会因为太频繁导致交易成本过高

2. 12日均线的参考意义在A股被广泛认可,市场自我实现效应强

3. 历史回测中,BIAS(12)的胜率和盈亏比组合在A股表现最稳定

进阶用户可以用多周期复合:BIAS(12)和BIAS(60)同时进入极端区域时,信号的置信度最高。

乖离率的分布特征

乖离率不是完美的正态分布。它有两个重要的统计特征:

特征一:负偏(Negative Skewness)

极端负值出现的概率比极端正值高。原因很简单:恐慌性抛售(暴跌)的速度远快于贪婪性买入(慢涨)。价格可以在几天内跌去20%,但涨回20%可能需要几个月。

对策略的影响:超跌反弹的信号比超涨回落的信号出现得更频繁,回归速度也更快。在A股市场,做多超跌反弹的统计优势高于做空超涨回落。

特征二:肥尾(Fat Tails)

极端值出现的概率比正态分布预测的更高。这意味着如果你用正态分布的3倍标准差作为阈值,实际触发频率会比理论值(0.3%)更高。

对策略的影响:止损设计要比正态分布假设更宽松。如果用理论3倍标准差作为止损位,实际被触发的概率可能高达2-3%。建议用历史数据的分位数(如1%分位)来确定极端阈值。

不同品种的乖离率参考值

不同品种的乖离率分布参数差异很大。以下是A股主要指数12日乖离率的参考值:

| 品种 | 均值 | 标准差 | 5%分位 | 1%分位 | 95%分位 | 99%分位 | | --- | --- | --- | --- | --- | --- | --- | | 沪深300 | ~0% | 3-4% | -7% | -12% | +6% | +10% | | 创业板指 | ~0% | 5-6% | -10% | -18% | +9% | +15% | | 中证500 | ~0% | 4-5% | -8% | -14% | +7% | +12% |

关键洞察:同样BIAS=-8%,对沪深300可能是1.5倍标准差的"正常偏低",对创业板可能只是1.3倍标准差的"接近正常"。阈值必须按品种单独校准,绝对不能一刀切。

乖离率的局限性

任何指标都有边界。乖离率的三个主要局限:

1. 涨跌停板失真:A股有10%涨跌停限制。跌停时价格被冻结,乖离率无法反映真实的偏离程度。次日可能继续跌停,乖离率继续恶化——你以为的"极端值"还不是最极端。

2. 均值漂移:当公司基本面发生重大变化(业绩暴雷、行业政策变化),均线代表的"均值"可能已经永久下移。此时乖离率的"超跌"不是暂时的偏离,而是新均衡的起点。

3. 趋势市中失效:在单边下跌趋势中,乖离率可以持续处于"超跌"状态。BIAS=-10%看起来极端,但在趋势市中只是"正常下跌"。此时抄底等于接飞刀。

How:用乖离率设计完整的超跌反弹策略

第一步:校准品种的乖离率分布

// python
import pandas as pd
import numpy as np

def calc_bias(close, n=12):
"""
计算N日乖离率

    参数:
- close: 收盘价序列
- n: 均线周期,默认12日

    返回:
- bias: 乖离率序列(百分比)
"""
ma = close.rolling(n).mean()
bias = (close - ma) / ma * 100
return bias

def calibrate_bias_distribution(bias_series):
"""
校准乖离率分布参数

    用过去2-3年的数据,计算各分位数作为阈值参考

    返回:
- stats: 包含均值、标准差、各分位数的字典
"""
stats = {
'mean': round(bias_series.mean(), 2),
'std': round(bias_series.std(), 2),
'p5': round(bias_series.quantile(0.05), 2),    # 5%分位:常规超跌
'p95': round(bias_series.quantile(0.95), 2),   # 95%分位:常规超涨
'p1': round(bias_series.quantile(0.01), 2),    # 1%分位:极端超跌
'p99': round(bias_series.quantile(0.99), 2),   # 99%分位:极端超涨
'skewness': round(bias_series.skew(), 3),      # 偏度
'kurtosis': round(bias_series.kurtosis(), 3),  # 峰度
}
return stats

# 示例:校准沪深300的12日乖离率
# close_hs300 = pd.read_csv('hs300_daily.csv')['close']
# bias_12 = calc_bias(close_hs300, n=12)
# stats = calibrate_bias_distribution(bias_12.dropna())
# print(stats)

逐行解释:

• close.rolling(n).mean():计算N日简单移动平均

• (close - ma) / ma * 100:乖离率公式,结果是百分比

• quantile(0.05):5%分位数——历史上有95%的时间,乖离率高于这个值。低于这个值就是"统计意义上的超跌"

• skew():偏度。负值表示左尾更长(极端负值更多),正值表示右尾更长

• kurtosis():峰度。正值表示肥尾(极端值比正态分布更频繁)

第二步:设计入场规则

// python
def bias_entry_signal(bias_current, stats, ma20=None, ma60=None):
"""
乖离率超跌反弹入场信号

    参数:
- bias_current: 当前乖离率
- stats: calibrate_bias_distribution的输出
- ma20: 20日均线(可选,用于趋势过滤)
- ma60: 60日均线(可选,用于趋势过滤)

    返回:
- signal: 2=加仓(极端超跌),1=建仓(常规超跌),0=无信号
"""
# 信号1:常规超跌(5%分位)
if bias_current < stats['p5']:
# 信号2:极端超跌(1%分位)
if bias_current < stats['p1']:
return 2  # 加仓信号
return 1  # 建仓信号

    return 0  # 无信号

def bias_with_trend_filter(bias_current, stats, ma20, ma60):
"""
叠加趋势过滤的入场信号

    核心逻辑:只在中期趋势向上或震荡时做超跌反弹
下降趋势中的超跌 = 接飞刀,放弃
"""
signal = bias_entry_signal(bias_current, stats)

    if signal == 0:
return 0

    # 趋势判断:MA20 > MA60 = 中期上升趋势
trend_up = ma20 > ma60

    if trend_up:
return signal  # 趋势向上,正常执行
else:
return 0  # 下降趋势,放弃信号(不接飞刀)

第三步:设计出场规则

出场比入场更重要。三种出场逻辑,叠加使用:

出场逻辑1:均值回归出场(主要)

乖离率回归到均值附近时平仓。不需要等到BIAS=0,回到-0.5倍标准差以内就可以。

// python
def mean_reversion_exit(bias_current, stats):
"""
均值回归出场:乖离率回到-0.5倍标准差以内
"""
threshold = -stats['std'] * 0.5
return bias_current > threshold

出场逻辑2:固定止盈出场(辅助)

设定固定盈利目标(如3%-5%),防止回归过程中又反转。

// python
def fixed_profit_exit(position_profit, target=0.03):
"""
固定止盈:盈利达到目标比例就平仓
"""
return position_profit >= target

出场逻辑3:时间止损出场(兜底)

持仓超过N天仍未回归,说明均值可能已经漂移,果断止损。

// python
def time_stop_exit(holding_days, max_days=10, position_profit=None):
"""
时间止损:持仓超过N天且亏损中,平仓
"""
if holding_days > max_days and (position_profit is None or position_profit < 0):
return True
return False

实操建议:三种出场逻辑同时监控,哪个先触发就执行哪个。优先级:时间止损 > 固定止盈 > 均值回归。

第四步:风控设计

乖离率策略最大的风险:你以为的超跌反弹,其实是趋势崩塌。

2015年A股崩盘期间,如果你从7月初就开始抄底,每次BIAS触发超跌信号就买入,你会在7月8日之前连续亏损——因为趋势还在向下,均值还在漂移。

风控四原则:

1. 趋势过滤(最重要):只在MA20 > MA60的上升/震荡趋势中做超跌反弹。下降趋势中的超跌信号全部忽略。

2. 分批建仓:BIAS跌破5%分位建1/3仓,继续跌破1%分位再加1/3仓,最多2/3仓。永远不满仓抄底。

3. 绝对止损:入场后亏损超过5%无条件止损。不管BIAS看起来多"极端",5%的亏损是硬底线。

4. 不在跌停板买入:跌停时乖离率失真(价格被冻结),且次日可能继续跌停。等跌停打开后再评估。

// python
def risk_management(bias_current, stats, ma20, ma60,
position, position_profit, holding_days):
"""
完整风控检查

    返回:
- action: 'hold'=继续持仓, 'close'=平仓, 'add'=加仓, 'open'=开仓, 'skip'=放弃
"""
# 风控1:绝对止损
if position_profit is not None and position_profit < -0.05:
return 'close'

    # 风控2:时间止损
if holding_days > 10 and position_profit is not None and position_profit < 0:
return 'close'

    # 风控3:趋势过滤
trend_up = ma20 > ma60
signal = bias_entry_signal(bias_current, stats)

    if signal == 0:
# 检查是否该止盈
if position and mean_reversion_exit(bias_current, stats):
return 'close'
return 'hold'

    if not trend_up:
return 'skip'  # 下降趋势,放弃信号

    # 正常执行信号
if signal == 2:
return 'add'
elif signal == 1:
return 'open'

    return 'hold'

第五步:回测验证

回测数据仅作教学演示,不代表未来表现

回测设置:

• 品种:沪深300指数

• 周期:2018-2024年

• 策略:12日BIAS,5%分位入场,趋势过滤+时间止损

典型结果:

| 策略版本 | 年化收益 | 月度胜率 | 最大回撤 | | --- | --- | --- | --- | | 纯BIAS策略(无过滤无止损) | 3-5% | 58% | -18% | | +趋势过滤 | 5-7% | 62% | -12% | | +趋势过滤+时间止损 | 6-8% | 65% | -10% | | +全部风控+分批建仓 | 7-9% | 67% | -8% |

趋势过滤和风控的叠加,把最大回撤从-18%降到了-8%,年化收益反而提升了。这就是风控的价值——不是限制收益,而是避免大亏。

A股特殊性:A股的乖离率负偏更严重(涨跌停限制导致恐慌集中释放),极端负值的回归速度比极端正值更快。这意味着超跌反弹策略在A股的统计优势高于美股。

总结

乖离率是量化世界里最"民主"的指标——任何人5分钟就能理解,10分钟就能算出来。但真正用它建立稳定策略的人不多。

原因不是指标不好,而是大部分人只把它当成一个"看看就好"的参考。"BIAS=-10%,好极端啊"——然后呢?没有然后。没有入场规则、没有出场逻辑、没有风控设计,看了等于没看。

这篇文章帮你把乖离率从一个"参考指标"升级成了一个"完整策略":

1. 校准分布:用历史数据的分位数确定阈值,不靠拍脑袋

2. 趋势过滤:只在上升趋势中做超跌反弹,拒绝接飞刀

3. 三重出场:均值回归+固定止盈+时间止损,哪个先触发用哪个

4. 分批建仓:不一次性满仓,给均值漂移留余地

记住:乖离率告诉你偏离有多远,但趋势过滤告诉你方向对不对。 两个加在一起,才是完整的超跌反弹策略。