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

Pine Script(103):syminfo品种信息变量总览,ticker与tickerid详解

#Pine Script入门教学

Pine Script 中的品种信息变量总览

Pine Script 提供了几个内置变量,用于获取当前图表品种的信息。

我们的脚本可以通过这些变量获取诸如品种的交易代码资产类别、时区和最小变动价位 (tick size) 等信息。这些变量的名称都以 syminfo. 开头。

我们可以根据它们返回信息的类型,将这些品种变量进行归类。接下来我们看看具体有哪些类别。


交易代码相关变量

第一组变量与品种的交易代码和数据来源有关:

品种变量 (syminfo.) 描述
prefix 返回当前品种所属的交易所前缀。它表明了 TradingView 绘制图表时所使用的数据来源。例如 "FX""BINANCE""CBOE" 等。
root 对于金融衍生品,返回其根代码。例如,对于2022年9月到期的E-mini标普500指数期货合约 "ESU2022",该变量会返回其根代码 "ES"
ticker 返回品种的交易代码,例如 "EURUSD""AAPL"。这与我们在 TradingView 搜索框中键入以打开图表的代码相同。
tickerid 返回品种的交易所与交易代码的组合,作为其唯一标识符,例如 "FX:GBPUSD""COINBASE:BTCUSD"。因为在每个交易所(或数据源)中,一个交易代码是唯一的,所以这个组合值能够精确定位到具体的交易品种。

价格变动相关变量

这两个 Pine Script 变量提供了关于品种价格变动单位的信息:

品种变量 (syminfo.) 描述
mintick 返回该品种的最小价格变动单位(即tick的大小)。当价格波动时,其变动的最小幅度就是一个tick值。
pointvalue 返回价格每变动一个完整点位所代表的货币价值。对于股票,这个值是 1。而对于E-mini标普500指数期货,一个点位的价值是 50 美元。

货币相关变量

另外两个变量告诉我们品种所使用的货币:

品种变量 (syminfo.) 描述
currency 返回品种交易时所使用的货币,例如欧洲斯托克50指数期货是 "EUR",苹果公司股票是 "USD"。这种货币也被称为报价货币 (quote currency)
basecurrency 当交易品种是货币对时,返回其第一个货币。例如,对于 EUR/GBP,它返回 "EUR";对于 BTC/USD,它返回 "BTC"。这种货币被称为基础货币 (base currency)

时间相关变量

通过这两个变量,我们可以获取关于品种时间特性的信息:

品种变量 (syminfo.) 描述
timezone 返回品种交易所在地的时区,例如 "America/New_York" (美东时间) 和 "Europe/Paris" (巴黎时间)。
session 返回一个值,用于表明该品种以及当前图表是否使用了延长交易时段(即包含盘前盘后交易)或常规交易时段

通用信息变量

最后,还有两个变量提供通用的品种信息:

品种变量 (syminfo.) 描述
description 返回品种的完整描述,例如,对于 EUR/USD,它返回 "Euro Fx/U.S. Dollar";对于 MSFT,它返回 "MICROSOFT CORP"
type 返回品种的资产类别。可能的值包括 "forex" (外汇)、"stock" (股票) 和 "crypto" (加密货币) 等。

我们对品种信息变量的讨论到此结束。除了单独使用这些变量,我们也可以将它们组合起来,以获取更多关于交易品种的深入信息。更多详情,请参阅品种数据相关章节。

在 TradingView 界面中查看品种数据

在 TradingView 中,有两种方式可以查看交易品种的详细数据。一种方法是编写一个 Pine Script 脚本,在图表上输出品种数据变量的值。而一个更快捷的方法,是直接在 TradingView 的用户界面中查找品种信息。接下来就让我们看看如何操作。


“品种信息”窗口

要查看一个交易品种的数据,我们可以通过以下步骤打开“品种信息”(Symbol Info) 窗口:

  1. 将鼠标悬停在图表左上角的品种名称上。此时,品种名称的右侧会出现三个点的菜单图标 (…)。
  2. 点击这个三点图标,打开该品种的上下文菜单。
  3. 从菜单中,选择“品种信息”(Symbol Info) 选项。

这两个步骤的图示如下:

完成以上操作后,系统会弹出一个窗口,其中包含了关于当前图表交易品种的各种详细信息:

