Py学习  »  Python

薛斯通道(Schauss Channel)指标深度解析:原理、应用与Python实现

量化OK投研交流 • 4 月前 • 265 次点击  


 

 

 

 

 

 

 

 

 

 薛斯通道由美国分析师薛斯(Schauss)提出,是一种





薛斯通道由美国分析师薛斯(Schauss)提出,是一种基于移动平均和波动率的自适应通道型指标,核心作用是识别股价的运行区间、趋势方向及超买超卖状态,兼具趋势跟踪和震荡市高抛低吸的双重功能。与布林带(BOLL)不同,薛斯通道通过“动态调整通道宽度+双轨分层”,更适配不同波动率的标的,尤其适合中长线趋势判断和波段交易。

一、薛斯通道核心原理

1. 指标本质:双轨双层的自适应价格通道

薛斯通道的核心逻辑是“股价围绕中长期趋势线波动,且波动幅度随市场波动率动态调整”,由两组通道(大通道+小通道)、四条轨道线构成:

  • • 上层轨道(上轨):股价运行的压力位,基于周期均线向上偏移波动率幅度;
  • • 下层轨道(下轨):股价运行的支撑位,基于周期均线向下偏移波动率幅度;
  • • 大通道:反映长期趋势(如100/120周期),判断大方向;
  • • 小通道:反映短期趋势(如10/20周期),捕捉波段机会。

2. 核心计算公式

薛斯通道的核心是“周期均价+波动率偏移”,经典参数为:

(1)基础周期均价(中轨)

  • • 长期中轨(大通道):( MA_{长} = \frac{\sum_{i=0}^{n-1} (H_i + L_i + C_i)/3}{n} )(n=100/120,H=最高价,L=最低价,C=收盘价,取三者均值更平滑);
  • • 短期中轨(小通道):( MA_{短} = \frac{\sum_{i=0}^{m-1} (H_i + L_i + C_i)/3}{m} )(m=10/20)。

(2)通道宽度(波动率偏移)

通道宽度=周期内价格波动幅度×调整系数(经典系数为0.02):

  • • 长期波动率:( \sigma_{长} = \max(H_i - L_i) \times 0.02 )(100周期内最高价-最低价的最大值×系数);
  • • 短期波动率:( \sigma_{短} = \max(H_i - L_i) \times 0.02 )(20周期内最高价-最低价的最大值×系数)。

(3)轨道线最终公式

轨道类型
计算公式
核心作用
长期上轨(UPL)
( MA_{长} + \sigma_{长} )
长期压力位
长期下轨(DNL)
( MA_{长} - \sigma_{长} )
长期支撑位
短期上轨(UPS)
( MA_{短} + \sigma_{短} )
短期压力位
短期下轨(DNS)
( MA_{短} - \sigma_{短} )
短期支撑位

3. 与布林带(BOLL)的核心区别

薛斯通道常被误认为是“升级版布林带”,但核心逻辑差异显著:

维度
薛斯通道
布林带(BOLL)
实战影响
中轨计算
(H+L+C)/3的移动平均(更平滑)
收盘价的简单移动平均(SMA)
薛斯中轨更贴合真实价格中枢
通道宽度
基于周期最大波幅×固定系数(自适应)
基于标准差(σ)×倍数(如2σ)
薛斯通道对极端行情更不敏感
轨道分层
双轨(长期+短期)
单轨(中轨+上/下轨)
薛斯可同时跟踪长/短期趋势
适用场景
中长线趋势+波段交易
短线震荡市超买超卖
薛斯更适配趋势延续性标的

二、薛斯通道实战应用规则

1. 趋势判断(核心功能)

(1)长期趋势确认(大通道)

  • • 多头趋势:股价站稳长期中轨,且长期上轨/下轨同步向上发散 → 持仓做多;
  • • 空头趋势:股价跌破长期中轨,且长期上轨/下轨同步向下发散 → 持仓做空/空仓;
  • • 震荡趋势:股价在长期通道内来回波动,上轨压力、下轨支撑有效 → 高抛低吸。

(2)短期趋势验证(小通道)

  • • 短期多头确认:股价突破短期上轨,且短期中轨向上 → 加仓;
  • • 短期空头确认:股价跌破短期下轨,且短期中轨向下 → 减仓;
  • • 趋势背离:长期多头但短期下轨跌破 → 短期回调,不改长期趋势,可低吸。

