企业微信

同花顺BBI指标的基础计算逻辑

同花顺BBI指标全称多空指数,由四条不同周期的移动平均线加权平均而成。常规参数为3日、6日、12日、24日移动平均线,计算公式为:BBI = (MA3 + MA6 + MA12 + MA24) / 4。该指标在股票与期货市场中用于判断中期趋势方向。当价格位于BBI上方,表明多头力量占优;价格位于BBI下方,空头力量主导。同花顺软件中BBI指标默认显示为一条曲线,与K线叠加。量化交易者需要将其转化为可编程的数值信号。


import pandas as pd

import numpy as np

def calculate_bbi(df, periods=[3, 6, 12, 24]):

    ma_list = [df['close'].rolling(window=p).mean() for p in periods]

    bbi = sum(ma_list) / len(periods)

    return bbi

该函数接收包含收盘价的DataFrame,返回BBI序列。股票期货数据中,期货主力合约需注意换月跳空,建议使用后复权价格或价差调整。

同花顺BBI在股票量化中的信号构建

股票量化策略中,BBI可作为趋势过滤器和入场触发器。常见规则:收盘价从下向上穿越BBI,且BBI斜率为正,产生买入信号;收盘价从上向下穿越BBI,且BBI斜率为负,产生卖出信号。为减少震荡市假信号,可增加成交量确认条件,如突破日成交量大于20日均量1.2倍。

同花顺BBI指标怎么用于股票期货量化交易


def stock_bbi_signal(df, bbi, vol_ratio=1.2):

    df['bbi'] = bbi

    df['above'] = df['close'] > df['bbi']

    df['cross_up'] = (df['above']) & (~df['above'].shift(1).fillna(False))

    df['cross_down'] = (~df['above']) & (df['above'].shift(1).fillna(False))

    df['vol_ma20'] = df['volume'].rolling(20).mean()

    df['vol_confirm'] = df['volume'] > df['vol_ma20'] * vol_ratio

    df['buy'] = df['cross_up'] & df['vol_confirm']

    df['sell'] = df['cross_down']

    return df[['buy', 'sell']]

股票T+1制度下,买入信号次日开盘执行,卖出信号当日收盘前执行。回测需考虑滑点与佣金。

同花顺BBI在期货交易中的参数优化

期货市场杠杆高、波动大,BBI参数需针对不同品种调整。黑色系螺纹钢、铁矿石波动剧烈,可缩短周期至2、5、10、20;农产品波动平缓,使用4、8、16、32减少噪音。跨期套利中,BBI用于判断价差趋势,而非绝对价格。


def futures_bbi_strategy(df, short_periods=[2,5,10,20]):

    bbi = calculate_bbi(df, short_periods)

    df['bbi'] = bbi

    df['position'] = 0

    df.loc[df['close'] > df['bbi'], 'position'] = 1

    df.loc[df['close'] < df['bbi'], 'position'] = -1

    df['returns'] = df['close'].pct_change() * df['position'].shift(1)

    sharpe = df['returns'].mean() / df['returns'].std() * np.sqrt(252)

    return df, sharpe

期货日内交易可结合BBI与ATR止损,当价格反向穿越BBI且亏损超过1.5倍ATR时平仓。夜盘连续交易时段,BBI计算需包含夜盘数据,同花顺默认使用全部交易时段收盘价。

多周期BBI共振与量化组合策略

单一BBI信号胜率有限,量化交易者常将日线BBI与60分钟BBI结合。日线BBI向上,60分钟BBI金叉,构成多头共振;日线BBI向下,60分钟BBI死叉,构成空头共振。股票期货均适用。


def multi_timeframe_bbi(df_daily, df_60min):

    bbi_daily = calculate_bbi(df_daily)

    bbi_60 = calculate_bbi(df_60min)

    df_daily['bbi_trend'] = np.where(df_daily['close'] > bbi_daily, 1, -1)

    df_60min['bbi_signal'] = np.where(df_60min['close'] > bbi_60, 1, -1)

    merged = pd.merge_asof(df_60min, df_daily[['bbi_trend']], left_index=True, right_index=True)

    merged['resonance'] = merged['bbi_signal'] * merged['bbi_trend']

    merged['entry'] = (merged['resonance'] == 1) & (merged['resonance'].shift(1) != 1)

    return merged

组合策略中,BBI可作为仓位管理因子。BBI斜率越大,仓位越高。股票组合分散持有5至10只标的,期货组合仅交易2至3个主力合约。

BBI与其它指标在量化系统中的融合

BBI与MACD、RSI、布林带结合可提升信号质量。BBI确认趋势方向,MACD确认动能,RSI过滤超买超卖。股票量化中,BBI向上且MACD金叉,RSI低于70,买入。期货量化中,BBI向下且MACD死叉,RSI高于30,卖出。


def bbi_macd_rsi_filter(df):

    bbi = calculate_bbi(df)

    ema12 = df['close'].ewm(span=12).mean()

    ema26 = df['close'].ewm(span=26).mean()

    macd = ema12 - ema26

    signal = macd.ewm(span=9).mean()

    df['macd_hist'] = macd - signal

    delta = df['close'].diff()

    gain = delta.clip(lower=0).rolling(14).mean()

    loss = -delta.clip(upper=0).rolling(14).mean()

    rs = gain / loss

    df['rsi'] = 100 - 100 / (1 + rs)

    df['bbi'] = bbi

    df['long'] = (df['close'] > df['bbi']) & (df['macd_hist'] > 0) & (df['rsi'] < 70)

    df['short'] = (df['close'] < df['bbi']) & (df['macd_hist'] < 0) & (df['rsi'] > 30)

    return df[['long', 'short']]

融合策略在股票期货回测中最大回撤可降低20%至30%。量化平台如聚宽、米筐、vn.py均支持自定义BBI因子。同花顺BBI公式可直接导出为Python或C++代码,接入实盘交易接口。

同花顺BBI在量化回测中的注意事项

股票回测需处理停牌、涨跌停、除权除息。期货回测需处理主力合约换月、保证金变化、手续费。BBI计算依赖移动平均,停牌期间价格不变,会导致BBI钝化。解决方案:跳过停牌日,使用前复权价格。期货换月时,价格跳空导致BBI突变,应对价差进行调整。


def adjust_futures_roll(df, roll_dates):

    df['adj_close'] = df['close'].copy()

    for date in roll_dates:

        ratio = df.loc[date, 'close'] / df.loc[date - pd.Timedelta(days=1), 'close']

        df.loc[df.index < date, 'adj_close'] *= ratio

    return df

量化交易者应使用滚动窗口回测,每次仅用历史数据计算BBI,避免未来函数。同花顺BBI指标在股票期货量化中属于基础趋势工具,配合严格风控与资金管理,可构建正期望交易系统。