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

Pine Script自定义VPVR指标调高直方图数量后部分矩形无法绘制求助

问题原因
  • 你遇到的绘制缺失本质是TradingView Pine Script的绘图对象配额限制:v4版本的Pine Script默认对每个脚本可创建的box、line、label这类矢量绘图对象有严格的数量上限,通常为60~70个,超出上限的创建请求会被系统直接丢弃。
  • 你的逻辑中每个直方图需要创建2个box对象,再加2条区间上下沿的line对象:设置27个直方图时总对象数为 272+2=56,未超过阈值所以显示正常;设置34个直方图时总对象数为342+2=70,触及上限导致后续的box无法创建,就出现了柱子缺失的情况。这也符合你测试时删掉一个box调用后阈值提升到54个的现象:54个直方图对应54*1+2=56个对象,刚好在v4的配额内。
解决方案

你可以根据自己的需求任选以下方案解决:

  • 升级到Pine Script v5版本:v5大幅提升了绘图对象配额,默认单脚本最多可创建1000个各类矢量绘图对象,完全能满足你最多50个直方图的需求。仅需将代码开头的//@version=4改为//@version=5,将study()函数替换为v5的indicator()函数,其余逻辑几乎无需修改即可正常运行。
  • 复用绘图对象:如果需要保留v4版本,可以提前用var关键字初始化好足够数量的box、line实例,每次barstate.islast触发时仅修改已有对象的坐标、颜色、宽度属性,不要重复创建新对象,就不会占用额外配额。
  • 改用plot类函数绘制:放弃box对象,使用plotbar()、plot()这类原生绘图函数绘制直方图,这类函数没有实例数量限制,性能更好,也不会出现配额超限的问题。
  • 增加旧对象销毁逻辑:每次创建新的绘图对象前,先把上一轮创建的所有旧box、line对象全部销毁,避免对象累积占用配额。可以用array存储所有创建的绘图对象id,每次barstate.islast触发时先遍历数组调用box.delete()、line.delete()清空旧对象,再创建新对象即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:24:04