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

Pine Script(109):syminfo.type/description/timezone/session全解析

#Pine Script入门教学

syminfo.type:获取品种的资产类别

Pine Script 的 syminfo.type 变量,可以告诉我们当前图表交易品种的资产类别。它以一段文本字符串的形式返回这个信息。

syminfo.type 可能返回的值包括:

  • "stock" (股票)
  • "futures" (期货)
  • "index" (指数)
  • "forex" (外汇)
  • "crypto" (加密货币)
  • "fund" (基金)
  • "cfd" (差价合约)
  • "economic" (经济数据)
  • "dr" (存托凭证)

顺便一提,上面列表中的双引号 (") 只是为了表明该变量返回的是一个字符串值,引号本身并非该变量值的一部分。因此,当我们在绘图或警报消息中使用 syminfo.type 时,是不会看到这些引号的。


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

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

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

完整示例脚本

下面我们来看一下如何在一个 TradingView 脚本中使用 syminfo.type 变量:

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

// 在最后一根已确认的历史K线上,创建一个标签来显示
// 该品种的交易代码和资产类别。
if barstate.islastconfirmedhistory
    label.new(x=bar_index + 2, y=low,
         style=label.style_label_left, color=color.orange,
         textcolor=color.black, size=size.large,
         text=syminfo.ticker + "'s asset class is\n" + syminfo.type)

代码解析

这个示例首先通过 indicator() 函数来配置脚本的设置。这行代码为脚本命名,并将其叠加显示在主图上。

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

我们把这个标签放置在最低价 (low) 处,并向右移动2根K线 (bar_index + 2) 的位置。它以橘色背景和黑色文字显示,同时箭头指向左边 (label.style_label_left)。

标签的文本内容是品种的交易代码 (syminfo.ticker) 与其资产类别的组合。我们通过 syminfo.type 变量来获取后者。

当我们将这个脚本添加到图表时,它会告诉我们当前图表交易品种的资产类别:

当然,如果我们把图表切换到一个不同的交易品种,标签的内容也会相应地改变。

如何应用 syminfo.type

有两种主要的方式来应用 syminfo.type 变量:

  1. 为特定资产类别编写专门的逻辑。例如,我们可以让脚本只在股票品种上生成警报,或者对加密货币使用不同的止损设置。
  2. 显示品种的资产类别。在绘图(如表格和标签)以及警报消息中,明确显示该品种的资产类别。

syminfo.type 的特性

  • 指标 (studies) 和策略脚本都可以使用 syminfo.type 变量。并且,这个变量对于 TradingView 提供的每一个交易品种都可用。
  • 我们只能获取当前图表品种的资产类别,而无法获取其他任意 TradingView 品种的资产类别。原因在于,用于在后台加载其他品种数据的 request.security() 函数,无法返回一个字符串类型的值,因此也就无法获取另一个品种的 syminfo.type 值。
  • syminfo.type 的值在每一根K线上都是相同的,所以对它使用历史引用运算符 ([]) 没有任何意义。
  • syminfo.type 是 Pine Script 中一个相对较新的变量,它在第3版及更早的版本中并不存在。

内容总结

  • syminfo.type 变量返回当前图表交易品种的资产类别
  • 可能的资产类别包括:"stock" (股票)、"futures" (期货)、"index" (指数)、"forex" (外汇)、"crypto" (加密货币)、"fund" (基金)、"cfd" (差价合约)、"economic" (经济数据) 和 "dr" (存托凭证)。
  • 借助 syminfo.type,我们可以为特定的资产类别实现专门的代码逻辑,或者在绘图和警报中显示品种的资产类别。

syminfo.description:获取品种的完整描述

Pine Script 的 syminfo.description 变量,会以一段文本字符串的形式,返回当前图表交易品种的描述

例如,对于 BTCUSD,该变量返回 "BTC/USD";对于微软的股票 (MSFT),它的值是 "MICROSOFT CORP";而 EURUSD 货币对的描述则是 "Euro Fx/U.S. Dollar"


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

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

交易代码 (Symbol) 品种名称 (Instrument name) syminfo.description 返回值
EURONEXT:AD Ahold Delhaize (荷兰阿霍德德尔海兹集团) “AHOLD DEL”
COINBASE:BTCUSD 比特币 / 美元 “BTC/USD”
CME_MINI:NQM2021 E-mini 纳斯达克100指数期货 – 2021年6月到期 “E-MINI NASDAQ-100 FUTURES (JUN 2021)”
CME_MINI:ESU2020 E-mini 标普500指数期货 – 2020年9月到期 “E-MINI S&P 500 FUTURES (SEP 2020)”
FX:EURUSD 欧元/美元 (现货) “Euro Fx/U.S. Dollar”
SAXO:EURJPY 欧元/日元 “Euro/Japanese Yen”
OANDA:EU50EUR 欧洲50指数 CFD “Europe 50”
INDEX:SX5E 欧洲斯托克50指数 “ESTX 50 PR.EUR”
EUREX:FESX1! 欧洲斯托克50指数连续期货 “DJ EURO STOXX 50 FUTURES (CONTINUOUS: CURRENT CONTRACT IN FRONT)”
HKEX:HSIN2020 恒生指数期货 – 2020年7月到期 “HANG SENG INDEX FUTURES (JUL 2020)”
NASDAQ:QQQ Invesco QQQ 信托基金 (纳指100ETF) “INVESCO QQQ TRUST UNIT SER 1”
NYMEX:CL1! 轻质原油期货 – 连续期货 “CRUDE OIL FUTURES (CONTINUOUS: CURRENT CONTRACT IN FRONT)”
CME_MINI:MESZ2020 微型E-mini标普500指数期货 – 2020年12月到期 “MICRO E-MINI S&P 500 INDEX FUTURES (DEC 2020)”
NASDAQ:MSFT Microsoft Corporation (微软公司) “MICROSOFT CORP”
FX:SPX500 标普500指数 FXCM CFD “S&P 500 index of US listed shares”
AMEX:SPY SPDR 标普500 ETF “SPDR S&P 500 ETF TRUST”
NSE:TATASTEEL Tata Steel Ltd (塔塔钢铁有限公司) “TATA STEEL LTD”
CBOE:VIX 波动率标普500指数 (恐慌指数) “CBOE VOLATILITY INDEX”
HITBTC:XRPBTC XRP / 比特币 “Ripple / Bitcoin”

需要澄清的是,上表中的双引号 (") 并非 syminfo.description 值的一部分,它们只是为了表明该变量返回的是一个字符串。因此,如果我们(举例来说)在一个标签或警报消息中显示这个变量的值,是不会看到这些引号的。


完整示例脚本

让我们看看如何在一个脚本中使用 syminfo.description。下面的指标会通过一个文本标签,在图表上显示该变量的值:

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

if barstate.islastconfirmedhistory
    label.new(x=bar_index + 3, y=hl2, style=label.style_label_left,
         color=color.teal, textcolor=color.white, size=size.large,
         text=syminfo.ticker + " has this description:\n" + 
             syminfo.description)

代码解析

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

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

这个标签被显示在K线的中点 (hl2) 处,并向右移动3根K线 (bar_index + 3) 的位置。它的箭头指向左边 (label.style_label_left),并采用标准的青色背景和白色文字。

标签的文本内容由三个字符串片段拼接而成。第一个是该品种的交易代码 (syminfo.ticker)。然后是一个描述性的文本。最后是 syminfo.description 变量,这就在标签中包含了该品种的描述信息。

该脚本在图表上的效果如下:

这里,我们看到了 TradingView 对欧洲斯托克50指数CFD的描述。如果我们切换到另一个交易品种,标签的内容也会随之更新。


如何应用 syminfo.description

得益于 syminfo.description,我们可以在警报消息中包含品种的描述,或者在图表上通过文本标签和表格来显示这些描述信息。

但除此之外,据我所知,这个品种数据变量并没有太多其他实际的应用场景。


syminfo.description 的特性

  • 理论上,每个 TradingView 品种都应该有一个描述,即使它只是交易代码本身。但 Pine Script 的官方文档并未对此做出保证。因此,我们的脚本有可能会在一个 syminfo.description 返回空字符串 ("") 的品种上运行。
  • 指标 (studies) 和策略脚本都可以使用 syminfo.description。并且,我们可以对 TradingView 提供的每一个交易品种使用该变量。
  • syminfo.description 返回的值是我们无法通过代码改变的,它是由 TradingView 为每个品种预先配置的。
  • 我们只能获取当前图表品种的描述。原因在于,用于在后台加载其他品种数据的 request.security() 函数,无法返回字符串类型的值,因此也就无法获取另一个品种的 syminfo.description 值。
  • syminfo.description 在每一根K线上都返回相同的值,所以对它使用历史引用运算符 ([]) 没有任何意义。
  • syminfo.description 是 Pine Script 中一个相对较新的变量,它在第3版及更早的版本中并不存在。

内容总结

  • syminfo.description 变量以一段文本字符串的形式,返回当前图表交易品种的描述
  • 我们可以将这个描述包含在警报消息中,或者在图表上通过绘图对象(如表格和标签)来显示它。

syminfo.timezone:获取品种的交易所时区

Pine Script 的 syminfo.timezone 变量,会以一段文本字符串的形式,返回当前图表交易品种所在交易所的时区

准确地说,该变量返回的是一个时区名称字符串。这个名称来源于 Pine Script 所支持的 IANA 时区数据库列表。

例如,对于 E-mini 标普500指数期货,syminfo.timezone 变量会返回 "America/Chicago"(芝加哥时间)。而对于纳斯达克100 ETF (QQQ),该变量则会给出 "America/New_York"(纽约时间)。


快速上手示例

有几种方式可以应用 syminfo.timezone。一种选择是判断当前品种是否在某个特定的时区进行交易。我们可以像这样来实现:

// 判断当前图表的品种是否在纽约时区交易
if syminfo.timezone == "America/New_York"
    label.new(bar_index, high, "This instrument is in NY time zone")

这个 if 语句判断 syminfo.timezone 变量的值是否等于 (==) "America/New_York"

当该品种确实在那个时区交易时,if 条件为 true,Pine Script 随之执行其内部的代码。这段代码使用 label.new() 函数绘制了一个标签,其文本告诉我们该品种处于纽约时区。

我们也可以将 syminfo.timezone 与那些接受时区名称作为参数的 Pine Script 函数结合使用。这能让这些函数使用与当前图表品种相同的时区进行计算。例如:

// 获取K线收盘时间,在该品种所在时区下的“月份中的日期”
dateClose = dayofmonth(time_close, syminfo.timezone)

plot(dateClose, title="Day of month (close time)")

这里,dayofmonth() 函数从 time_close 变量(K线的收盘时间戳)中提取“月份中的日期”。我们向 dayofmonth() 传入了 syminfo.timezone 变量,这样它就能在与图表品种相同的时区下进行计算。

我们将得到的月份天数存入 dateClose 变量中,然后 plot() 函数在图表上将其绘制出来。由于我们没有设置绘图类型,Pine Script 会默认创建一条常规的线图。


syminfo.timezone 的示例值

syminfo.timezone 变量会返回各种时区名称。下表是它针对不同交易品种所返回的值:

交易代码 (Ticker) 品种名称 (Instrument name) syminfo.timezone 返回值
EURONEXT:AD Ahold Delhaize (荷兰阿霍德德尔海兹集团) “Europe/Amsterdam”
COINBASE:BTCUSD 比特币 / 美元 “Etc/UTC”
CME:NQ1! E-mini 纳斯达克100指数期货 “America/Chicago”
CME:ES1! E-mini 标普500指数期货 “America/Chicago”
FX:EURUSD 欧元/美元 (现货) “America/New_York”
SAXO:EURJPY 欧元/日元 “America/New_York”
OANDA:EU50EUR 欧洲50指数 CFD “America/New_York”
NSE:NIFTY50 Nifty 50 指数 “Asia/Kolkata”
MCX:SILVER1! 白银期货 “Asia/Kolkata”
TSE:7974 Nintendo Co LTD (任天堂) “Asia/Tokyo”
INDEX:SX5E 欧洲斯托克50指数 “Etc/UTC”
EUREX:FESX1! 欧洲斯托克50指数期货 “Europe/Berlin”
HKEX:HSI1! 恒生指数期货 “Asia/Shanghai”
NASDAQ:QQQ Invesco QQQ 信托基金 (纳指100ETF) “America/New_York”
NYMEX:CL1! 轻质原油期货 “America/New_York”
CME:MES1! 微型E-mini标普500指数期货 “America/Chicago”
NASDAQ:MSFT Microsoft Corporation (微软公司) “America/New_York”
AMEX:SPY SPDR 标普500 ETF “America/New_York”
NSE:TATASTEEL Tata Steel Ltd (塔塔钢铁有限公司) “Asia/Kolkata”
CBOE:VIX 波动率标普500指数 (恐慌指数) “America/Chicago”
BINANCE:XRPBTC XRP / 比特币 “Etc/UTC”

需要澄清的是,上表中的双引号 (") 只是为了表明该变量返回的是一个字符串值,引号本身并非该变量值的一部分。因此,例如当我们在标签、表格或警报消息中包含该变量时,是不会看到这些引号的。

如何应用 syminfo.timezone

Pine Script 可以通过多种方式来应用 syminfo.timezone 变量。

首先,该变量可以在图表上(例如在表格或标签中)或在警报消息中,显示交易品种的时区。

其次,Pine Script 可以对 syminfo.timezone 进行布尔值比较。例如,脚本可以通过这种方式判断当前品种是否在伦敦时区交易,从而让代码可以根据品种的时区做出不同的决策。

第三,Pine Script 有几个函数接受时区名称作为参数,我们可以将 syminfo.timezone 变量传递给这些函数,这能让代码使用与当前图表品种相同的时区进行计算。

然而,这些时间函数默认情况下已经在使用品种的时区了,所以这种使用 syminfo.timezone 的方式是可选的。但这样做可能很有用,因为当我们显式地传入 syminfo.timezone 变量时,我们明确地表达了代码应该使用该品种自身的时区。

这样一来,我们代码的读者(包括未来的自己)就能知道,我们是有意选择使用该时区,而不是忘记了将函数的默认时区更改为其他值。


syminfo.timezone 的局限性

虽然 syminfo.timezone 很有用,但遗憾的是,Pine Script 没有提供一个能够返回用户本地时区的变量,也没有变量能获取图表的时区设置

因此,我们的代码无法将品种的时区与用户或图表所使用的时区进行比较,也无法计算品种与图表设置之间的时区偏移,或者自动将品种的时间转换成用户的本地时间。

作为替代方案,我们可以创建一个输入选项,让脚本用户通过该选项手动指定他/她所在的时区或偏移量。这样,脚本至少能知道应该使用何种时差来进行计算。


完整示例脚本

让我们通过一个完整的 TradingView 脚本来看看如何使用 syminfo.timezone 变量。下方的指标会判断脚本是否正在最后一根历史K线上进行计算。

如果是,我们就生成一段包含该品种交易代码 (ticker) 和时区的文本。这个时区名称我们从 syminfo.timezone 变量获取。然后我们创建一个 Pine Script 标签来在图表上显示这段文本。

该指标的完整代码如下:

//@version=5
indicator(title="Example of syminfo.timezone", overlay=true)

// 在图表的最后一根已确认的历史K线上,生成一段字符串
// 说明该品种在哪个时区交易,并用一个标签显示出来。
if barstate.islastconfirmedhistory
    labelText = str.format("{0} trades in\nthe {1} time zone.",
         syminfo.ticker, syminfo.timezone)

    label.new(bar_index + 3, hl2, style=label.style_label_left,
         color=color.teal, textcolor=color.white, size=size.large, 
         text=labelText)

代码解析

我们首先使用 indicator() 函数,这会为脚本命名并将其叠加在主图上。

然后,一个 if 语句评估 barstate.islastconfirmedhistory 变量。该变量只在图表的最后一根已确认的历史K线上才为 true。当脚本运行到该K线时,if 语句内的代码便会执行。

这段代码首先生成标签的文本。我们使用 str.format() 函数定义一个文本模板,并用相应的变量替换其中的 {0}{1} 占位符。这两个变量分别是 syminfo.ticker(返回品种的交易代码)和 syminfo.timezone(获取品种的时区名称)。我们将生成的字符串储存在 labelText 变量中。

接下来,label.new() 函数创建这个标签。这个绘图对象会显示在当前K线向右3根K线的位置 (bar_index + 3),其价格坐标位于最后一根历史K线的中点 (hl2)。标签的样式使其箭头指向左边 (label.style_label_left),颜色为青色 (color.teal) 背景和白色 (color.white) 文字,并且尺寸比常规要大 (size.large)。最后,text 参数将标签的文本设为我们刚刚创建的字符串。

在图表上,该指标会绘制一个带有品种交易代码和时区的标签。当我们切换图表到另一个不同的品种时,标签内容也会随之更新。


syminfo.timezone 的特性

  • syminfo.timezone 变量返回的是交易所的时区。这个时区总是与该品种的时区相同。TradingView 不存在品种的交易时区与其交易所时区不一致的情况。因为它们是相同的,所以我们也可以说 syminfo.timezone 返回的是品种的时区。
  • syminfo.timezone 变量返回的是一个 Pine Script 时区名称。这些名称与 Pine Script 的时间函数所使用的名称是相同的。因此,我们可以将 syminfo.timezone 用于任何接受时区作为参数的内置函数。
  • 指标和策略脚本都可以使用 syminfo.timezone。并且这个变量对于 TradingView 提供的每一个交易品种都可用。
  • 虽然我们可以对 syminfo.timezone 使用历史引用运算符 ([]),但这没有任何区别:该变量在每一根K线上返回的值都是相同的。

内容总结

  • syminfo.timezone 变量返回当前图表交易品种所在交易所的时区
  • 该变量以一段文本字符串的形式返回那个时区名称。
  • 借助 syminfo.timezone,我们可以在标签、表格、警报消息等处显示品种的时区。
  • 我们也可以对这个变量进行字符串比较,从而让脚本根据品种的时区做出不同的决策。
  • 我们无法将 syminfo.timezone 与脚本用户的本地时区或图表的时区设置进行比较。

syminfo.session:检查品种的交易时段类型

Pine Script 的 syminfo.session 变量,会以一段文本字符串的形式,返回当前图表交易品种的交易时段类型

syminfo.session 的值可以是 "regular""extended",但不会是其他值。不过,我们通常的做法是将该变量与两个内置的常量进行比较。

syminfo.session 的值会匹配以下两个常量之一:

  • session.regular:当图表只显示常规交易时段的数据时。
  • session.extended:当图表显示常规时段延长时段(即包含盘前盘后交易)的数据时。

使用 syminfo.session 检查图表时段

要判断一个 TradingView 图表是否显示了延长时段的数据,我们可以检查 syminfo.session 变量的值是否等于 (==) session.extended。就像这样:

// 判断图表是否使用了延长交易时段
usesExtendedSession = syminfo.session == session.extended

当图表使用了延长时段的数据时,usesExtendedSession 这个变量的值为 true;如果只显示常规交易时段,则为 false

当然,我们也可以用 syminfo.session 来测试图表是否只显示了常规交易时段:

// 检查图表品种是否只显示常规交易时段
hasRegularSession = syminfo.session == session.regular

这里,当图表显示常规交易时段时,hasRegularSession 变量的值为 true。如果图表显示了盘前和盘后交易,那么这个自定义变量的值则为 false


品种特性与图表设置的组合

尽管 syminfo.session 是一个品种数据变量,但它的值并不仅仅取决于图表上的交易品种本身。

有两个因素共同决定了 syminfo.session 的值:

  1. 品种本身是否支持延长交易时段(这是品种的一个内在特性)。
  2. 图表的“延长时段(仅日内图)”设置是否被启用(这是一个图表设置)。

只有当一个品种支持延长交易时段,并且图表也设置了显示延长时段时,syminfo.session 的值才会匹配 session.extended

  • 如果品种支持延长时段,但图表的该设置是关闭的,那么 syminfo.session 的值会等于 session.regular
  • 同样地,如果品种本身不支持延长时段,即便图表的该设置是开启的,syminfo.session 的值也仍然会是 session.regular

这意味着,对于同一个交易品种syminfo.session 可能会根据我们如何配置图表,而返回不同的值。


完整示例脚本

下面我们来看一下如何在一个 TradingView 脚本中使用 syminfo.session 变量:

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

// 在最后一根已确认的历史K线上,描绘出图表
// 当前被配置为显示哪种交易时段。
if barstate.islastconfirmedhistory
    label.new(x=bar_index + 2, y=close, style=label.style_label_lower_left,
         color=color.new(color.orange, 50), textcolor=color.black, size=size.large,
         text="This " + syminfo.ticker + " chart uses this session type:\n" + 
             syminfo.session)

代码解析

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

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

这个标签被显示在收盘价 (close) 处,并向未来偏移两根K线 (bar_index + 2) 的位置。它的箭头指向左下方 (label.style_label_lower_left)。背景颜色是橘色 (color.orange),通过 color.new() 函数使其带有透明度,标签的文字则为黑色。

标签的文本内容包含了该品种的交易代码 (syminfo.ticker)。我们还通过 syminfo.session 变量,包含了图表的交易时段类型。

如果我们在一个没有延长交易时段的品种(例如 GBPUSD)上运行这个脚本,那么标签会告诉我们图表使用的是常规时段:

当交易品种确实有延长时段(并且图表也被配置为显示延长交易时段)时,syminfo.session 就会告诉我们图表是‘extended’(延长时段):

需要注意的是,syminfo.session 的值取决于图表的设置。当我们禁用“延长时段”这个图表选项时,同一个亚马逊 (AMZN) 的图表就会变成一个‘regular’(常规时段)图表,尽管 AMZN 本身是支持延长交易的:

如何应用 syminfo.session

Pine Script 脚本可以通过多种方式应用 syminfo.session 变量,例如:

  • 实现不同行为:根据当前品种和图表是使用常规交易时段还是延长交易时段,来编写不同的脚本逻辑。
  • ticker.modify() 结合:我们也可以将 syminfo.sessionticker.modify() 函数一起使用,来创建一个自定义的品种请求,然后通过 request.security() 函数加载其背景数据。但实际上,ticker.modify() 已经默认使用与当前图表品种相同的交易时段,因此在这种场景下,显式地使用 syminfo.session 并非必要。

syminfo.session 的特性

  • 并非所有交易品种都有延长交易时段。外汇和加密货币,以及差价合约(CFD)、指数和ETF,通常只有一个主要的交易时段。很多股票也没有延长交易时段。对于这些品种,syminfo.session 总是会返回 session.regular(即使图表被设置为了显示延长交易时段)。
  • syminfo.session 只告诉我们图表是否使用了延长交易时段,但它并不会告诉我们该时段具体的开始或结束时间,也无法判断当前K线具体属于哪个交易时段。
  • 我们的代码无法自定义常规和延长交易时段的时间。我们同样无法在用户界面中进行配置。这些时段的起止时间是由 TradingView 平台设定的。
  • 虽然我们可以对 syminfo.session 使用历史引用运算符 ([]),但这没有太大帮助,因为该变量在每一根K线上的返回值都是相同的。
  • 指标 (studies) 和策略脚本都可以使用 syminfo.session。并且这个变量对于 TradingView 提供的每一个交易品种都可用。
  • syminfo.session 变量在 Pine Script 第3版及更早版本 中也同样可用。

内容总结

  • Pine Script 的 syminfo.session 变量,用于告知我们当前图表的交易品种正在使用何种交易时段。
  • 当图表只显示常规交易时段时,该变量返回 session.regular
  • 如果图表被设置为显示延长时段,并且该品种也支持延长交易,那么 syminfo.session 返回 session.extended
  • 如果图表的“延长时段”选项没有被启用,那么延长交易时段的数据就不会显示,此时 syminfo.session 也不可能返回 session.extended
赞(0)
未经允许不得转载:图道交易 » Pine Script(109):syminfo.type/description/timezone/session全解析
分享到

评论 抢沙发

登录

找回密码

注册