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
相关产品推荐
相关产品推荐

