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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:50:21