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

Pine Script代码问题:如何保留多空信号触发的历史Box?

问题根源

你代码里的Box_orginal_l、tp_up_l、Box_orginal、tp_down_l都用了var关键字声明。var在Pine Script里的作用是仅在脚本首次运行时初始化变量一次,后续每次触发信号时,都是修改同一个Box对象的属性,相当于把旧的Box位置和样式覆盖了,自然只会显示最后一次信号对应的Box。

解决方法

去掉所有Box变量前的var关键字,让每次触发信号时都创建新的Box实例,这样每个信号都会生成独立的Box,不会互相覆盖。

修改后的完整代码:

if Box_bool and longCondition
    enter_box       = ta.valuewhen(longCondition, (close + open) / 2, 0)
    Stop_box        = ta.valuewhen(longCondition, filt, 0)
    // 去掉var,每次触发时新建多单止损Box
    Box_orginal_l = box.new(bar_index[1], enter_box, bar_index + 40, Stop_box, border_color = #2196f310)
    box.set_bgcolor(Box_orginal_l, #5c1b24a5)

    // 去掉var,复制新的多单止盈Box
    tp_up_l = box.copy(Box_orginal_l) 
    box.set_rightbottom(tp_up_l, bar_index + 40, enter_box - ((Stop_box - enter_box) * rr_))
    box.set_bgcolor(tp_up_l, #00ffb330)

if Box_bool and shortCondition
    enter_box       = ta.valuewhen(shortCondition, (close + open) / 2, 0)
    Stop_box        = ta.valuewhen(shortCondition, filt, 0)
    // 去掉var,新建空单止损Box
    Box_orginal = box.new(bar_index[1], enter_box, bar_index + 40, Stop_box, border_color = #2196f310)
    box.set_bgcolor(Box_orginal, #5c1b24a5)

    // 去掉var,复制新的空单止盈Box
    tp_down_l = box.copy(Box_orginal)
    box.set_lefttop(tp_down_l, bar_index[1], enter_box + ((enter_box - Stop_box) * rr_))
    box.set_rightbottom(tp_down_l, bar_index + 40, enter_box)
    box.set_bgcolor(tp_down_l, #043b37a5)
额外优化提示
  • 原代码里box.new初始用了无关的bar_index, high, bar_index, low参数,修改后直接在创建时传入正确的位置参数,减少了后续box.set_*的冗余调用,代码更简洁。
  • 如果担心信号过多导致Box堆积影响性能,可以配合box.delete()在Box超出图表显示范围时删除旧实例,短周期信号场景下一般无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:02:45