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