2. 交易信号(买入/卖出)

(1)买入信号(优先级从高到低)

  1. 1. 长期多头+短期回调至短期下轨,且股价未跌破长期中轨 → 低吸(核心信号);
  2. 2. 股价突破长期上轨,且短期上轨同步向上发散 → 追涨(趋势加速);
  3. 3. 震荡市中,股价触及长期下轨反弹,且短期中轨拐头向上 → 波段买入。

(2)卖出信号(优先级从高到低)

  1. 1. 长期空头+短期反弹至短期上轨,且股价未突破长期中轨 → 高抛(核心信号);
  2. 2. 股价跌破长期下轨,且短期下轨同步向下发散 → 止损(趋势破位);
  3. 3. 震荡市中,股价触及长期上轨回落,且短期中轨拐头向下 → 波段卖出。

3. 实战示例(A股贵州茅台,日线级别)

假设参数:长期周期n=100,短期周期m=20,调整系数=0.02:

时间节点
股价位置
通道状态
交易信号
持仓动作
2023.01
1700元,跌至长期下轨
长期中轨向上,短期下轨支撑
买入(低吸)
建仓50%
2023.03
1900元,突破短期上轨
长期上轨发散,短期中轨向上
加仓
持仓80%
2023.06
2200元,触及长期上轨
短期中轨拐头向下
卖出(高抛)
减仓至50%
2023.09
2000元,跌破短期下轨
长期中轨仍向上
低吸
加仓至80%
2023.12
2100元,跌破长期中轨
长期下轨开始向下
止损
清仓

4. 适用场景与参数优化

(1)适用标的/周期

  • • 标的:大盘蓝筹股、行业龙头(波动率稳定,趋势延续性强),如白酒、新能源、消费ETF;
  • • 周期:日线/周线(中长线),不建议分钟级短线(通道宽度易失真)。

(2)参数优化(根据标的波动率调整)

标的类型
长期周期n
短期周期m
调整系数
核心逻辑
低波动(银行)
120
30
0.015
波动率小,缩小通道宽度
中波动(消费)
100
20
0.02
经典参数,平衡灵敏度与稳定性
高波动(科技)
80
10
0.025
波动率大,扩大通道宽度

三、薛斯通道Python完整实现

以下代码基于A股日线数据实现薛斯通道计算,并绘制可视化图表,适配Tushare/聚宽等数据源:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

# ---------------------- 1. 数据准备(模拟/真实数据源) ----------------------
defget_stock_data(stock_code='600519.SH', start_date='2022-01-01', end_date='2023-12-31'):
    """
    获取股票日线数据(模拟数据,实盘可替换为Tushare/akshare)
    :param stock_code: 股票代码
    :param start_date: 开始日期
    :param end_date: 结束日期
    :return: 包含date/high/low/close的DataFrame
    """

    # 生成模拟数据(实盘替换为:df = ts.pro_bar(ts_code=stock_code, start_date=start_date, end_date=end_date))
    dates = pd.date_range(start=start_date, end=end_date, freq='D')
    # 模拟股价趋势(先跌后涨再震荡)
    base_price = 1800
    trend = np.cumsum(np.random.randn(len(dates)) * 20 - 5)[:len(dates)]
    close = base_price + trend
    high = close + np.random.uniform(050len(dates))  # 最高价
    low = close - np.random.uniform(050len(dates))   # 最低价
    
    df = pd.DataFrame({
        'date': dates,
        'high': high,
        'low': low,
        'close': close
    })
    # 剔除非交易日(模拟)
    df = df[df['date'].dt.dayofweek 5]
    df.reset_index(drop=True, inplace=True)
    return df

