我们写的很多指标或策略,可能只想让它在特定的交易品种上运行。比如,一个专门为加密货币设计的波动率指标,或者一个只想在所有以“USD”结尾的货币对上运行的策略。要实现这种“筛选”功能,我们就需要学会如何处理和比较文本,也就是我们说的“字符串”。
在介绍具体的函数前,我们要先知道,如果你只是想判断两个字符串是否“完全一样”,可以直接用我们熟悉的比较运算符==
(等于)和!=
(不等于)。而我们今天要讲的这几个函数,解决的是更模糊的“包含”关系,功能更强大。
PineScript为此提供了三个非常方便的内置函数,专门用来检查一个字符串是否包含、开头或结尾是特定的文字 :
这里有个最重要的“坑”,你必须从一开始就牢牢记住:这三个函数都严格区分大小写。比如,'BTC'
和'btc'
在程序看来是完全不同的东西。下面我们会反复看到这一点。
str.contains():检查是否“包含”指定文本
这个函数用来检查一段文本里是否“包含”另一小段文本,无论位置在哪 。它非常适合用来做宽泛的品种筛选。比如,你想知道当前图表的品种是不是比特币,不管是BTCUSD
、BTCEUR
还是XBTUSD
,只要品种代码里含有BTC
就行。
它的用法很简单:str.contains(主字符串, 要查找的子字符串)
。
// 检查 "BTCUSD" 字符串中是否包含 "BTC"
btcInstrument = str.contains("BTCUSD", "BTC")
但如果你不注意大小写,就会出问题。比如,你想检查当前图表的品种代码(syminfo.ticker
通常返回大写字母)是否包含小写的"btc"
:
// 假设当前品种是BTCUSD,程序会检查 "BTCUSD" 是否包含小写的 "btc"
isBtcSymbol = str.contains(syminfo.ticker, "btc")
str.startswith():检查是否以指定文本“开头”
这个函数用来判断一个字符串是不是以某段特定的文字“开头” 。这在筛选某一类资产时特别有用。比如,所有以EUR
开头的货币对(如EURUSD
, EURGBP
, EURJPY
)。
// 检查 "SOLUSDT" 字符串是否以 "SOL" 开头
// 因为完全匹配(包括大小写),所以solInstrument的值为true
solInstrument = str.startswith("SOLUSDT", "SOL")
同样的,大小写问题依然存在。如果你用小写的"sol"
去检查大写的"SOLUSDT"
,结果会是false
。
str.endswith():检查是否以指定文本“结尾”
和startswith()
相反,这个函数用来判断字符串是不是以某段文字“结尾” 。这同样是筛选利器。比如,在外汇中,你可以用它来找到所有以JPY
结尾的日元交叉盘;在加密货币中,你可以找到所有以USDT
为计价单位的交易对。
// 检查 "EURGBP" 字符串是否以 "GBP" 结尾
// 因为完全匹配,所以gbpInstrument的值为true
gbpInstrument = str.endswith("EURGBP", "GBP")
同样的,用小写的"gbp"
去检查大写的"EURGBP"
,会因为大小写不匹配而返回false
。
总结
PineScript提供了三个主要的字符串包含关系比较函数:1、str.contains()
(包含)、str.startswith()
(开头是)和str.endswith()
(结尾是) 。2、这三个函数是你实现“品种筛选”和“动态标签”等功能的得力助手。3、使用时必须牢记最重要的一点:所有比较都严格区分大小写。
评论前必须登录!
立即登录 注册