“品种信息”窗口中的数据含义

让我们来逐一了解“品种信息”窗口中每个条目的具体含义:

  • ‘Symbol Name’ (品种名称):这是该品种的唯一名称;任何两个 TradingView 品种的此名称都不会相同。通过它,我们可以在之后打开完全相同的图表。该名称由品种的数据源(交易所)和其交易代码构成。对于上图,它代表的是在 BITSTAMP 交易所交易的 BTCUSD。
  • ‘Symbol Description’ (品种描述):这是 TradingView 对该品种的描述。通常,这是一个比品种名称更易于人类阅读的版本。
  • ‘Symbol Type’ (品种类型):指明该品种的资产类别,例如股票 (stock)、期货 (futures)、指数 (index)、差价合约 (cfd),以及上图中 BTCUSD 所属的加密货币 (crypto)。
  • ‘Point Value’ (点值):告诉我们该品种价格每变动1个完整点位所对应的货币价值。股票的点值通常为1,而期货的点值往往更高,例如E-mini标普500指数期货的点值为50。
  • ‘Exchange’ (交易所):指当前图表数据所来自的交易所(或数据源)。
  • ‘Listed Exchange’ (上市交易所):指该品种官方挂牌交易的交易所。这个值通常与上面的‘Exchange’相同,但并非总是如此。
    • 当我们请求一个我们没有数据权限的交易所的数据时,TradingView 会转而从另一个可用的交易所加载该品种。这个替代的交易所,就是‘Symbol Info’窗口中‘Exchange’所显示的值。而‘Listed Exchange’则始终是该品种官方的、主要的交易场所。
    • 例如,我没有 NYSE (纽约证券交易所) 的数据订阅。所以当我打开 JPM (摩根大通) 的图表时,‘Symbol Info’窗口中的‘Exchange’会显示为‘Cboe BZX’。但 JPM 官方的‘Listed Exchange’仍然是 NYSE。
  • ‘Currency’ (货币):指明该品种交易时所使用的货币。对于货币对来说,这通常是第二个货币(例如 BTCUSD 中的 USD,EURGBP 中的 GBP 等)。
  • ‘Tick Size’ (Tick大小):即该品种的最小可能价格变动单位。当一个品种的价格波动时,其变动的最小幅度就是一个tick。
  • ‘Sector’ (板块)‘Industry’ (行业):将该品种归类于特定的板块和行业。这个信息仅适用于股票。
  • ‘Timezone’ (时区):指定该品种交易所在地的时区。
  • ‘Session’ (交易时段):显示该品种一周内的交易时段。这些时间是以该品种所在交易所的时区为准的。

“品种信息”与 Pine Script 的映射关系

除了手动查找,我们的 Pine Script 指标和策略也可以通过代码来访问这些品种数据。它们是通过名称以 syminfo. 开头的内置变量来实现的。

下面是“品种信息”窗口中的条目与 Pine Script 变量的对应关系:

“品种信息”条目 对应的 Pine Script 变量
Symbol Name syminfo.tickerid
Symbol Description syminfo.description
Symbol Type syminfo.type
Point Value syminfo.pointvalue
Exchange syminfo.prefix
Currency syminfo.currency
Tick Size syminfo.mintick
Timezone syminfo.timezone

并非“品种信息”中的每一个条目都有一个对应的 Pine Script 变量,反之亦然,也有些变量的值不会显示在“品种信息”窗口中。要了解所有可用的变量,请参阅所有品种数据变量的完整列表。


内容总结

  • TradingView 的“品种信息”窗口,是快速查找当前图表交易品种各项特性的一个便捷途径。
  • 指标和策略脚本可以通过代码,访问到这些品种数据中的大部分信息。

syminfo.ticker:获取品种的交易代码

Pine Script 的 syminfo.ticker 变量以字符串(文本)值的形式,返回当前图表交易品种的交易代码

这个交易代码,正是我们在 TradingView 应用中输入以打开某个特定品种图表时所用的名称。交易代码也会显示在“观察列表”中。例如 BTCUSDT、EURUSD 和 MSFT。


syminfo.ticker 在不同品种上的返回值

下表展示了 syminfo.ticker 变量针对不同 TradingView 交易品种所返回的值:

