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

Pine Script(19):检测字符串是否包含另一字符串

#Pine Script入门教学

在我们写的策略或指标里,经常需要像搜索引擎一样,去判断一段文字里是否“包含”某个关键词。比如,我想让我的脚本在所有和“原油”相关的品种上都自动应用某个设置,或者检查用户的自定义警报消息里是否包含了“买入”这个词。

要完成这种“文本搜索”任务,我们就需要用到一个强大的函数:str.contains()

它的用法非常简单:str.contains(主字符串, 要查找的子字符串)。它会返回一个truefalse的结果。但在使用时,有几个特殊规则和“坑”你需要特别注意。

str.contains()的核心规则与“坑”
  1. 常规情况:在“主字符串”里找到了“子字符串”,返回true;没找到,返回false
  2. 最重要的“坑”:严格区分大小写。'BTC''btc'是两码事。这是新手最常犯的错误,我们稍后会再次强调。
  3. 空值“陷阱”:如果被查找的子字符串是空的(""na),函数会认为“任何字符串都包含一个空字符串”,所以结果总是true。这一点在处理用户输入时要特别小心。
  4. 被搜索对象为空:反过来,如果你在一个空的主字符串(""na)里去查找一个非空的子字符串,结果肯定是false,因为空的东西里不可能找到任何东西。

这个函数非常灵活,可以用在任何返回字符串的地方。比如,检查syminfo.ticker(品种代码)或syminfo.description(品种描述)来实现品种筛选;检查用户通过input.string()输入的文本;甚至可以用来分析strategy.closedtrades里的订单备注,来做一些交易统计。它的应用场景非常广泛。

严格区分大小写!

我要再次强调,str.contains()在比较时,对字母的大小写极度敏感。这是新手最常犯的错误。比如,你想在'GBPUSD'里找'gbp',结果会是false,因为在程序眼里,它们是完全不同的三个字母。

下面这个表格能让你看得更清楚:

代码示例 结果
str.contains("BTCUSD", "Btc") false;因为“Btc”中的“tc”与源字符串的大小写不一致。
str.contains("BTCUSD", "btc") false;因为“btc”的大小写与源字符串不匹配。
str.contains("BTCUSD", "BTC") true;因为“BTC”字符串在源字符串中完全一致地出现,且大小写相同。
判断当前品种是否与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.tickersyminfo.description,让脚本知道自己当前在哪个品种上运行,从而采取不同的行为。
  • 使用时,你只需要记住两点:第一,它是v5版本才有的新功能;第二,也是最重要的,它严格区分大小写。

掌握好这个函数,你的脚本就能变得更智能、更具适应性。

赞(0)
未经允许不得转载:图道交易 » Pine Script(19):检测字符串是否包含另一字符串
分享到

评论 抢沙发

评论前必须登录!

立即登录   注册

登录

找回密码

注册