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

如何将TradingView指标的复选框参数改为单选下拉菜单

TradingView指标:将复选框改为单选下拉菜单实现分组设置

当前你的TradingView指标使用多个复选框控制不同交叉条件下的蜡烛背景色,现在需要替换为单选下拉菜单,实现分组选择仅显示一种交叉信号背景的功能。以下是你的原始代码:

// Determine crossover conditions
crossAbove = crossover(slowMA, mid)

bgcolor(color= crossAbove ? color.green : na, transp = 50, title = " Show All Candle Crosses Above S-Line")

// Determine STRONG crossunder conditions
crossBelowStrong = crossunder(slowMA, mid)  and (mid < 50) 

bgcolor(color= crossBelowStrong ? color.red : na, transp = 50,  title = "Show Candle Cross Below S-Line When Below 50" )

// Determine STRONG crossover conditions
crossAboveStrong = crossover(slowMA, mid) and (mid > 50) 

bgcolor(color= crossAboveStrong ? color.green : na, transp = 50, title = "Show Candle Cross Above S-Line When Above 50")

// Determine STRONGEST crossunder conditions
crossBelowStrongest = crossunder(slowMA, mid)  and (mid < 50) and (mid < mid[1])

bgcolor(color= crossBelowStrongest ? color.red : na, transp = 50,  title = "Show Candle Cross Below S-Line, Trending Down & Below 50" )

// Determine STRONGEST crossover conditions
crossAboveStrongest = crossover(slowMA, mid) and (mid > 50) and (mid > mid[1])

bgcolor(color= crossAboveStrongest ? color.green : na, transp = 50, title = "Show Candle Cross Above S-Line, Trending up & Above 50")

实现步骤

在Pine Script中,我们可以用input.string()函数搭配options参数创建下拉菜单,再根据用户选择的选项触发对应背景色显示,具体修改如下:

  1. 添加下拉菜单输入项:定义包含所有信号模式的可选值,让用户单选一种信号显示。
  2. 保留原始交叉条件:沿用你原来的交叉逻辑,无需修改判断规则。
  3. 匹配下拉选择渲染背景色:通过条件判断,仅渲染用户选中的信号对应的背景色。

修改后的完整代码

//@version=5
indicator("Cross Signal Selector", overlay=true)

// 示例:如果你的代码中已定义slowMA和mid,可删除以下两行
slowMA = ta.sma(close, 20)
mid = ta.sma(close, 10)

// 1. 创建单选下拉菜单
signalMode = input.string(
     title = "选择要显示的信号",
     defval = "无",
     options = [
          "所有上穿S线",
          "强下穿S线(低于50)",
          "强上穿S线(高于50)",
          "极强下穿S线(低于50且下跌趋势)",
          "极强上穿S线(高于50且上涨趋势)",
          "无"
     ]
)

// 2. 保留原始交叉条件判断
crossAbove = ta.crossover(slowMA, mid)
crossBelowStrong = ta.crossunder(slowMA, mid) and (mid < 50)
crossAboveStrong = ta.crossover(slowMA, mid) and (mid > 50)
crossBelowStrongest = ta.crossunder(slowMA, mid) and (mid < 50) and (mid < mid[1])
crossAboveStrongest = ta.crossover(slowMA, mid) and (mid > 50) and (mid > mid[1])

// 3. 根据下拉选择渲染对应背景色
var signalColor = na
if signalMode == "所有上穿S线"
     signalColor = crossAbove ? color.new(color.green, 50) : na
elif signalMode == "强下穿S线(低于50)"
     signalColor = crossBelowStrong ? color.new(color.red, 50) : na
elif signalMode == "强上穿S线(高于50)"
     signalColor = crossAboveStrong ? color.new(color.green, 50) : na
elif signalMode == "极强下穿S线(低于50且下跌趋势)"
     signalColor = crossBelowStrongest ? color.new(color.red, 50) : na
elif signalMode == "极强上穿S线(高于50且上涨趋势)"
     signalColor = crossAboveStrongest ? color.new(color.green, 50) : na
else
     signalColor = na

bgcolor(color=signalColor)

代码说明

  • input.string()的options参数定义了下拉菜单的所有可选值,defval为默认选中项。
  • if-elif-else逻辑确保同一时间仅渲染选中模式对应的背景色,实现单选效果。
  • color.new()的第二个参数控制透明度(50对应你原来的transp=50),效果与原代码一致。
  • 若你的代码中已定义slowMA和mid,请删除示例中的对应行,避免重复定义。

内容的提问来源于stack exchange,提问作者Julian Gaylor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:20:11