# ---------------------- 2. 薛斯通道计算核心函数 ----------------------
defcalculate_schauss_channel(df, long_period=100, short_period=20, adjust_coeff=0.02):
    """
    计算薛斯通道指标
    :param df: 包含high/low/close的DataFrame
    :param long_period: 长期周期(大通道)
    :param short_period: 短期周期(小通道)
    :param adjust_coeff: 调整系数(通道宽度)
    :return: 新增薛斯通道列的DataFrame
    """

    df = df.copy()
    
    # 步骤1:计算中轨((H+L+C)/3的移动平均)
    df['mid_price'] = (df['high'] + df['low'] + df['close']) / 3
    df['long_mid'] = df['mid_price'].rolling(window=long_period, min_periods=1).mean()  # 长期中轨
    df[ 'short_mid'] = df['mid_price'].rolling(window=short_period, min_periods=1).mean()  # 短期中轨
    
    # 步骤2:计算通道宽度(周期内最大波幅×调整系数)
    # 长期波动率:每个点对应long_period内的最大(H-L)
    df['hl_range'] = df['high'] - df['low']
    df['long_vol'] = df['hl_range'].rolling(window=long_period, min_periods=1).max() * adjust_coeff
    # 短期波动率:每个点对应short_period内的最大(H-L)
    df['short_vol'] = df['hl_range'].rolling(window=short_period, min_periods=1).max() * adjust_coeff
    
    # 步骤3:计算四条轨道线
    df['long_upper'] = df['long_mid'] + df['long_vol']  # 长期上轨
    df['long_lower'] = df['long_mid'] - df['long_vol']  # 长期下轨
    df['short_upper'] = df['short_mid'] + df['short_vol']  # 短期上轨
    df['short_lower'] = df['short_mid'] - df['short_vol']  # 短期下轨
    
    return df

# ---------------------- 3. 交易信号生成 ----------------------
defgenerate_trade_signals(df):
    """
    基于薛斯通道生成买卖信号
    :param df: 包含薛斯通道列的DataFrame
    :return: 新增信号列的DataFrame
    """

    df = df.copy()
    df['signal'] = 0# 0=无信号,1=买入,-1=卖出
    
     # 买入信号1:股价回调至短期下轨,且未跌破长期中轨
    buy_condition1 = (df['close'] <= df['short_lower']) & (df['close'] >= df['long_mid'])
    # 买入信号2:股价突破长期上轨,短期上轨向上
    buy_condition2 = (df['close'] > df['long_upper']) & (df['short_upper'] > df['short_upper'].shift(1))
    
    # 卖出信号1:股价反弹至短期上轨,且未突破长期中轨
    sell_condition1 = (df['close'] >= df['short_upper']) & (df['close'] <= df['long_mid'])
    # 卖出信号2:股价跌破长期下轨,短期下轨向下
    sell_condition2 = (df['close'] < df['long_lower']) & (df['short_lower'] < df['short_lower'].shift(1))
    
    # 赋值信号(避免重复信号,买入优先级高于卖出)
    df.loc[buy_condition1 | buy_condition2, 'signal'] = 1
    df.loc[sell_condition1 | sell_condition2, 'signal'] = -1
    
    return df

# ---------------------- 4. 可视化薛斯通道与交易信号 ----------------------
defplot_schauss_channel(df):
    """
    绘制薛斯通道+股价+交易信号
    """

    plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示
    plt.rcParams['axes.unicode_minus'] = False
    fig, ax = plt.subplots(figsize=(158))
    
    # 绘制股价
    ax.plot(df['date'], df['close'], label='收盘价', color= 'black', linewidth=1.5)
    
    # 绘制长期通道(大通道)
    ax.plot(df['date'], df['long_upper'], label='长期上轨', color='red', linestyle='--', linewidth=1)
    ax.plot(df['date'], df['long_mid'], label='长期中轨', color='red', linewidth=1)
    ax.plot(df['date'], df['long_lower'], label='长期下轨', color='red', linestyle='--', linewidth=1)
    
    # 绘制短期通道(小通道)
    ax.plot(df['date'], df['short_upper'], label='短期上轨', color='blue', linestyle='--', linewidth=1)
    ax.plot(df['date'], df['short_mid'], label='短期中轨', color='blue', linewidth=1)
    ax.plot(df['date'], df['short_lower'], label='短期下轨', color='blue', linestyle='--', linewidth=1)
    
    # 绘制交易信号(买入=绿色向上箭头,卖出=红色向下箭头)
    buy_signals = df[df['signal'] == 1]
    sell_signals = df[df['signal'] == -1]
    ax.scatter(buy_signals['date'], buy_signals['close'], marker='^', color='green', s= 100, label='买入信号')
    ax.scatter(sell_signals['date'], sell_signals['close'], marker='v', color='red', s=100, label='卖出信号')
    
    # 图表设置
    ax.set_title('薛斯通道指标与交易信号', fontsize=16)
    ax.set_xlabel('日期', fontsize=12)
    ax.set_ylabel('价格(元)', fontsize=12)
    ax.legend(loc='upper left')
    ax.grid(True, alpha=0.3)
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

