在 Pine Script 的“输入”功能中,input.symbol() 独树一帜。它不提供数字或开关,而是为你的脚本设置面板添加一个商品代码搜索框 。
这个功能非常强大,它就像TradingView主界面顶部的品种搜索框一样 ,是你连接到其他市场数据的桥梁。
input.symbol() 的核心实战用途 input.symbol() 的价值不在于它本身,而在于它能与 request.security() 函数完美配合。
- 相对强弱对比: 在当前品种(如 QQQ)图表上,加载
input.symbol()指定的品种(如 SPX)的数据,对比两者走势。 - 相关性分析: 计算当前品种(如 黄金)与
input.symbol()指定品种(如 美元指数)之间的相关系数。 - 价差交易: 加载两个
input.symbol()的数据,计算它们之间的价差。
一个必须厘清的黄金搭档
新手最容易在这里犯迷糊。请记住:
input.symbol()只负责一件事:提供一个品种名称(字符串)。它本身不会去加载任何数据。它返回的,仅仅是一个像
"NASDAQ:QQQ"或"OANDA:EURUSD"这样的文本 。真正负责去“抓取”这个品种数据的,是
request.security()函数。
input.symbol()是“点菜”(告诉系统你要哪个品种),而request.security()才是那个去“后厨取菜”的“服务员”。
input.symbol() 的参数和其他输入函数类似,我帮你按实战重要性分了组:
1. 核心参数 (必用)
defval:(必填) 默认的商品代码字符串 。- 你可以只写品种代码,如
"EURUSD",系统会自动匹配默认交易所 。 - 最好写全,包含交易所前缀,如
"OANDA:EURUSD"或"SP:SPX",确保数据源的唯一性 。
- 你可以只写品种代码,如
title:(强烈建议) 输入项的名称,即显示在设置面板上的标签,如"对比品种"。
2. 布局与提示 (提升专业度)
tooltip:鼠标悬停在“i”图标上时,显示的详细帮助文本 。group:分组标题,用于组织多个相关的输入项 。inline:内联ID,用于将多个输入项显示在同一行 。confirm:是否在脚本添加到图表时,强制弹出设置窗口让用户确认 。默认为false,几乎用不上。
重要提醒: 所有这些参数(如 defval, title 等)的值,都必须是常量(写死的值),不能是动态的变量 。
实战代码示例
基础示例:在当前图表,绘制另一个品种的收盘价
我们来看一下黄金搭档 (input.symbol + request.security) 是如何配合的。
// 1. 创建
otherSymbol = input.symbol("NASDAQ:QQQ", title="对比商品代码")
// 2. 使用
symbolClose = request.security(otherSymbol, timeframe.period, close[1],
lookahead=barmerge.lookahead_on)
// 3. 绘制
plot(symbolClose, color=color.orange, title="对比商品收盘价")
这段代码:
- 通过
input.symbol()创建了一个名为otherSymbol的变量,默认值为"NASDAQ:QQQ"。 request.security()函数接收otherSymbol变量,去 QQQ 的图表上抓取数据 。timeframe.period表示使用当前图表的周期 。close[1]表示抓取“上一根K线”的收盘价,这是防止重绘(Repainting)的标准做法之一 。
plot()函数将抓取来的 QQQ 收盘价画在当前图表上 。
进阶示例:带分组和提示的输入
我们来创建一个更专业的输入,用于“额外品种”的数据加载。
// 创建
otherSymbol = input.symbol("SPX", title="其他商品",
group="额外品种",
tooltip="选择要在背景中加载哪个其他品种的数据。")
这个输入:
- 默认值为
"SPX"。 - 在设置面板上,它会出现在一个名为“额外品种”的分组下面 。
- 当用户鼠标悬停时,会显示
tooltip里的详细说明 。
完整示例脚本:跨品种相关系数指标
input.symbol() 最经典的应用就是计算相关性。这个脚本将计算当前图表品种与你输入的“其他商品”之间的价格相关性。
//@version=6
indicator(title="商品代码输入示例")
BackgroundData(symbol, timeframe, data) =>
isLive = barstate.isrealtime
request.security(symbol, timeframe, data[isLive ? 1 : 0])[isLive ? 0 : 1]
// --- 1. 创建输入 ---
otherSymbol = input.symbol("SP:SPX", title="其他商品")
priceData = input.source(close, title="价格数据")
corLength = input.int(90, title="相关系数周期")
// --- 2. 计算相关系数 ---
symbolData = BackgroundData(otherSymbol, timeframe.period, priceData)
correlation = ta.correlation(priceData, symbolData, corLength)
// --- 3. 绘制图形 ---
plot(correlation, color=#71BC78, style=plot.style_area, title="相关系数")
// 绘制 1, 0, -1 的参考线
hline(1, color=#73A9C2, linestyle=hline.style_solid)
hline(0, color=#73A9C2, linestyle=hline.style_solid)
hline(-1, color=#73A9C2, linestyle=hline.style_solid)
这个脚本的关键之处在于:
input.symbol()的应用:otherSymbol变量被直接传入BackgroundData函数,实现了“可插拔”的品种对比功能 。BackgroundData()函数: 这是一个处理request.security()重绘问题的专业模式 。它通过barstate.isrealtime判断,在历史回测和实时交易中采用不同的数据索引,确保你看到的数据是“已确认”的。- 功能组合: 它完美地将
input.symbol()(选品种)、input.source()(选价格)和input.int()(选周期)组合在一起,构建了一个灵活、强大的分析工具 。
input.symbol() vs input.string()
input.symbol(): 提供一个搜索框。当你不确定用户想对比什么品种,希望给他们最大自由度时,用这个。input.string()+options: 提供一个下拉菜单。当你希望用户只能在你预设的几个选项中(比如"SPY","QQQ","IWM")进行选择时,请用input.string()函数并配合options参数 。
总结
input.symbol() 函数是 Pine Script 中实现多市场、多品种分析的“钥匙”。
- 它本身只返回一个品种名称字符串(如 “SP:SPX”) 。
- 它必须和
request.security()函数配合,才能真正加载数据。 - 它是构建相关性、相对强弱、价差等高级策略的必备工具。


