syminfo.currency:获取品种的报价货币
Pine Script 的 syminfo.currency 变量,会以一段文本字符串的形式,返回当前图表交易品种的货币。
这个返回值是一个三字母的货币代码。例如,对于一支以美元报价的股票,该变量会返回 "USD";对于一家在欧洲上市的公司,它则会返回 "EUR"。
当交易品种是货币对时,syminfo.currency 返回的是该货币对中的第二个货币。这个货币也被称为报价货币 (quote currency)。因此,对于 EURUSD,该变量返回 "USD";而对于 EURJPY,我们得到的是 "JPY"。
syminfo.currency 在不同品种上的返回值
下表展示了 syminfo.currency 变量针对不同 TradingView 交易品种所返回的值:
| 交易代码 (Symbol) | 品种名称 (Instrument name) | syminfo.currency 返回值 |
|---|---|---|
| EURONEXT:AD | Ahold Delhaize (荷兰阿霍德德尔海兹集团) | “EUR” |
| COINBASE:BTCUSD | 比特币 / 美元 | “USD” |
| CME_MINI:NQM2021 | E-mini 纳斯达克100指数期货 – 2021年6月到期 | “USD” |
| CME_MINI:ESU2020 | E-mini 标普500指数期货 – 2020年9月到期 | “USD” |
| FX:EURUSD | 欧元/美元 (现货) | “USD” |
| SAXO:EURJPY | 欧元/日元 | “JPY” |
| OANDA:EU50EUR | 欧洲50指数 CFD | “EUR” |
| INDEX:SX5E | 欧洲斯托克50指数 | “USD” |
| EUREX:FESX1! | 欧洲斯托克50指数连续期货 | “EUR” |
| HKEX:HSIN2020 | 恒生指数期货 – 2020年7月到期 | “HKD” |
| NASDAQ:QQQ | Invesco QQQ 信托基金 (纳指100ETF) | “USD” |
| NYMEX:CL1! | 轻质原油期货 – 连续期货 | “USD” |
| CME_MINI:MESZ2020 | 微型E-mini标普500指数期货 – 2020年12月到期 | “USD” |
| NASDAQ:MSFT | Microsoft Corporation (微软公司) | “USD” |
| FX:SPX500 | 标普500指数 FXCM CFD | “USD” |
| AMEX:SPY | SPDR 标普500 ETF | “USD” |
| NSE:TATASTEEL | Tata Steel Ltd (塔塔钢铁有限公司) | “INR” |
| CBOE:VIX | 波动率标普500指数 (恐慌指数) | “USD” |
| HITBTC:XRPBTC | XRP / 比特币 | “BTC” |
需要澄清的是,上表中的双引号 (
") 并非syminfo.currency值的一部分,它们只是为了表明该变量返回的是一个文本字符串。如果我们(举例来说)在一个文本标签中使用这个变量,是不会看到这些引号的。
示例脚本:显示品种的货币
这个简短的指标会通过一个标签,在图表上显示当前品种的货币单位:
//@version=5
indicator(title="Show 'syminfo.currency' on chart", overlay=true)
// 在图表的最后一根已确认的历史K线上,创建一个标签
// 用以显示该品种的交易代码和货币。
if barstate.islastconfirmedhistory
myLabel = label.new(x=bar_index + 2, y=close, style=label.style_label_left,
color=color.blue, textcolor=color.white, size=size.large,
text=syminfo.ticker + " quotes in\nthe " +
syminfo.currency + " currency")
// 当品种以美元报价时,将标签颜色变为美元绿
if syminfo.currency == "USD"
label.set_color(id=myLabel, color=#85bb65)
代码解析
这个指标首先使用 indicator() 函数来设置其选项,这行代码为脚本命名,并将其叠加显示在主图上。
然后,一个 if 语句检查 barstate.islastconfirmedhistory 变量。该变量只在最后一根已确认的历史K线上才为 true。在这根K线上,我们首先使用 label.new() 函数来创建一个标签。
这个标签被显示在当前收盘价 (close) 处,并向右移动2根K线 (bar_index + 2) 的位置。它的箭头指向左边 (label.style_label_left),并以蓝色 (color.blue) 背景和白色文字显示。标签的文本内容包含了该品种的交易代码 (syminfo.ticker) 以及 syminfo.currency 变量的值。
接着,一个嵌套的 if 语句检查该品种的货币是否等于 (==) 美元 ("USD")。如果是,label.set_color() 函数就会将标签的背景色更改为“美元绿”的十六进制颜色代码 (#85bb65)。这使得标签可以根据品种的货币单位显示不同的颜色。
当我们将该脚本添加到一个美国股票的图表上时,标签会以绿色显示,并且货币为USD:
对于非美元报价的品种,该指标则会显示其初始的蓝色背景。这里我们看到,戴姆勒 (Daimler) 是以欧元报价的:
如何应用 syminfo.currency
在我们的代码中,有多种方式可以应用 syminfo.currency,例如:
- 实现特定逻辑:为以某些特定货币计价的品种实现专门的脚本行为(例如,对英镑计价的股票和欧元计价的股票采用不同的处理方式)。
- 显示货币信息:在警报消息和绘图对象(如标签和表格)中,明确显示该品种的计价货币。
- 验证品种特性:例如,判断该品种是否以法定货币 (fiat currency) 报价。
- 执行货币换算:执行从图表当前货币到其他货币,或从其他货币到当前货币的换算。
提示:除了品种的报价货币,对于货币对,我们还可以通过
syminfo.basecurrency变量来查找其基础货币。
syminfo.currency 的特性
syminfo.currency并不总是返回一个货币代码。某些 TradingView 品种(例如来自 Quandl 的经济数据)并没有设定货币单位。对于这些品种,该变量会返回一个空字符串 ("")。- TradingView 提供了一些内置的货币常量(例如
currency.EUR和currency.USD)。由于它们使用的格式与syminfo.currency返回的格式相同,我们可以直接进行比较。例如,要判断当前图表的品种是否以欧元报价,我们可以这样测试:syminfo.currency == currency.EUR。 syminfo.currency变量可用于指标 (studies) 和策略脚本。此外,这个变量对于 TradingView 提供的每一个交易品种都可用。- 目前,我们无法获取另一个交易品种的货币单位。原因在于,用于在后台加载其他品种数据的
request.security()函数,无法返回一个字符串类型的值,因此也就无法获取另一个品种的syminfo.currency值。 syminfo.currency是 Pine Script 语言中一个相对较新的变量,在第3版及更早的版本中并不存在。
内容总结
syminfo.currency变量返回当前图表交易品种所使用的货币。- 这个所谓的报价货币 (quote currency),是以一个三字母字符串的形式返回的,例如
"EUR"、"USD"和"BTC"。 - 并非每个交易品种都以货币报价。例如,对于经济数据,
syminfo.currency会返回一个空字符串。
syminfo.basecurrency:获取品种的基础货币
Pine Script 的 syminfo.basecurrency 变量,会以一段文本字符串的形式,返回当前图表交易品种的基础货币。
在交易中,基础货币 (base currency) 这个术语指的是一个现货货币对中的第一个货币。例如,对于 EUR/USD,基础货币是欧元 (EUR);对于 BTC/USD,基础货币则是比特币 (BTC)。
一个货币对的价格,表示的是1单位的基础货币,可以兑换多少单位的第二种货币(即报价货币, quote currency)。例如,当 EUR/USD 的报价为 1.1924 时,意味着一欧元(基础货币)价值1.1924美元(报价货币)。
Pine Script 的 syminfo.basecurrency 变量会返回以下两种值之一:
- 对于货币对,该变量返回该品种的基础货币,例如
"EUR"、"USD"和"BTC"。 - 对于非货币对(如股票、期货等),
syminfo.basecurrency会返回一个空字符串 ("")。(要获取这些品种的计价货币,我们应使用syminfo.currency变量。)
syminfo.basecurrency 在不同品种上的返回值
下表展示了 syminfo.basecurrency 变量针对不同 TradingView 交易品种所返回的值:
| 交易代码 (Symbol) | 品种名称 (Instrument name) | syminfo.basecurrency 返回值 |
|---|---|---|
| EURONEXT:AD | Ahold Delhaize (荷兰阿霍德德尔海兹集团) | 不适用 |
| COINBASE:BTCUSD | 比特币 / 美元 | “BTC” |
| CME_MINI:NQM2021 | E-mini 纳斯达克100指数期货 – 2021年6月到期 | 不适用 |
| CME_MINI:ESU2020 | E-mini 标普500指数期货 – 2020年9月到期 | 不适用 |
| FX:EURUSD | 欧元/美元 (现货) | “EUR” |
| SAXO:EURJPY | 欧元/日元 | “EUR” |
| OANDA:EU50EUR | 欧洲50指数 CFD | 不适用 |
| EUREX:FESX1! | 欧洲斯托克50指数 – 连续期货 | 不适用 |
| INDEX:SX5E | 欧洲斯托克50指数 | 不适用 |
| HKEX:HSIN2020 | 恒生指数期货 – 2020年7月到期 | 不适用 |
| NASDAQ:QQQ | Invesco QQQ 信托基金 (纳指100ETF) | 不适用 |
| NYMEX:CL1! | 轻质原油期货 – 连续期货 | 不适用 |
| CME_MINI:MESZ2020 | 微型E-mini标普500指数期货 – 2020年12月到期 | 不适用 |
| NASDAQ:MSFT | Microsoft Corporation (微软公司) | 不适用 |
| FX:SPX500 | 标普500指数 FXCM CFD | 不适用 |
| AMEX:SPY | SPDR 标普500 ETF | 不适用 |
| NSE:TATASTEEL | Tata Steel Ltd (塔塔钢铁有限公司) | 不适用 |
| CBOE:VIX | 波动率标普500指数 (恐慌指数) | 不适用 |
| HITBTC:XRPBTC | XRP / 比特币 | “XRP” |
需要澄清的是,上表中的双引号 (
") 只是为了表明返回的值是一个字符串,引号本身并非该变量值的一部分。因此,当我们在标签或警报消息中使用syminfo.basecurrency时,是不会看到这些引号的。
完整示例脚本
下面我们来看一下如何在一个完整的 TradingView 脚本中应用 syminfo.basecurrency:
//@version=5
indicator(title="Show 'syminfo.basecurrency' on chart", overlay=true)
// 在最后一根已确认的历史K线上,创建一个标签来显示
// 该品种的基础货币。
if barstate.islastconfirmedhistory
myLabel = label.new(x=bar_index + 2, y=hl2, style=label.style_label_left,
color=color.lime, textcolor=color.black, size=size.large,
text=syminfo.ticker + " has a base currency of " +
syminfo.basecurrency)
// 当品种没有基础货币时,更改标签的文本
if syminfo.basecurrency == ""
label.set_text(id=myLabel, text=syminfo.ticker +
" has no base currency")
代码解析
这个指标做了几件事。首先,我们使用 indicator() 函数来配置其设置,这行代码为脚本命名,并将其叠加显示在主图上。
然后,一个 if 语句检查 barstate.islastconfirmedhistory 变量。该变量只在最后一根已确认的历史K线上才为 true。在这根K线上,我们使用 label.new() 函数来创建一个新的文本标签。
这个标签被显示在K线的中点价格 (hl2) 处,并向右移动2根K线 (bar_index + 2) 的位置。它的箭头指向左边 (label.style_label_left),并以青柠绿色 (color.lime) 为背景,黑色文字显示。
标签的初始文本,是将品种的交易代码 (syminfo.ticker) 与其基础货币(通过 syminfo.basecurrency 变量获取)拼接而成的。
我们将创建的标签对象储存在 myLabel 变量中,这样我们之后就可以修改这个标签。
接着,是一个嵌套的 if 语句。它会检查 syminfo.basecurrency 变量的值是否等于 (==) 一个空字符串 ("")。当交易品种没有基础货币时(即除了货币对之外的所有品种),这种情况就会发生。
对于那些没有基础货币的品种,我们使用 label.set_text() 函数来更新标签的文本,明确告知用户这一点。
当我们将这个指标添加到一个货币对图表上时,它会告诉我们该品种所使用的基础货币:
如果该品种没有基础货币,指标的标签也会如实告知:
基础货币 vs. 报价货币
除了 syminfo.basecurrency,Pine Script 还有一个 syminfo.currency 变量。后者返回的是图表品种的报价货币 (quote currency)。
它们之间有何区别?
- 报价货币 (
syminfo.currency):这是品种进行交易和报价时所使用的货币。当我们买卖该品种时,盈亏是以这种货币来计算的。对于货币对,报价货币是第二个货币(例如 EURUSD 中的 USD)。 - 基础货币 (
syminfo.basecurrency):这是只有货币对才有的概念。对于这些品种,它是货币对中的第一个货币(例如 BTCUSD 中的 BTC)。
下表展示了报价货币和基础货币针对不同 TradingView 交易品种的返回值对比:
| 品种 (交易代码) | 报价货币 (Quote Currency) | 基础货币 (Base Currency) |
|---|---|---|
| 比特币 / 美元 (BTCUSD) | USD | BTC |
| 瑞波币 / 比特币 (XRPBTC) | BTC | XRP |
| 欧元 / 美元 (EURUSD) | USD | EUR |
| 欧元 / 英镑 (EURGBP) | GBP | EUR |
| 特斯拉股票 (TSLA) | USD | (无) |
| 微软股票 (MSFT) | USD | (无) |
| 欧洲50指数 CFD (EU50EUR) | EUR | (无) |
如何应用 syminfo.basecurrency
有以下几种方式可以应用 syminfo.basecurrency:
- 在评估品种的基础货币的同时,执行货币换算。
- 验证当前品种是否不是一个货币对——当
syminfo.basecurrency返回一个空字符串 ("") 时,即可确认。
然而,在大多数时候,我们处理得更多的是品种的报价货币,我们可以通过 syminfo.currency 变量来获取它。
syminfo.basecurrency 的特性
- 我们可以在指标 (study) 和策略脚本中使用
syminfo.basecurrency。并且,这个变量对于每一个 TradingView 交易品种都可用。 syminfo.basecurrency在每一根K线上都返回相同的值。对它使用历史引用运算符 ([]) 没有任何区别。- 我们只能获取当前图表品种的基础货币,而无法获取其他品种的基础货币。原因在于,用于在后台加载其他品种数据的
request.security()函数,无法返回字符串类型的值,因此也就无法获取另一个品种的syminfo.basecurrency值。 syminfo.basecurrency是 Pine Script 中一个相对较新的变量,它在第3版及更早的版本中并不存在。
内容总结
- Pine Script 的
syminfo.basecurrency变量返回交易品种的基础货币。 - 基础货币是货币对中列在第一个的货币。例如,对于 GBPUSD,基础货币是 GBP。
- 对于非货币对的品种,
syminfo.basecurrency会返回一个空字符串 ("")。
如何判断一个货币代码是否为法定货币
法定货币 (fiat currency),是一种其价值不与黄金或白银等实物品种挂钩的货币。它的价值,来自于发行它的政府的信用背书。法定货币的例子包括美元、欧元、英镑和日元。
法定货币代码规范
每一种法定货币都有一个特定的货币代码,这些代码在官方的 ISO 4217 规范中被定义。一个货币代码由三个英文字母组成。前两个字母通常与国家代码相对应,最后一个字母(如果可能)则是该货币名称的首字母。
例如,美元的代码是 USD,瑞士法郎是 CHF。该规范通过这种方式,为267个国家和地区定义了169个货币代码。
接下来,让我们看看如何用 Pine Script 代码来判断一个字符串是否为法定货币。
自定义函数:判断是否为法定货币
要判断一个 Pine Script 字符串是否匹配一个货币代码,我们可以将其与 ISO 4217 列表进行比较。如果匹配,该字符串就是一个有效的货币代码;否则,它就是其他东西。
下面的这个自定义函数实现了这一方法:
// 当给定的货币代码字符串,根据官方的ISO 4217货币代码规范
// 是一种法定货币时,IsFiatCurrency() 函数返回 true。
// 否则,该函数返回 false。
IsFiatCurrency(code) =>
code == "AED" or code == "AFN" or code == "ALL" or
code == "AMD" or code == "ANG" or code == "AOA" or
code == "ARS" or code == "AUD" or code == "AWG" or
code == "AZN" or code == "BAM" or code == "BBD" or
code == "BDT" or code == "BGN" or code == "BHD" or
code == "BIF" or code == "BMD" or code == "BND" or
code == "BOB" or code == "BOV" or code == "BRL" or
code == "BSD" or code == "BTN" or code == "BWP" or
code == "BYN" or code == "BZD" or code == "CAD" or
code == "CDF" or code == "CHE" or code == "CHF" or
code == "CHW" or code == "CLF" or code == "CLP" or
code == "CNY" or code == "COP" or code == "COU" or
code == "CRC" or code == "CUC" or code == "CUP" or
code == "CVE" or code == "CZK" or code == "DJF" or
code == "DKK" or code == "DOP" or code == "DZD" or
code == "EGP" or code == "ERN" or code == "ETB" or
code == "EUR" or code == "FJD" or code == "FKP" or
code == "GBP" or code == "GEL" or code == "GHS" or
code == "GIP" or code == "GMD" or code == "GNF" or
code == "GTQ" or code == "GYD" or code == "HKD" or
code == "HNL" or code == "HRK" or code == "HTG" or
code == "HUF" or code == "IDR" or code == "ILS" or
code == "INR" or code == "IQD" or code == "IRR" or
code == "ISK" or code == "JMD" or code == "JOD" or
code == "JPY" or code == "KES" or code == "KGS" or
code == "KHR" or code == "KMF" or code == "KPW" or
code == "KRW" or code == "KWD" or code == "KYD" or
code == "KZT" or code == "LAK" or code == "LBP" or
code == "LKR" or code == "LRD" or code == "LSL" or
code == "LYD" or code == "MAD" or code == "MDL" or
code == "MGA" or code == "MKD" or code == "MMK" or
code == "MNT" or code == "MOP" or code == "MRU" or
code == "MUR" or code == "MVR" or code == "MWK" or
code == "MXN" or code == "MXV" or code == "MYR" or
code == "MZN" or code == "NAD" or code == "NGN" or
code == "NIO" or code == "NOK" or code == "NPR" or
code == "NZD" or code == "OMR" or code == "PAB" or
code == "PEN" or code == "PGK" or code == "PHP" or
code == "PKR" or code == "PLN" or code == "PYG" or
code == "QAR" or code == "RON" or code == "RSD" or
code == "RUB" or code == "RWF" or code == "SAR" or
code == "SBD" or code == "SCR" or code == "SDG" or
code == "SEK" or code == "SGD" or code == "SHP" or
code == "SLL" or code == "SOS" or code == "SRD" or
code == "SSP" or code == "STN" or code == "SVC" or
code == "SYP" or code == "SZL" or code == "THB" or
code == "TJS" or code == "TMT" or code == "TND" or
code == "TOP" or code == "TRY" or code == "TTD" or
code == "TWD" or code == "TZS" or code == "UAH" or
code == "UGX" or code == "USD" or code == "USN" or
code == "UYI" or code == "UYU" or code == "UYW" or
code == "UZS" or code == "VES" or code == "VND" or
code == "VUV" or code == "WST" or code == "XAF" or
code == "XCD" or code == "XDR" or code == "XOF" or
code == "XPF" or code == "XSU" or code == "XUA" or
code == "YER" or code == "ZAR" or code == "ZMW" or
code == "ZWL"
这个 IsFiatCurrency() 函数接受一个字符串参数。然后,它会将这个字符串与 ISO 4217 规范中的所有169个三字母货币代码逐一进行比较。
当输入的字符串与其中任何一个货币代码匹配时,该函数返回 true。如果字符串不匹配任何官方代码,函数的结果则为 false。这其中包含了大小写的区别,例如 “eur” 不是一个官方的法定货币代码,而 “EUR” 才是。
要使用该函数,我们只需传入一个字符串值,它便会根据该字符串是否为三字母货币代码,返回 true 或 false。例如:
fiatTest = IsFiatCurrency("JPY") // true (返回真)
nonFiatTest = IsFiatCurrency("BTC") // false (返回假)
// 判断当前品种的货币是否为法定货币
fiatSymbol = IsFiatCurrency(syminfo.currency)
完整示例指标
下面我们来看一下如何在一个完整的示例指标中应用 IsFiatCurrency() 函数:
//@version=5
indicator(title="See if string contains fiat currency code", overlay=true)
// 当给定的货币代码字符串,根据官方的ISO 4217货币代码规范
// 是一种法定货币时,IsFiatCurrency() 函数返回 true。
// 否则,该函数返回 false。
IsFiatCurrency(code) =>
code == "AED" or code == "AFN" or code == "ALL" or
code == "AMD" or code == "ANG" or code == "AOA" or
code == "ARS" or code == "AUD" or code == "AWG" or
code == "AZN" or code == "BAM" or code == "BBD" or
code == "BDT" or code == "BGN" or code == "BHD" or
code == "BIF" or code == "BMD" or code == "BND" or
code == "BOB" or code == "BOV" or code == "BRL" or
code == "BSD" or code == "BTN" or code == "BWP" or
code == "BYN" or code == "BZD" or code == "CAD" or
code == "CDF" or code == "CHE" or code == "CHF" or
code == "CHW" or code == "CLF" or code == "CLP" or
code == "CNY" or code == "COP" or code == "COU" or
code == "CRC" or code == "CUC" or code == "CUP" or
code == "CVE" or code == "CZK" or code == "DJF" or
code == "DKK" or code == "DOP" or code == "DZD" or
code == "EGP" or code == "ERN" or code == "ETB" or
code == "EUR" or code == "FJD" or code == "FKP" or
code == "GBP" or code == "GEL" or code == "GHS" or
code == "GIP" or code == "GMD" or code == "GNF" or
code == "GTQ" or code == "GYD" or code == "HKD" or
code == "HNL" or code == "HRK" or code == "HTG" or
code == "HUF" or code == "IDR" or code == "ILS" or
code == "INR" or code == "IQD" or code == "IRR" or
code == "ISK" or code == "JMD" or code == "JOD" or
code == "JPY" or code == "KES" or code == "KGS" or
code == "KHR" or code == "KMF" or code == "KPW" or
code == "KRW" or code == "KWD" or code == "KYD" or
code == "KZT" or code == "LAK" or code == "LBP" or
code == "LKR" or code == "LRD" or code == "LSL" or
code == "LYD" or code == "MAD" or code == "MDL" or
code == "MGA" or code == "MKD" or code == "MMK" or
code == "MNT" or code == "MOP" or code == "MRU" or
code == "MUR" or code == "MVR" or code == "MWK" or
code == "MXN" or code == "MXV" or code == "MYR" or
code == "MZN" or code == "NAD" or code == "NGN" or
code == "NIO" or code == "NOK" or code == "NPR" or
code == "NZD" or code == "OMR" or code == "PAB" or
code == "PEN" or code == "PGK" or code == "PHP" or
code == "PKR" or code == "PLN" or code == "PYG" or
code == "QAR" or code == "RON" or code == "RSD" or
code == "RUB" or code == "RWF" or code == "SAR" or
code == "SBD" or code == "SCR" or code == "SDG" or
code == "SEK" or code == "SGD" or code == "SHP" or
code == "SLL" or code == "SOS" or code == "SRD" or
code == "SSP" or code == "STN" or code == "SVC" or
code == "SYP" or code == "SZL" or code == "THB" or
code == "TJS" or code == "TMT" or code == "TND" or
code == "TOP" or code == "TRY" or code == "TTD" or
code == "TWD" or code == "TZS" or code == "UAH" or
code == "UGX" or code == "USD" or code == "USN" or
code == "UYI" or code == "UYU" or code == "UYW" or
code == "UZS" or code == "VES" or code == "VND" or
code == "VUV" or code == "WST" or code == "XAF" or
code == "XCD" or code == "XDR" or code == "XOF" or
code == "XPF" or code == "XSU" or code == "XUA" or
code == "YER" or code == "ZAR" or code == "ZMW" or
code == "ZWL"
// 创建一个输入框,用以定义一个自定义字符串
currencyCode = input.string("EUR", title="Currency code")
// 创建一个标签来输出判断结果
var outputLabel = label.new(x=bar_index, y=close,
color=color.black, textcolor=color.white, style=label.style_label_left,
text="'" + currencyCode + "' is a fiat currency? " +
(IsFiatCurrency(currencyCode) ? "true" : "false") +
"\nInstrument's currency ('" + syminfo.currency + "') is a fiat currency? " +
(IsFiatCurrency(syminfo.currency) ? "true" : "false"))
// 更新标签的位置,使其总是在最后一根K线的右侧显示
if barstate.islast
label.set_xy(id=outputLabel, x=bar_index, y=close)
代码解析
这个脚本首先使用 indicator() 函数来配置其设置,这行代码为脚本命名,并将其叠加显示在主图的交易品种上。
然后,我们包含了上文讨论过的 IsFiatCurrency() 自定义函数。
接下来,input.string() 函数创建了一个字符串输入框。通过这个自定义脚本设置,我们可以指定一个待测的货币代码,其默认值为 "EUR"。
之后,Pine Script 的 label.new() 函数仅创建一次文本标签(因为使用了 var 关键字)。该标签的文本内容包含几个部分:首先,我们判断之前创建的输入框中的内容是否为法定货币代码,为此我们对输入变量调用 IsFiatCurrency() 函数。然后,我们使用相同的函数,来判断当前品种的计价货币 (syminfo.currency) 是否为法定货币。
代码的最后一部分是一个 if 语句,它会在最后一根K线上更新标签的位置,这能让标签随着新K线的出现而移动。
在图表上,这个示例指标看起来是这样的:
这里我们检查了两个货币字符串。第一个是 "EUR",由脚本的输入选项指定。另一个是 "CAD",来自该品种自身的计价货币。对于这张 AUDCAD 图表,我们可以看到 CAD 是一种法定货币。当然,当我们切换图表时,标签的信息也会相应地改变。







