在我们写的策略或指标里,经常需要像搜索引擎一样,去判断一段文字里是否“包含”某个关键词。比如,我想让我的脚本在所有和“原油”相关的品种上都自动应用某个设置,或者检查用户的自定义警报消息里是否包含了“买入”这个词。
要完成这种“文本搜索”任务,我们就需要用到一个强大的函数:str.contains()
。
它的用法非常简单:str.contains(主字符串, 要查找的子字符串)
。它会返回一个true
或false
的结果。但在使用时,有几个特殊规则和“坑”你需要特别注意。
str.contains()
的核心规则与“坑”
- 常规情况:在“主字符串”里找到了“子字符串”,返回
true
;没找到,返回false
。 - 最重要的“坑”:严格区分大小写。
'BTC'
和'btc'
是两码事。这是新手最常犯的错误,我们稍后会再次强调。 - 空值“陷阱”:如果被查找的
子字符串
是空的(""
或na
),函数会认为“任何字符串都包含一个空字符串”,所以结果总是true
。这一点在处理用户输入时要特别小心。 - 被搜索对象为空:反过来,如果你在一个空的主字符串(
""
或na
)里去查找一个非空的子字符串,结果肯定是false
,因为空的东西里不可能找到任何东西。
这个函数非常灵活,可以用在任何返回字符串的地方。比如,检查syminfo.ticker
(品种代码)或syminfo.description
(品种描述)来实现品种筛选;检查用户通过input.string()
输入的文本;甚至可以用来分析strategy.closedtrades
里的订单备注,来做一些交易统计。它的应用场景非常广泛。
严格区分大小写!
我要再次强调,str.contains()
在比较时,对字母的大小写极度敏感。这是新手最常犯的错误。比如,你想在'GBPUSD'
里找'gbp'
,结果会是false
,因为在程序眼里,它们是完全不同的三个字母。
下面这个表格能让你看得更清楚:
判断当前品种是否与QQQ相关
下面的指标会检查当前交易品种的描述中是否包含“QQQ”这个短语。如果包含,那么这个交易品种很可能就是QQQ纳斯达克100 ETF或者与之相关的产品。然后,它会在图表上创建一个标签,显示判断结果。
//@version=6
indicator(title="str.contains() 案例", overlay=true)
// 1. 检查当前品种描述,判断是否与QQQ相关
isQQQIns = str.contains(syminfo.description, "QQQ")
// 2. 用标签显示判断结果
if barstate.islastconfirmedhistory
// 创建一个新标签,显示品种描述和判断结果
label.new(bar_index, high, color=color.black, textcolor=color.white,
text=syminfo.description + "\n\nIs this a QQQ instrument? " +
str.tostring(isQQQIns))
在图表上,这个脚本会生成一个标签,清晰地告诉你当前交易品种的描述中是否包含“QQQ”字样。(当你切换图表的交易品种时,标签显示的内容也会随之更新。)
总结
str.contains()
是你在PineScript里的“文本搜索引擎”,它的核心作用就是判断一个字符串是否包含另一个子字符串。- 它的一个主要用途是通过检查
syminfo.ticker
或syminfo.description
,让脚本知道自己当前在哪个品种上运行,从而采取不同的行为。 - 使用时,你只需要记住两点:第一,它是v5版本才有的新功能;第二,也是最重要的,它严格区分大小写。
掌握好这个函数,你的脚本就能变得更智能、更具适应性。
评论前必须登录!
立即登录 注册