保持敬畏之心
交易是一场持久战

Pine Script(90):熟悉input.symbol,在图表上加载另品种的数据

#Pine Script入门教学

在 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="对比商品收盘价")

这段代码:

  1. 通过 input.symbol() 创建了一个名为 otherSymbol 的变量,默认值为 "NASDAQ:QQQ"
  2. request.security() 函数接收 otherSymbol 变量,去 QQQ 的图表上抓取数据
    • timeframe.period 表示使用当前图表的周期
    • close[1] 表示抓取“上一根K线”的收盘价,这是防止重绘(Repainting)的标准做法之一
  3. 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)

这个脚本的关键之处在于:

  1. input.symbol() 的应用: otherSymbol 变量被直接传入 BackgroundData 函数,实现了“可插拔”的品种对比功能
  2. BackgroundData() 函数: 这是一个处理 request.security() 重绘问题的专业模式 。它通过 barstate.isrealtime 判断,在历史回测和实时交易中采用不同的数据索引,确保你看到的数据是“已确认”的。
  3. 功能组合: 它完美地将 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() 函数配合,才能真正加载数据。
  • 它是构建相关性、相对强弱、价差等高级策略的必备工具。
赞(0)
未经允许不得转载:图道交易 » Pine Script(90):熟悉input.symbol,在图表上加载另品种的数据
分享到

评论 抢沙发

登录

找回密码

注册