如何将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参数创建下拉菜单,再根据用户选择的选项触发对应背景色显示,具体修改如下:
- 添加下拉菜单输入项:定义包含所有信号模式的可选值,让用户单选一种信号显示。
- 保留原始交叉条件:沿用你原来的交叉逻辑,无需修改判断规则。
- 匹配下拉选择渲染背景色:通过条件判断,仅渲染用户选中的信号对应的背景色。
修改后的完整代码
//@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
相关产品推荐
相关产品推荐