# ---------------------- 5. 主函数调用 ----------------------
if __name__ == "__main__":
    # 步骤1:获取数据
    stock_df = get_stock_data(stock_code='600519.SH', start_date='2022-01-01', end_date='2023-12-31')
    
    # 步骤2:计算薛斯通道
    schauss_df = calculate_schauss_channel(
        df=stock_df,
        long_period=100,
        short_period=20,
        adjust_coeff=0.02
    )
    
    # 步骤3:生成交易信号
    signal_df = generate_trade_signals(schauss_df)
    
    # 步骤4:可视化
    plot_schauss_channel(signal_df)
    
    # 输出关键数据
    print("薛斯通道核心数据(最后10行):")
    print(signal_df[['date''close''long_mid''short_mid''long_upper''long_lower' 'signal']].tail(10))

代码运行说明

  1. 1. 数据替换:实盘使用时,将get_stock_data函数替换为Tushare/akshare的真实日线数据接口,需确保数据包含high(最高价)、low(最低价)、close(收盘价);
  2. 2. 参数调整:根据标的波动率修改long_period/short_period/adjust_coeff,如高波动科技股可将adjust_coeff调至0.025;
  3. 3. 信号优化:可叠加MACD/均线等指标过滤信号(如仅在MACD金叉时执行买入信号),降低假信号概率。

四、实战风险控制与优化

1. 核心风险点

  • • 假信号风险:震荡市中通道频繁突破/跌破,导致频繁交易;
  • • 参数失效风险:标的波动率突变(如突发利空),原参数通道宽度失真;
  • • 趋势反转风险:长期通道破位后未及时止损,导致大幅亏损。

2. 优化方案

(1)信号过滤

  • • 叠加趋势指标:仅在MA60向上时执行买入信号,MA60向下时仅执行卖出信号;
  • • 成交量验证:突破/跌破通道时,成交量需放大50%以上,确认信号有效性。

(2)动态参数调整

  • • 波动率自适应:根据近30日波动率动态调整adjust_coeff(波动率高则系数+0.005,低则-0.005);
  • • 周期滚动更新:每月重新计算最优周期(如用近1年数据回测,选择收益最高的周期参数)。

(3)止损止盈

  • • 止损:买入后若股价跌破长期下轨,立即止损;
  • • 止盈:买入后若股价触及长期上轨,止盈50%仓位,剩余仓位用移动止损(短期下轨)持有。

五、总结:薛斯通道的核心价值与适用边界

1. 核心价值

  • • 趋势+区间双重判断:既通过长期通道判断大趋势,又通过短期通道捕捉波段机会;
  • • 自适应波动率:通道宽度随价格波动调整,比布林带更适配中长线趋势;
  • • 交易信号明确:买入/卖出信号基于轨道支撑压力,规则清晰,易量化落地。

2. 适用边界

  • • 适合:中长线趋势明确的标的(蓝筹股、行业龙头)、日线/周线周期、波段交易策略;
  • • 不适合:短线分钟级交易、高波动小盘股、突发消息驱动的标的(通道来不及调整)。

3. 实战口诀

  • • 长轨定方向,短轨找机会;
  • • 上轨抛,下轨吸,破中轨看趋势;
  • • 量价齐破才有效,单破通道是假信号;
  • • 参数跟着波动调,止损别忘长期轨。

薛斯通道的本质是“用自适应区间锁定趋势和波动”,实战中需结合自身交易风格(中长线/波段)调整参数,并搭配风险控制规则,避免机械依赖指标信号。


风险提示:本文仅作为知识分享,模拟测试不构成任何投资建议,不作投资依据。
图片



END
图片
如需策略源文件→扫一扫成为星球会员
图片
如需系统学习Python →好书推荐成为量化高手

 

 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/190231