TAStatistics
TA.LINEARREG() - 线性回归
线性回归 (Linear Regression)
计算线性回归值,用于预测趋势方向和识别价格偏离。
语法
python
TA.LINEARREG(close, timeperiod=14)参数
| 参数名 | 类型 | 必选 | 默认值 | 说明 |
|---|---|---|---|---|
| close | any | 否 | - | 收盘价数组 |
| timeperiod | any | 否 | - | 回归周期,默认 14 |
返回值
返回线性回归值数组,表示给定周期内的线性拟合值。
计算方法
线性回归使用最小二乘法拟合一条直线:
plaintext
y = a + b×x
其中:
a = 截距 (intercept)
b = 斜率 (slope)
x = 时间索引
y = 回归值回归线代表了数据的趋势方向,可用于:
- 判断趋势方向(斜率正负)
- 识别超买超卖(价格偏离回归线)
- 预测未来价格走势
信号解读
价格与回归线关系
- 价格 > 回归线:价格高于趋势,可能超买
- 价格 < 回归线:价格低于趋势,可能超卖
- 价格回归回归线:均值回归信号
趋势判断
- 回归线斜率 > 0:上升趋势
- 回归线斜率 < 0:下降趋势
- 回归线斜率 ≈ 0:横盘震荡
基础示例
价格偏离检测
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 50:
Sleep(1000)
continue
closes = [r['Close'] for r in records]
# 计算14周期线性回归
lr = TA.LINEARREG(closes, 14)
current_price = closes[-1]
# 价格偏离回归线
deviation = current_price - lr[-1]
deviation_percent = (deviation / lr[-1]) * 100
Log(f"当前价格: {current_price}")
Log(f"回归值: {lr[-1]:.2f}")
Log(f"偏离: {deviation_percent:.2f}%")
# 判断超买超卖
if deviation_percent > 5:
Log("⚠️ 价格显著高于回归线,可能超买")
elif deviation_percent < -5:
Log("💡 价格显著低于回归线,可能超卖")
else:
Log("📊 价格接近回归线,正常")
Sleep(60000)高级应用
均值回归交易策略
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 100:
Sleep(1000)
continue
closes = [r['Close'] for r in records]
# 线性回归及标准差
lr = TA.LINEARREG(closes, 20)
stddev = TA.STDDEV(closes, 20)
current_price = closes[-1]
# 计算价格偏离(以标准差为单位)
deviation_std = (current_price - lr[-1]) / stddev[-1]
Log(f"偏离度: {deviation_std:.2f}个标准差")
# 均值回归策略
if deviation_std < -2:
Log("✅ 价格远低于回归线(< -2σ),买入信号")
# exchange.Buy(...)
elif deviation_std > 2:
Log("❌ 价格远高于回归线(> +2σ),卖出信号")
# exchange.Sell(...)
elif abs(deviation_std) < 0.5:
Log("💰 价格回归回归线,考虑平仓")
Sleep(60000)线性回归通道策略
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 100:
Sleep(1000)
continue
closes = [r['Close'] for r in records]
current_price = closes[-1]
# 线性回归及标准差
lr = TA.LINEARREG(closes, 50)
stddev = TA.STDDEV(closes, 50)
# 构建线性回归通道
upper_band = lr[-1] + 2 * stddev[-1]
middle_band = lr[-1]
lower_band = lr[-1] - 2 * stddev[-1]
Log(f"上轨: {upper_band:.2f}")
Log(f"回归线: {middle_band:.2f}")
Log(f"下轨: {lower_band:.2f}")
Log(f"当前价格: {current_price:.2f}")
# 通道交易
if current_price > upper_band:
Log("⚠️ 突破上轨,强势信号")
elif current_price < lower_band:
Log("💡 跌破下轨,弱势信号或超卖")
elif current_price > middle_band:
Log("📈 价格在回归线上方")
else:
Log("📉 价格在回归线下方")
Sleep(60000)参数优化建议
| 周期 | 推荐值 | 适用场景 |
|---|---|---|
| 短期 | 10-14 | 短线交易、快速反应 |
| 中期 | 20-30 | 波段交易、趋势跟踪 |
| 长期 | 50-100 | 长线投资、主趋势判断 |
与其他指标配合
线性回归 + 斜率
python
lr = TA.LINEARREG(closes, 20)
slope = TA.LINEARREG_SLOPE(closes, 20)
# 上升趋势 + 价格低于回归线
if slope[-1] > 0 and closes[-1] < lr[-1]:
Log("上升趋势中的回调,买入机会")线性回归 + RSI
python
lr = TA.LINEARREG(closes, 20)
rsi = TA.RSI(closes, 14)
# 价格低于回归线 + RSI超卖
if closes[-1] < lr[-1] and rsi[-1] < 30:
Log("双重确认超卖")线性回归 + MACD
python
lr = TA.LINEARREG(closes, 20)
macd = TA.MACD(closes, 12, 26, 9)
# 回归线向上 + MACD金叉
if lr[-1] > lr[-2] and macd[0][-1] > macd[1][-1]:
Log("趋势 + 动量双重确认")注意事项
- 滞后性:线性回归是滞后指标,不能预测突发变化
- 趋势市场:在强趋势市场更有效
- 震荡市场:横盘时回归线可能失效
- 周期选择:周期越长越平滑但越滞后
- 偏离度量:建议用标准差标准化偏离
- 配合使用:不应单独使用,需结合其他指标
- 突发事件:重大新闻会使价格快速偏离回归线
相关指标
- LINEARREG_SLOPE - 线性回归斜率
- LINEARREG_ANGLE - 线性回归角度
- LINEARREG_INTERCEPT - 线性回归截距
- TSF - 时间序列预测
- STDDEV - 标准差
实战要点
买入信号
✅ 价格低于回归线 2 个标准差 ✅ 上升趋势中价格回调至回归线 ✅ 价格触及下轨后反弹
卖出信号
❌ 价格高于回归线 2 个标准差
❌ 下降趋势中价格反弹至回归线
❌ 价格触及上轨后回落
风险控制
- 偏离过大时谨慎追涨杀跌
- 设置止损在通道之外
- 结合趋势指标判断方向
- 注意假突破风险