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

如何限制box.all与line.all仅删除LuxAlgo脚本的图形对象?

解决TradingView脚本中box.all/line.all误删自定义对象的问题

核心问题是box.all和line.all会返回当前脚本内创建的所有箱体/线条对象,LuxAlgo原脚本用这两个全局遍历删除旧对象时,会误删私有指标的同类对象。以下是具体解决办法:

1. 替换全局遍历,用数组跟踪LuxAlgo专属对象

这是最彻底的解决方案,直接修改LuxAlgo脚本的对象管理逻辑:

  • 在LuxAlgo代码块开头,定义全局数组用于存储自身创建的箱体和线条:
    var luxBoxes = array.new_box()
    var luxLines = array.new_line()
    
  • 找到LuxAlgo中所有创建箱体/线条的代码,把创建的对象存入对应数组:
    比如原代码box.new(...)改成:
    newBox = box.new(...)
    array.push(luxBoxes, newBox)
    
  • 修改删除旧对象的循环,从遍历全局对象改为遍历专属数组:
    原代码的删除循环:
    for b in box.all
        box.delete(b)
    
    替换为:
    // 删除所有LuxAlgo箱体
    for i = 0 to array.size(luxBoxes) - 1
        box.delete(array.get(luxBoxes, i))
    array.clear(luxBoxes) // 清空数组准备存储新对象
    
    线条的修改逻辑完全一致,对应luxLines数组。

2. 给私有指标对象单独做数组跟踪

如果暂时不想大改LuxAlgo代码,也可以对私有指标的对象做隔离管理:

  • 为私有指标的箱体和线条创建独立的全局数组:
    var privateBoxes = array.new_box()
    var privateLines = array.new_line()
    
  • 每次创建私有对象时存入数组,删除时只操作这个数组,避免被LuxAlgo的全局删除影响。不过这种方法只能保护私有对象,LuxAlgo的逻辑还是会删除全局对象,所以更推荐第一种方法。

3. 用函数封装隔离两个模块的逻辑

把LuxAlgo代码和私有指标代码分别封装成独立函数,各自维护自己的对象数组,彻底实现逻辑隔离:

  • LuxAlgo函数内只管理自身的box/line数组,私有函数同理,两个模块的对象完全不会互相干扰。

关键注意点

TradingView的Pine Script中,box.all和line.all是全局作用域的,只要是当前脚本创建的同类对象都会被返回,所以必须用数组跟踪专属对象来替代全局遍历,才能实现对象的隔离管理。

内容的提问来源于stack exchange,提问作者Mido Gamal Azzouz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:43:31