交易代码 (Symbol) 品种名称 (Instrument name) syminfo.ticker 返回值
EURONEXT:AD Ahold Delhaize (荷兰阿霍德德尔海兹集团) “AD”
COINBASE:BTCUSD 比特币 / 美元 “BTCUSD”
CME_MINI:NQM2021 E-mini 纳斯达克100指数期货 – 2021年6月到期 “NQM2021”
CME_MINI:ESU2020 E-mini 标普500指数期货 – 2020年9月到期 “ESU2020”
FX:EURUSD 欧元/美元 (现货) “EURUSD”
SAXO:EURJPY 欧元/日元 “EURJPY”
OANDA:EU50EUR 欧洲50指数 CFD “EU50EUR”
INDEX:SX5E 欧洲斯托克50指数 “SX5E”
EUREX:FESX1! 欧洲斯托克50指数连续期货 “FESX1!”
HKEX:HSIN2020 恒生指数期货 – 2020年7月到期 “HSIN2020”
NASDAQ:QQQ Invesco QQQ 信托基金 (纳指100ETF) “QQQ”
NYMEX:CL1! 轻质原油期货 – 连续期货 “CL1!”
CME_MINI:MESZ2020 微型E-mini标普500指数期货 – 2020年12月到期 “MESZ2020”
NASDAQ:MSFT Microsoft Corporation (微软公司) “MSFT”
FX:SPX500 标普500指数 FXCM CFD “SPX500”
AMEX:SPY SPDR 标普500 ETF “SPY”
NSE:TATASTEEL Tata Steel Ltd (塔塔钢铁有限公司) “TATASTEEL”
CBOE:VIX 波动率标普500指数 (恐慌指数) “VIX”
HITBTC:XRPBTC XRP / 比特币 “XRPBTC”

