如何在PineScript中实现交易所与交易对集合的嵌套选择列表?
解决方案:关联交易所与交易对集合的选择逻辑
你的核心问题是重复定义同一个变量s01,导致只有最后一段代码生效,交易所选择完全没起作用。另外,后续尝试的逻辑分支也没正确关联交易所和对应的集合映射。
以下是两种可行的实现方式:
方式一:嵌套三元运算符
先判断选中的交易所,再根据集合选择对应ticker:
//@version=5 indicator("Exchange & Set Selector", overlay=true) exchangeList = input.string("COINBASE", title="Exchange", options=["BINANCE", "COINBASE", "KUCOIN"]) setList = input.string("Set 1", title="Coin Sets", options=["Set 1", "Set 2", "Set 3"]) // 根据交易所+集合组合映射到对应ticker string selectedTicker = exchangeList == "COINBASE" ? (setList == "Set 1" ? f_ticker("COINBASE:00USD") : setList == "Set 2" ? f_ticker("COINBASE:AMPUSD") : f_ticker("COINBASE:ETHBTC")) : exchangeList == "BINANCE" ? (setList == "Set 1" ? f_ticker("BINANCE:ETHUSDT") : setList == "Set 2" ? f_ticker("BINANCE:LTCUSDT") : f_ticker("BINANCE:ADAUSDT")) : // KUCOIN分支 (setList == "Set 1" ? f_ticker("KUCOIN:MATICUSDT") : setList == "Set 2" ? f_ticker("KUCOIN:ETCUSDT") : f_ticker("KUCOIN:SOLUSDT")) // 测试输出 plotchar(close, "Test", "", location.belowbar) label.new(bar_index, low, str.format("Selected: {0}", selectedTicker))
方式二:使用switch结构(更易读,适合多分支)
Pine Script v5支持switch,逻辑更清晰,后续扩展也方便:
//@version=5 indicator("Exchange & Set Selector", overlay=true) exchangeList = input.string("COINBASE", title="Exchange", options=["BINANCE", "COINBASE", "KUCOIN"]) setList = input.string("Set 1", title="Coin Sets", options=["Set 1", "Set 2", "Set 3"]) string selectedTicker = na switch exchangeList "COINBASE" => selectedTicker := setList == "Set 1" ? f_ticker("COINBASE:00USD") : setList == "Set 2" ? f_ticker("COINBASE:AMPUSD") : f_ticker("COINBASE:ETHBTC") "BINANCE" => selectedTicker := setList == "Set 1" ? f_ticker("BINANCE:ETHUSDT") : setList == "Set 2" ? f_ticker("BINANCE:LTCUSDT") : f_ticker("BINANCE:ADAUSDT") "KUCOIN" => selectedTicker := setList == "Set 1" ? f_ticker("KUCOIN:MATICUSDT") : setList == "Set 2" ? f_ticker("KUCOIN:ETCUSDT") : f_ticker("KUCOIN:SOLUSDT") // 测试输出 plotchar(close, "Test", "", location.belowbar) label.new(bar_index, low, str.format("Selected: {0}", selectedTicker))
关键注意点
- 不要重复定义同一个变量(比如多次写
string s01),后面的定义会覆盖前面的,导致交易所选择无效。 - 块级作用域内(比如switch分支)的变量赋值要使用
:=,而非=。 - 如果有大量交易对需要映射,可以把每个交易所的集合逻辑封装成函数,简化代码:
// 封装Coinbase的集合映射 string getCoinbaseTicker(string set) => set == "Set 1" ? f_ticker("COINBASE:00USD") : set == "Set 2" ? f_ticker("COINBASE:AMPUSD") : f_ticker("COINBASE:ETHBTC") // 在switch中调用函数 "COINBASE" => selectedTicker := getCoinbaseTicker(setList)
内容的提问来源于stack exchange,提问作者mgoblue33
相关产品推荐
相关产品推荐

