Pinescript背景色随蜡烛收盘价回撤消失,如何保留已着色背景?
解决Pine Script背景色随价格回撤消失的问题
你的问题出在原代码的判断逻辑上:closeHigher = (close > high[1])是基于当前K线的实时收盘价判断,当价格回撤导致收盘价低于前一根K线高点时,条件不再成立,背景色就会变为na从而消失。要实现触发后保留背景色,需要用状态变量记录信号触发历史,一旦触发就保持着色状态。
方案一:当前K线触发后永久保留着色(直到下一根K线)
适合你的实时需求,只要当前K线曾经触发过上穿前高的条件,就一直显示背景色,不会因价格回撤消失:
//@version=5 strategy(title="Crossup", calc_on_every_tick=true, overlay=true) // 声明持久化变量,记录当前K线是否触发过信号 var bool currentBarTriggered = false // 每根新K线开始时重置状态 if barstate.isnew currentBarTriggered := false // 价格上穿前一根K线高点时,标记当前K线已触发 if close > high[1] currentBarTriggered := true // 根据触发状态设置背景色,触发后保持着色 bgcolor(color=currentBarTriggered ? color.rgb(6, 46, 8, 56) : na)
方案二:所有触发过信号的K线永久保留着色
如果需要让所有曾经触发过信号的K线都保留背景色(即使后续K线),可以用数组记录每根K线的触发状态:
//@version=5 strategy(title="Crossup", calc_on_every_tick=true, overlay=true) // 用数组存储每根K线的触发状态 var bool[] triggeredBars = array.new_bool() // 确保数组长度匹配当前K线索引 if bar_index >= array.size(triggeredBars) array.push(triggeredBars, false) // 触发信号时标记当前K线 if close > high[1] array.set(triggeredBars, bar_index, true) // 根据数组中的状态设置背景色 bgcolor(color=array.get(triggeredBars, bar_index) ? color.rgb(6, 46, 8, 56) : na)
代码说明
- 方案一通过
var声明持久化变量,配合barstate.isnew实现每根K线独立的状态管理,触发后状态不会因价格回撤重置 - 方案二用数组记录每根K线的触发历史,实现永久保留所有触发过信号的K线背景色
内容的提问来源于stack exchange,提问作者Javg
相关产品推荐
相关产品推荐