顺便一提,上表中的引号 (") 只是为了表明 syminfo.ticker 返回的是一个文本字符串,引号本身并非该变量值的一部分。因此,如果我们(举例来说)在一个标签中显示这个变量,引号是不会出现的。


完整示例脚本

这个简短的指标会在图表上显示当前品种的交易代码 (syminfo.ticker):

//@version=5
indicator(title="Show 'syminfo.ticker' on chart", overlay=true)

// 在最后一根已确认的历史K线上,创建一个标签来显示
// 该品种的交易代码和交易所。
if barstate.islastconfirmedhistory
    label.new(x=bar_index + 2, y=hl2, style=label.style_label_upper_left,
         color=color.new(color.yellow, 70), size=size.large,
         text="This instrument trades at\n" + syminfo.prefix + 
             " with this symbol:\n" + syminfo.ticker)

代码解析

这个指标首先使用 indicator() 函数来定义其设置。这行代码为脚本命名,并将其叠加显示在主图的交易品种上。

然后,一个 if 语句检查 barstate.islastconfirmedhistory 变量。该变量只在图表的最后一根已确认的历史K线上才为 true。在这根K线上,我们使用 label.new() 函数来创建一个新的文本标签。

这个标签被放置在当前K线右侧两根K线的位置 (bar_index + 2),其价格坐标位于K线的中点 (hl2)。绘图的箭头指向左上方 (label.style_label_upper_left),并以带有透明度的黄色显示。

标签的文本内容包含了该品种的交易所前缀 (syminfo.prefix) 及其交易代码。后者正是我们通过 syminfo.ticker 变量获取的。

这段代码在图表上的效果如下:

这里,标签显示了该品种的交易代码为GER30。如果我们把图表切换到另一个不同的品种,标签内容也会相应地改变。


如何应用 syminfo.ticker

在我们的代码中,有多种方式可以应用 Pine Script 的 syminfo.ticker 变量:

  • 为特定品种实现特定逻辑。例如,我们可以对 ETHUSD 和 BTCUSD 使用不同的移动平均线参数。
  • 在信息中显示交易代码。例如在警报消息和绘图对象(如标签和表格)中。
  • 创建自定义交易代码。与 ticker.modify() 函数结合,创建一个自定义的交易代码字符串,然后通过 request.security() 函数来加载该代码的背景数据。
  • 加载不同交易所的相同品种数据。将 syminfo.ticker 与一个交易所(或数据源)的前缀字符串结合,可以加载与当前图表交易代码相同、但来源不同的背景数据。

在某些情况下,使用其他变量会是比 syminfo.ticker 更好的选择。例如,要加载与当前图表完全相同的品种的背景数据时,最好使用 syminfo.tickerid 变量,而不是 syminfo.ticker

同样地,虽然我们可以用 syminfo.tickerheikinashi()linebreak()pointfigure()renko()kagi() 这些函数结合来请求数据,但如果改用 syminfo.tickerid,就能确保请求的数据总是使用与当前图表完全相同的交易代码交易所,从而避免意外地从错误的交易所加载数据。


syminfo.ticker vs syminfo.tickerid 的区别

Pine Script 中有一个与 syminfo.ticker 密切相关的变量:syminfo.tickerid。它们都返回相似但不完全相同的数据。那么它们的区别究竟是什么呢?

  • syminfo.ticker 返回品种的交易代码,例如 EURUSDETHUSD
  • syminfo.tickerid 返回品种的交易所(数据源)前缀交易代码的组合,例如 OANDA:EURUSDCOINBASE:ETHUSD

当我们比较来自不同交易所的同一个交易品种时,它们的区别就一目了然了。例如:

图表品种 syminfo.ticker 返回值 syminfo.tickerid 返回值
GBP/USD from FXCM “GBPUSD” “FX:GBPUSD”
GBP/USD from OANDA “GBPUSD” “OANDA:GBPUSD”
GBP/USD from IDC “GBPUSD” “FX_IDC:GBPUSD”
GBP/USD from Forex.com “GBPUSD” “FOREXCOM:GBPUSD”
GBP/USD from Saxo “GBPUSD” “SAXO:GBPUSD”

重点提示

  • syminfo.ticker不同品种之间是唯一的。这个变量能区分 GBPUSDBTCUSD
  • syminfo.tickerid所有可交易的品种之间是唯一的。它能区分在 COINBASE 交易的 BTCUSD 和在 BINANCE 交易的同一个 BTCUSD

总结一下使用场景:

  • 如果我们只想显示品种的交易代码(例如在警报消息中),我们使用 syminfo.ticker
  • 如果我们想在后台代码中唯一地识别一个具体的交易品种(尤其是在加载背景数据时),我们应该使用 syminfo.tickerid。因为它能确保我们获取的数据,其交易代码交易所都与当前图表完全一致,避免从错误的交易所加载数据。

syminfo.ticker 的特性

  • 我们可以在指标和策略脚本中使用 syminfo.ticker 变量。并且,每个 TradingView 交易品种都支持 syminfo.ticker
  • syminfo.ticker 在每一根K线上都返回相同的值。使用历史引用运算符 ([]) 不会改变它返回的值。
  • 在 Pine Script 第3版及更早版本中,syminfo.ticker 变量曾被命名为 ticker。除了名称上的变化,其功能行为没有改变。

内容总结

  • syminfo.ticker 变量以字符串的形式,返回当前图表交易品种的交易代码
  • syminfo.ticker 的值本身不是唯一的。当一个交易品种在多个交易所交易时,TradingView 中就会存在多个具有相同交易代码的品种(例如不同交易所的 EURUSD 和 BTCUSD)。

syminfo.tickerid:交易代码与数据源的唯一标识

Pine Script 的 syminfo.tickerid 变量以一段文本字符串的形式,返回当前图表交易品种的交易代码名称及其交易所前缀

一个品种标识符的例子包括:COINBASE:BTCUSD 代表 Coinbase 交易所的 BTC/USD 货币对,NASDAQ:MSFT 代表在纳斯达克交易所交易的微软股票,以及 FX:SPX500 代表来自 FXCM 的标普500指数差价合约。


syminfo.tickerid 在不同品种上的返回值

下表展示了 syminfo.tickerid 变量针对不同 TradingView 交易品种所返回的值:

交易代码 (Symbol) 品种名称 (Instrument name) syminfo.tickerid 返回值
EURONEXT:AD Ahold Delhaize (荷兰阿霍德德尔海兹集团) “EURONEXT_DLY:AD”
COINBASE:BTCUSD 比特币 / 美元 “COINBASE:BTCUSD”
CME_MINI:NQM2021 E-mini 纳斯达克100指数期货 – 2021年6月到期 “CME_MINI_DL:NQM2021”
CME_MINI:ESU2020 E-mini 标普500指数期货 – 2020年9月到期 “CME_MINI_DL:ESU2020”
FX:EURUSD 欧元/美元 (现货) “FX:EURUSD”
SAXO:EURJPY 欧元/日元 “SAXO:EURJPY”
OANDA:EU50EUR 欧洲50指数 CFD “OANDA:EU50EUR”
INDEX:SX5E 欧洲斯托克50指数 “INDEX:SX5E”
EUREX:FESX1! 欧洲斯托克50指数连续期货 “EUREX_DLY:FESX1!”
HKEX:HSIN2020 恒生指数期货 – 2020年7月到期 “HKEX_DLY:HSIN2020”
NASDAQ:QQQ Invesco QQQ 信托基金 (纳指100ETF) “BATS:QQQ”
NYMEX:CL1! 轻质原油期货 – 连续期货 “NYMEX_DL:CL1!”
CME_MINI:MESZ2020 微型E-mini标普500指数期货 – 2020年12月到期 “CME_MINI_DL:MESZ2020”
NASDAQ:MSFT Microsoft Corporation (微软公司) “BATS:MSFT”
FX:SPX500 标普500指数 FXCM CFD “FX:SPX500”
AMEX:SPY SPDR 标普500 ETF “BATS:SPY”
NSE:TATASTEEL Tata Steel Ltd (塔塔钢铁有限公司) “NSE:TATASTEEL”
CBOE:VIX 波动率标普500指数 (恐慌指数) “CBOE:VIX”
HITBTC:XRPBTC XRP / 比特币 “HITBTC:XRPBTC”

重点提示

由于 syminfo.tickerid 结合了交易所(或数据源)和交易代码,它的值能保证在所有 TradingView 品种中是唯一的。

这是因为每个交易所或数据源,对一个特定的交易代码只能使用一次。例如,在纳斯达克交易所不可能有两只股票使用相同的交易代码。

另外需要澄清的是,上表中的双引号 (") 只是为了表明 syminfo.tickerid 返回的是一个字符串值,引号本身并非该变量值的一部分。因此,如果我们(举例来说)在一个警报消息中使用 syminfo.tickerid,它的值是不会被 " 包围的。


syminfo.tickerid vs. 你请求的图表交易代码

syminfo.tickerid 返回的值,并不总是与我们想要打开的图表代码完全相同。

当我们为一个我们没有数据订阅的品种打开图表时,TradingView 会从另一个交易所加载数据。这在上面的表格中就发生了,我请求的 NASDAQ:QQQ 图表,实际获取的是来自 BATS 交易所的数据。

没有订阅,我们也可能会得到延迟的市场数据。在这种情况下,syminfo.tickerid 返回的交易所名称会以 "DL""DLY" 结尾(它们都是“delayed”的缩写)。例如 "NYMEX_DL:CL1!"

因此,如果你确实有实时数据订阅,那么你从 syminfo.tickerid 获取的值可能会与我的不同,即使我们打开的是同一个品种的图表。


完整示例脚本

下面的示例指标会通过一个文本标签,在图表上显示当前品种的标识符:

//@version=5
indicator(title="Show 'syminfo.tickerid' on chart", overlay=true)

// 在最后一根已确认的历史K线上,创建一个标签来显示
// 该品种的 tickerid 和描述。
if barstate.islastconfirmedhistory
    label.new(x=bar_index + 2, y=high, style=label.style_label_lower_left,
         color=color.new(color.fuchsia, 70), size=size.large, 
         text="The '" + syminfo.description + 
             "'\ninstrument has this tickerid:\n" + syminfo.tickerid)

代码解析

脚本首先使用 indicator() 函数来配置其设置。这行代码为脚本命名,并将其叠加显示在主图的交易品种上。

然后,一个 if 语句检查 barstate.islastconfirmedhistory 这个K线状态变量。该变量只在图表的最后一根已确认的历史K线上才为 true。在这根K线上,我们使用 label.new() 函数来创建一个新的文本标签。

这个标签被定位在当前K线的最高价 (high),并向右移动2根K线 (bar_index + 2) 的位置。它的箭头指向左下方 (label.style_label_lower_left),并拥有一个通过 color.new() 函数制作的、带有透明度的紫红色 (color.fuchsia) 背景。

标签的文本由几个字符串片段拼接而成,包含了该品种的描述 (syminfo.description) 及其标识符。我们通过 syminfo.tickerid 变量来获取这个唯一的ticker标识符。

当我们在一个具有常规交易时段的图表上运行这个脚本时,它会显示如下内容:

然而,当图表切换到延长交易时段后,syminfo.tickerid 返回的值中也会包含关于时段的信息:


如何应用 syminfo.tickerid

我们可以通过多种方式来应用 Pine Script 的 syminfo.tickerid 变量:

  • request.security() 函数结合使用,为与当前图表完全相同的品种加载背景数据。这能确保我们获取的是正确品种的更高时间周期数据,而不是从其他交易所加载了同名但不同的品种。
  • 与表格和标签结合使用,如果我们想在图表上精确地显示品种的交易代码及其数据来源。
  • 用于警报消息,以明确指出是哪个具体的交易品种触发了警报。

在处理绘图和警报时,通常只使用不带交易所前缀的交易代码(例如 EURUSDTSLA)就足够提供信息了。在这种情况下,我们使用 syminfo.ticker 变量会比 syminfo.tickerid 更简洁。


syminfo.tickerid vs syminfo.ticker 的区别

Pine Script 中有一个与 syminfo.tickerid 非常相似的变量:syminfo.ticker。它们返回的信息相似,但并不完全相同。那么它们的区别究竟是什么呢?

  • syminfo.ticker 返回品种的交易代码,例如 ETHUSDGBPUSD
  • syminfo.tickerid 返回品种的交易所前缀交易代码的组合,例如 BINANCE:ETHUSDOANDA:GBPUSD

为了更清晰地看到它们的区别,下表展示了它们对来自不同交易所的同一个交易品种所返回的值:

图表品种 syminfo.ticker 返回值 syminfo.tickerid 返回值
ETH/USD from Kraken “ETHUSD” “KRAKEN:ETHUSD”
ETH/USD from Bitstamp “ETHUSD” “BITSTAMP:ETHUSD”
ETH/USD from Coinbase “ETHUSD” “COINBASE:ETHUSD”
ETH/USD from Bittrex “ETHUSD” “BITTREX:ETHUSD”
ETH/USD from Binance “ETHUSD” “BINANCE:ETHUSD”

重点提示

  • syminfo.tickerid所有可交易的品种之间是唯一的。它能区分在 FXCM 交易的 EURUSD 和在 OANDA 交易的同一个 EURUSD
  • syminfo.ticker 变量,则只在不同品种之间是唯一的。它能区分 GBPUSDUSDJPY

总结一下使用场景:

  • 如果我们想从 TradingView 提供的所有品种中唯一地识别一个具体的交易品种,我们应该使用 syminfo.tickerid
  • 但如果我们只是想显示品种的交易代码(例如在警报消息中),那么使用 syminfo.ticker 会更合适。

syminfo.tickerid 的特性

  • syminfo.tickerid 的第一部分(:之前)并不总是一个(现货)交易所。它也可能是一个数据源,例如 "FRED" 代表来自美国联邦储备银行的经济数据。
  • syminfo.tickerid 的值,其实等于另外两个品种变量的组合。syminfo.prefix 变量返回一个品种的交易所或数据源前缀,而 syminfo.ticker 变量返回其交易代码。将这两者用冒号 (:) 连接起来,就等于 syminfo.tickerid 的值: syminfo.tickerid = syminfo.prefix + ":" + syminfo.ticker
  • syminfo.tickerid 在每一根K线上都返回相同的值。使用历史引用运算符 ([]) 不会改变它返回的值。
  • 我们可以在指标 (study) 和策略脚本中使用 syminfo.tickerid。并且,这个变量对于 TradingView 提供的每一个交易品种都可用。
  • 在 Pine Script 第3版及更早版本中,syminfo.tickerid 变量曾被命名为 tickerid

内容总结

  • syminfo.tickerid 变量返回交易所(或数据源)与品种交易代码的组合字符串。
  • 因为每个交易所(或数据源)对一个特定的 TradingView 交易代码只能使用一次,所以 syminfo.tickerid 的字符串值能保证是唯一的。
赞(0)
未经允许不得转载:图道交易 » Pine Script(103):syminfo品种信息变量总览,ticker与tickerid详解
分享到

评论 抢沙发

登录

找回密码

注册