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

