TA-Lib 提供了一些可以用于判断价格波动性或震荡行情的指标,虽然它没有直接的“线性指标”,但可以通过以下方式间接实现你的需求:

1. 判断价格波动性(是否震荡)

(1) ATR (Average True Range) - 平均真实波幅

测量价格波动性,低 ATR 值可能表明市场处于震荡(波动小)。

示例代码:

atr = talib.ATR(high, low, close, timeperiod=14)

(2) ADX (Average Directional Movement Index) - 平均趋向指数

ADX > 25 可能趋势强,ADX < 20 可能震荡。

示例代码:

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

(3) Bollinger Bands (布林带) 带宽收缩

布林带带宽收缩时,可能预示震荡。

示例代码:

upper, middle, lower = talib.BBANDS(close, timeperiod=20)
bandwidth = (upper - lower) / middle  # 带宽收缩表示低波动

(4) 线性回归斜率(判断趋势方向)

用 LINEARREG_SLOPE 计算价格线性回归的斜率,接近 0 可能震荡。

示例代码:

slope = talib.LINEARREG_SLOPE(close, timeperiod=10)

(5) 价格标准差(StdDev)

计算价格的标准差,低标准差表明价格波动小。

示例代码:

stddev = talib.STDDEV(close, timeperiod=10, nbdev=1)

2. 直接判断“价格是否接近前几个周期”

(1) 最近价格的最大/最小波动范围

检查过去 N 根 K 线的最高价和最低价范围:

n = 5  # 观察最近5根K线
price_range = max(high[-n:]) - min(low[-n:])
is_consolidating = price_range < threshold  # 自设阈值

(2) RSI 或 CCI 接近中值

RSI 接近 50 或 CCI 接近 0 可能表明无趋势:

rsi = talib.RSI(close, timeperiod=14)
is_neutral = (rsi[-1] > 40) & (rsi[-1] < 60)

3. 自定义震荡条件(结合多指标)

def is_consolidating(close, period=10, slope_threshold=0.1, atr_threshold=0.02):
    slope = talib.LINEARREG_SLOPE(close, timeperiod=period)[-1]
    atr = talib.ATR(high, low, close, timeperiod=period)[-1]
    return (abs(slope) < slope_threshold) and (atr < atr_threshold)

总结

  • 低波动震荡:结合 ATR、StdDev、布林带带宽或价格范围。

  • 无趋势震荡:结合 ADX < 20 或 RSI 接近 50。

  • 线性判断:用 LINEARREG_SLOPE 计算斜率是否接近 0。

TA-Lib 需要你根据具体场景调整参数(如周期、阈值)。如果没有现成指标,可以通过组合多个条件实现。