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 变量:
- 为特定资产类别编写专门的逻辑。例如,我们可以让脚本只在股票品种上生成警报,或者对加密货币使用不同的止损设置。
- 显示品种的资产类别。在绘图(如表格和标签)以及警报消息中,明确显示该品种的资产类别。
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 的值:
- 品种本身是否支持延长交易时段(这是品种的一个内在特性)。
- 图表的“延长时段(仅日内图)”设置是否被启用(这是一个图表设置)。
只有当一个品种既支持延长交易时段,并且图表也设置了显示延长时段时,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.session与ticker.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。








