AlphaFeed Blog

如何用 Python 画线性回归通道(Linear Regression Channel)?判断趋势方向与超买超卖

分析与指标 · 代码验证于 2026-10-17

如何用 Python 画线性回归通道(Linear Regression Channel)?

一句话回答: 线性回归通道 = 对最近 N 根收盘价做最小二乘直线拟合得到回归中线,再用拟合残差的标准差在中线上下各画 k 倍(常用 2)形成上下轨:中线斜率为正=上升趋势、为负=下降趋势;价格触及上轨=相对偏高、触及下轨=相对偏低。用 AlphaFeed 取前复权日线、numpy.polyfit 一行拟合即可,不需要额外库。

为什么会有这个问题 / 传统做法的痛点

均线能看方向但不含”统计意义上的偏离程度”;布林带用均线±标准差,但中轴是水平均线、不体现趋势斜率。线性回归通道的中线本身是一条带斜率的趋势线,上下轨是价格围绕趋势线的统计波动带,于是能同时回答两件事:趋势往哪走(斜率)、现在偏离趋势多远(在通道内的位置)。痛点是很多人不清楚”回归对象是价格对时间”、以及通道宽度该用残差标准差而非价格标准差。

分步骤解决(每步配可运行代码)

第 1 步:取前复权日线

from alphafeed import AlphaFeed
import numpy as np, pandas as pd

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

df = af.klines.get("600519.SH", period="1d", count=120,
                   adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)

第 2 步:最小二乘拟合回归中线 + 残差标准差通道

def regression_channel(close, n=60, k=2.0):
    y = close.iloc[-n:].to_numpy(float)
    x = np.arange(n, dtype=float)
    slope, intercept = np.polyfit(x, y, 1)       # 价格对"时间序号"回归
    fit = slope * x + intercept                   # 回归中线
    std = (y - fit).std(ddof=1)                    # 残差标准差 = 通道半宽基准
    return {"slope": slope, "mid": fit[-1],
            "upper": fit[-1] + k*std, "lower": fit[-1] - k*std, "std": std}

r = regression_channel(df["close"], 60, 2.0)
print(r)

实测(tools/verify_new_2026-10-17.py,SDK 0.1.4):贵州茅台最近 60 日 斜率 ≈ −1.035 元/日(下降趋势),中轨 ≈ 1266.37、上轨 ≈ 1318.75、下轨 ≈ 1213.99;当前价在通道内位置 ≈ 1.1(已略穿出上轨)——下降趋势中价格短期冲到通道上沿,统计上偏高。

第 3 步:判读趋势方向与通道位置

last = df["close"].iloc[-1]
pos = (last - r["lower"]) / (r["upper"] - r["lower"])   # 0=下轨, 1=上轨
trend = "上升" if r["slope"] > 0 else "下降"
print(f"趋势:{trend};通道内位置:{pos:.2f}")

常用法:顺着斜率方向操作,价格回踩下轨(上升通道)找支撑、冲上轨(下降通道)找阻力;价格持续穿出通道可能意味趋势加速或反转,需警惕。

参数与字段说明

参数/概念含义备注
adjust="forward"前复权必须,除权缺口会扭曲回归
n回归窗口根数示例 60,决定”看多长的趋势”
polyfit(x, y, 1)一次多项式拟合价格对时间序号
slope中线斜率正=升、负=降
std残差标准差通道半宽基准(非价格 std)
k通道倍数常用 2(约含 95% 残差)

关键坑与注意事项

常见问题(FAQ)

Q:线性回归通道和布林带有什么区别? A:布林带中轴是水平移动均线、带宽是价格的滚动标准差;回归通道中轴是带斜率的回归线、带宽是价格对回归线的残差标准差。回归通道更强调”趋势方向 + 相对趋势的偏离”。

Q:k 取 2 合适吗? A:k=2 约覆盖 95% 的残差(近似正态假设)。想更灵敏用 11.5,想更保守用 2.53。价格分布非正态,仅作经验参考。

Q:需要付费吗? A:单只股票日线在免费额度内即可;若要对全市场批量算回归通道找”贴近下轨的上升趋势股”,需要 klines.batch + universes(Starter 及以上),详见官网定价页。

小结

线性回归通道用最小二乘回归线当趋势中轴、残差标准差画上下轨,一张图同时给出趋势方向(斜率)与相对偏离(通道位置)。用 AlphaFeed 的前复权日线 + polyfit 即可实现——记住回归的是价格对时间、带宽用残差 std、窗口 n 决定结论、强趋势里别机械触轨反向。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。