You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linear Regression交易策略无效信号过滤优化方案咨询

基于线性回归的交易信号过滤优化需求

我用线性回归构建了多空交易信号,但无法过滤长趋势里的无效中间警报。试过RSI等指标,但不同时段信号不匹配,想找基于K线直接过滤的优化方案。

原代码

// Linear regression Candels

signal_length_o = input.int(title="Signal Smoothing", minval = 1, maxval = 200, defval = 7, group="Humble LinReg Candles")
sma_signal_o = input.bool(title="Simple MA (Signal Line)", defval=true, group="Humble LinReg Candles")

lin_reg = input.bool(title="Lin Reg", defval=true, group="Humble LinReg Candles")
linreg_length = input.int(title="Linear Regression Length", minval = 1, maxval = 200, defval = 5, group="Humble LinReg Candles")

bopen = lin_reg ? ta.linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? ta.linreg(high, linreg_length, 0) : high
blow = lin_reg ? ta.linreg(low, linreg_length, 0) : low
bclose = lin_reg ? ta.linreg(close, linreg_length, 0) : close

r = bopen < bclose

signal_o = sma_signal_o ? ta.sma(bclose, signal_length_o) : ta.ema(bclose, signal_length_o)

plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color=color.green, wickcolor=color.green, bordercolor=color.green, editable= true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable= true)

plot(signal_o, color=color.white)


plotchar(

     signal_o[3] > signal_o[2] and           // 3. K线 > 2. K线
     signal_o[2] > signal_o[1] and           // 2. K线 > 1. K线
     signal_o[1] >= signal_o[0] and          // 前一根信号 >= 当前信号
     bopen < signal_o and                    // 开盘价 < 信号线
     bopen[1] > bclose[1] and                // 前一根K线收阴
     bopen[0] < bclose[0] and                // 当前K线收阳
       
     not ta.cross(open[1], signal_o) and  
     not ta.cross(low[1], signal_o) and 
     not ta.cross(open, signal_o) and 
     not ta.cross(low, signal_o)     
    
     , "Buy", "O", location.bottom, color.lime, size = size.tiny)

plotchar(

     signal_o[3] < signal_o[2] and           // 3. K线 < 2. K线 
     signal_o[2] < signal_o[1] and           // 2. K线 < 1. K线 
     signal_o[1] <= signal_o[0] and          // 前一根信号 <= 当前信号 
     bopen > signal_o and                    // 开盘价 > 信号线 
     bopen[1] < bclose[1] and                // 前一根K线收阳 
     bopen[0] > bclose[0] and                // 当前K线收阴

     not ta.cross(close[1], signal_o) and
     not ta.cross(high[1], signal_o) and
     not ta.cross(open, signal_o) and
     not ta.cross(high, signal_o)
     
     , "Sell", "O", location.top, color.red,  size = size.tiny)

基于K线的过滤优化方案

1. 核心优化思路

从K线本身的趋势一致性、信号重复度、实体强度三个维度过滤无效信号,完全基于线性回归K线数据实现,无需依赖其他指标。

2. 优化后的代码示例

// Linear regression Candels 优化版
signal_length_o = input.int(title="Signal Smoothing", minval = 1, maxval = 200, defval = 7, group="Humble LinReg Candles")
sma_signal_o = input.bool(title="Simple MA (Signal Line)", defval=true, group="Humble LinReg Candles")

lin_reg = input.bool(title="Lin Reg", defval=true, group="Humble LinReg Candles")
linreg_length = input.int(title="Linear Regression Length", minval = 1, maxval = 200, defval = 5, group="Humble LinReg Candles")

// 新增过滤参数组
trend_length = input.int(title="趋势确认周期", minval=5, maxval=50, defval=20, group="过滤设置")
filter_same_dir = input.bool(title="过滤同方向重复信号", defval=true, group="过滤设置")
min_body_ratio = input.float(title="最小实体/平均实体比例", minval=0.5, maxval=3.0, defval=1.2, group="过滤设置")

bopen = lin_reg ? ta.linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? ta.linreg(high, linreg_length, 0) : high
blow = lin_reg ? ta.linreg(low, linreg_length, 0) : low
bclose = lin_reg ? ta.linreg(close, linreg_length, 0) : close

r = bopen < bclose
signal_o = sma_signal_o ? ta.sma(bclose, signal_length_o) : ta.ema(bclose, signal_length_o)

// 1. 长周期趋势一致性过滤
long_trend = ta.linreg(bclose, trend_length, 0) > ta.linreg(bclose, trend_length, 1)
short_trend = ta.linreg(bclose, trend_length, 0) < ta.linreg(bclose, trend_length, 1)

// 2. K线实体强度过滤
body_size = math.abs(bclose - bopen)
avg_body_size = ta.sma(body_size, 10)
strong_body = body_size >= avg_body_size * min_body_ratio

// 3. 同方向信号去重
var int last_signal = 0 // 1=多头信号, -1=空头信号, 0=无信号

// 原始信号条件 + 过滤规则
final_buy = signal_o[3] > signal_o[2] and 
     signal_o[2] > signal_o[1] and 
     signal_o[1] >= signal_o[0] and 
     bopen < signal_o and 
     bopen[1] > bclose[1] and 
     bopen[0] < bclose[0] and 
     not ta.cross(open[1], signal_o) and  
     not ta.cross(low[1], signal_o) and 
     not ta.cross(open, signal_o) and 
     not ta.cross(low, signal_o) and
     long_trend and // 匹配长周期多头趋势
     strong_body and // 强实体确认反转力度
     (not filter_same_dir or last_signal != 1) // 避免同方向重复信号

final_sell = signal_o[3] < signal_o[2] and 
     signal_o[2] < signal_o[1] and 
     signal_o[1] <= signal_o[0] and 
     bopen > signal_o and 
     bopen[1] < bclose[1] and 
     bopen[0] > bclose[0] and
     not ta.cross(close[1], signal_o) and
     not ta.cross(high[1], signal_o) and
     not ta.cross(open, signal_o) and
     not ta.cross(high, signal_o) and
     short_trend and // 匹配长周期空头趋势
     strong_body and // 强实体确认反转力度
     (not filter_same_dir or last_signal != -1) // 避免同方向重复信号

// 更新最后信号状态
if final_buy
    last_signal := 1
elif final_sell
    last_signal := -1

// 绘图部分
plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color=color.green, wickcolor=color.green, bordercolor=color.green, editable= true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable= true)

plot(signal_o, color=color.white)
plot(ta.linreg(bclose, trend_length, 0), color=color.blue, title="长周期趋势线")

plotchar(final_buy, "Buy", "O", location.bottom, color.lime, size = size.tiny)
plotchar(final_sell, "Sell", "O", location.top, color.red,  size = size.tiny)

3. 优化说明

  • 趋势一致性过滤:通过更长周期的线性回归趋势线确认当前信号与大方向一致,过滤逆势的无效反弹信号
  • 实体强度过滤:仅保留实体大于近期平均实体一定比例的信号,过滤弱反转的假信号
  • 同方向去重:记录上一次信号方向,避免在同一趋势内连续触发重复信号,减少长趋势中的中间警报

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:12:50