You need to enable JavaScript to run this app. TradingView Pine Script如何实现历史紫色POC线条持续延伸?
优惠活动
大模型
产品
解决方案
定价
更多

TradingView Pine Script如何实现历史紫色POC线条持续延伸?

核心问题根因
  • 现有脚本仅用单个p_poc变量存储最新的前一日POC值,每次跨交易日p_poc都会被更新为新价格,历史pdPOC对应的旧价格值会被直接覆盖,没有对应的系列值支撑旧线。哪怕开启trackprice,也只会跟随最新的p_poc值,旧历史线会在p_poc更新的位置直接断开消失,无法持续右伸。
  • 原有plot传参逻辑存在偏差:把change(p_poc) ? na : color.purple写在颜色参数位置,仅控制线的显示颜色,没有修改plot的核心系列值(第一个传入参数)。p_poc跳变时,旧价格位置的系列值会被新值替换,旧线没有留存基础。
  • Pine v4的trackprice生效规则为:当plot的系列值在某根bar上输出固定非空价格,且后续该系列值不再跳变时,才会从这根bar开始把固定价格线一直拉到图表最右边缘。单个plot的系列值会跟随p_poc不断跳变,天然无法留存多条历史价格线。
实现持续延伸的修改方案
  1. 替换单变量p_poc逻辑,用两个数组分别存储每一个历史pdPOC的价格、以及该pdPOC被锁定的bar位置,限制数组长度避免触发Pine运行时内存上限(通常最多存30-50条历史线即可满足使用需求)。
  2. 利用Pine v4静态编译的特性,预先声明固定数量的plot,每个plot对应数组中存储的一条历史pdPOC。每个plot的系列值逻辑为:当当前bar索引超过该pdPOC被锁定的位置时,输出对应的固定pdPOC价格,否则输出na。
  3. 给所有对应历史pdPOC的plot开启trackprice=true属性,让每条线从自己被锁定的bar位置开始,持续向右延伸到图表最右侧。
  4. 保留原有的最新pdPOC标签绘制逻辑,对应数组里最新存储的pdPOC值即可。
核心修改代码片段
// 原有d_poc计算逻辑全部保留
d_poc := poc_index * tick_size + a_min

// 新增:历史pdPOC存储逻辑,最多保留30条
var array<float> pdPOC_list = array.new_float()
var array<int> pdPOC_time = array.new_int()

if is_new_bar(dtf)
    // 新交易日启动时,锁定前一日的最终POC值和对应bar位置
    array.unshift(pdPOC_list, d_poc[1])
    array.unshift(pdPOC_time, bar_index[1])
    // 超出最大存储数时移除最早的记录,避免内存超限
    if array.size(pdPOC_list) > 30
        array.pop(pdPOC_list)
        array.pop(pdPOC_time)

// 替换原有单条plot逻辑,逐一生成对应历史pdPOC的独立plot
// 最新的pdPOC线
plot(bar_index >= nz(array.get(pdPOC_time, 0), bar_index + 1) ? array.get(pdPOC_list, 0) : na, 
     "pdPOC_Latest", color=color.purple, trackprice=true, offset=0)
// 上一交易日的pdPOC线,透明度调低避免视觉杂乱
plot(bar_index >= nz(array.get(pdPOC_time, 1), bar_index + 1) ? array.get(pdPOC_list, 1) : na, 
     "pdPOC_History1", color=color.new(color.purple, 80), trackprice=true, offset=0)
plot(bar_index >= nz(array.get(pdPOC_time, 2), bar_index + 1) ? array.get(pdPOC_list, 2) : na, 
     "pdPOC_History2", color=color.new(color.purple, 80), trackprice=true, offset=0)
// 按照上述格式,重复写满需要的30条历史线plot即可

// 保留原有标签逻辑,仅绑定最新pdPOC
plotshape(array.size(pdPOC_list) > 0 ? array.get(pdPOC_list, 0) : na, 
     style=shape.labeldown, location=location.absolute, 
     color=color.purple, textcolor=color.white, 
     show_last=1, text="pdPOC", offset = offset_val, 
     transp=20, title="pdPOC")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 04:24:04