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

如何编写正确的Pine Script预警条件检测i_colUp与i_colDown颜色切换?

问题描述

我有一段Pine Script指标代码:

string INLINE_COL = "Colour Pallette"
i_colUp     = input( color.teal,    "Colour Pallette  ",    input.color,    group = GROUP_CAND, inline = INLINE_COL )
i_colDown   = input( color.red,     " ",                    input.color,    group = GROUP_CAND, inline = INLINE_COL )

我需要实现当用户切换i_colUp或i_colDown的颜色时触发预警,尝试了以下代码但出现编译错误:

// Track color changes
colorChanged = crossover(i_colUp, i_colDown)

// Create alert condition
if colorChanged
    alertcondition("Color has changed from (" + tostring(color.rgb(i_colUp)[0]) + "," + tostring(color.rgb(i_colUp)[1]) + "," + tostring(color.rgb(i_colUp)[2]) + ") to (" + tostring(color.rgb(i_colDown)[0]) + "," + tostring(color.rgb(i_colDown)[1]) + "," + tostring(color.rgb(i_colDown)[2]) + ")")

请问如何编写正确的预警条件代码?


解决方法

错误原因分析

  1. crossover()是用于数值序列交叉检测的函数,不能直接用于对比color类型的输入变量,输入变量属于静态配置项,需要追踪历史值才能检测变化。
  2. alertcondition()语法错误:它的第一个参数必须是布尔触发条件,而非直接传入字符串,且需要通过title和message参数定义预警内容。

正确实现代码

完整可运行代码

//@version=5
indicator("颜色变更预警", overlay=true)

GROUP_CAND = "K线颜色配置"
string INLINE_COL = "Colour Pallette"
i_colUp     = input( color.teal,    "Colour Pallette  ",    input.color,    group = GROUP_CAND, inline = INLINE_COL )
i_colDown   = input( color.red,     " ",                    input.color,    group = GROUP_CAND, inline = INLINE_COL )

// 用var关键字初始化并保存历史颜色配置
var color prev_colUp = i_colUp
var color prev_colDown = i_colDown

// 检测颜色是否发生变更
colorChanged = prev_colUp != i_colUp or prev_colDown != i_colDown

// 仅在颜色变更时更新历史值,避免重复触发
if colorChanged
    prev_colUp := i_colUp
    prev_colDown := i_colDown

// 定义预警条件与提示内容
alertcondition(colorChanged, 
               title="颜色配置已变更", 
               message="上涨K线颜色:" + tostring(prev_colUp) + " → " + tostring(i_colUp) + "\n下跌K线颜色:" + tostring(prev_colDown) + " → " + tostring(i_colDown))

关键说明

  • var关键字用于初始化一次变量,持续保存上一次的颜色配置值,实现历史与当前值的对比。
  • Pine Script支持直接用!=对比color类型变量,无需手动解析RGB值。
  • alertcondition()的标准用法:第一个参数为布尔触发条件,title定义预警标题,message自定义预警详情。

内容的提问来源于stack exchange,提问作者Al H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:33:19