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

在日线图绘制周线Linear Regression Channel时起点异常求助

问题分析与解决方案

核心问题

你遇到的起始点错误、lineStart3恒定不变的原因有两个:

  1. lineStart3是周线图的bar_index,在日线图的整周交易日内,这个值不会变化,所以看起来始终恒定。
  2. 画线时用bar_index - (len3 - 1)完全错误——len3是周线周期(21周),不是日线周期,这样计算出来的起始点是21个日线bar前,而非21周前的位置。

修正后的代码

//@version=5
indicator("Weekly LRC on Daily", overlay=true)

// LRC 函数:仅计算通道核心参数
get_channel(src, len) =>
    mid = math.sum(src, len) / len
    slope = ta.linreg(src, len, 0) - ta.linreg(src, len, 1)
    intercept = mid - slope * math.floor(len / 2) + (1 - len % 2) / 2 * slope
    endy = intercept + slope * (len - 1)
    dev = 0.0
    for x = 0 to len - 1 by 1
        dev := dev + math.pow(src[x] - (slope * (len - x) + intercept), 2)
    dev := math.sqrt(dev / len)
    [intercept, endy, dev, slope]

// 输入参数
showLR3      = input.bool(true,    'LR 3 -', inline = 'lr3', group = 'Linear Regression')
src3         = input.source(close, 'Source', inline = 'lr3', group = 'Linear Regression')
len3         = input.int(21,      'Length (Weeks)', inline = 'lr3', group = 'Linear Regression')

// 请求周线数据:通道参数 + 时间边界
weekly_data = request.security(syminfo.tickerid, 'W', [
    get_channel(src3, len3),
    time,  // 当前周线bar的起始时间
    ta.valuewhen(barstate.islast, time, len3 - 1)  // len3周前的周线起始时间
])

// 解构数据
[y1_3, y2_3, dev3, slope3, current_week_start, channel_start_time] = weekly_data

// 将周线时间转换为日线图的bar_index
channel_start_bar = ta.barssince(time == channel_start_time)
current_week_end_bar = ta.barssince(time_close == current_week_start + timeframe.multiplier * 60 * 60 * 24)

// 容错处理:避免ta.barssince返回na导致错误
channel_start_bar := na(channel_start_bar) ? bar_index - len3 * 5 : channel_start_bar
current_week_end_bar := na(current_week_end_bar) ? bar_index : current_week_end_bar

// 绘制通道线
var reglines3 = array.new_line(3)
if showLR3
    // 删除旧线
    for x = 0 to 2 by 1
        line.delete(array.get(reglines3, x))
    // 计算三条轨的y值
    y_upper = y1_3 + dev3 * 2
    y_mid = y1_3
    y_lower = y1_3 - dev3 * 2
    // 上轨
    array.set(reglines3, 0, line.new(x1=channel_start_bar, y1=y_upper, x2=current_week_end_bar, y2=y_upper + slope3 * len3, color=#ffb74d, style=line.style_dashed, width=1, extend=extend.none, force_overlay=true))
    // 中轨
    array.set(reglines3, 1, line.new(x1=channel_start_bar, y1=y_mid, x2=current_week_end_bar, y2=y_mid + slope3 * len3, color=#ffb74d, style=line.style_solid, width=1, extend=extend.none, force_overlay=true))
    // 下轨
    array.set(reglines3, 2, line.new(x1=channel_start_bar, y1=y_lower, x2=current_week_end_bar, y2=y_lower + slope3 * len3, color=#ffb74d, style=line.style_dashed, width=1, extend=extend.none, force_overlay=true))

// 可选:标记通道起始点
plotshape(channel_start_bar, title="Channel Start", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)

关键修改说明

  1. 移除了get_channel中的lineStart逻辑,避免周线与日线bar_index的混淆。
  2. 通过request.security获取周线的时间边界(起始/结束时间),转换为日线图的bar_index,确保通道严格对应21周的时间范围。
  3. 修正了通道线的y值计算逻辑,中轨终点值匹配周线斜率的累积变化量。
  4. 添加容错处理,防止时间转换时出现na值导致的画线错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:17:09