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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:22:39