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

PineScript v5周线hlc3均值指标无法在日线图实时延续绘制问题

解决日线图实时显示3周HLC3均值的问题

你的脚本核心问题是使用了timeframe="1W"参数,导致指标在周线周期运行——周线bar仅每周生成一个,当前周未结束时不会向日线图推送实时数据,只有周线闭合后才会显示完整数值。要实现实时更新,需在日线级别直接计算周线维度的HLC3值。

修正后的PineScript v5脚本

//@version=5
indicator("WeeklyZones", overlay=true)

// 标记每周第一个交易日
isNewWeek = ta.newbar(timeframe.weekly)

// 存储已结束周的HLC3值,最多保留2个(加上当前周凑3周)
var float[] finishedWeekHLC3 = array.new_float()

// 每周初计算上周的完整HLC3并存入数组
if isNewWeek
    // 取上周的最高、最低、收盘价计算HLC3
    weeklyHigh = ta.highest(ta.high, 7)
    weeklyLow = ta.lowest(ta.low, 7)
    weeklyClose = ta.close[1]
    lastWeekHLC3 = (weeklyHigh + weeklyLow + weeklyClose) / 3
    
    array.unshift(finishedWeekHLC3, lastWeekHLC3)
    // 数组长度超过2时移除最旧的周数据
    if array.size(finishedWeekHLC3) > 2
        array.pop(finishedWeekHLC3)

// 实时计算当前周的HLC3(随交易日推进更新)
currentWeekBarCount = ta.barssince(isNewWeek) + 1
currentWeekHigh = ta.highest(ta.high, currentWeekBarCount)
currentWeekLow = ta.lowest(ta.low, currentWeekBarCount)
currentWeekHLC3 = (currentWeekHigh + currentWeekLow + ta.close) / 3

// 合并当前周+最近2个已结束周的HLC3,计算均值
var float[] threeWeeksHLC3 = array.new_float()
array.clear(threeWeeksHLC3)
array.push(threeWeeksHLC3, currentWeekHLC3)
// 加入已结束的周数据(最多2个)
for i = 0 to math.min(array.size(finishedWeekHLC3)-1, 1)
    array.push(threeWeeksHLC3, array.get(finishedWeekHLC3, i))

wP3 = array.avg(threeWeeksHLC3)

// 绘制指标,保留原脚本的offset设置
plot(wP3, color=color.red, offset=1)

关键逻辑说明

  • 周线切换识别:用ta.newbar(timeframe.weekly)精准定位每周第一个交易日,以此分割已结束周和当前周。
  • 已结束周数据存储:每周初自动计算上周完整的HLC3值,存入数组并保持最多2条数据。
  • 当前周实时计算:随每个日线bar更新,取当前周以来的最高、最低价和最新收盘价,实时生成当前周的HLC3。
  • 3周均值计算:合并当前周实时数据与最近2个已结束周的数据,计算均值并实时绘制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:05:11