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

Pine Script(24):字符串是否以子字符串结尾(忽略大小写)

#Pine Script入门教学

StrContains()StrStartsWith()之后,我们来打造我们自定义工具箱里的最后一件利器:StrEndsWith()。顾名思义,它专门解决不区分大小写的“后缀匹配”问题。这个功能在根据计价货币(如USD)、合约类型(如PERP)等品种代码后缀来做精细化筛选时,无可替代。

自定义不区分大小写的StrEndsWith()函数

实现思路和我们前两节课完全一样:在比较之前,先把两个字符串都用str.lower()函数一视同仁地转换成小写,抹平大小写的差异,然后再进行比较。

基于这个思路,我们可以封装出下面这个专门用于后缀匹配的自定义函数:

// 判断源字符串是否以子字符串结尾,不区分大小写
StrEndsWith(string source, string substring) =>
    // 转成小写,然后调用内置的str.endswith()进行精确的后缀匹配
     str.endswith(str.lower(source), str.lower(substring))

这个函数的使用示例及其结果如下:

代码示例 结果
StrEndsWith("XRPUSD", "USD") true。“XRPUSD”字符串确实以“USD”结尾。
StrEndsWith("XRPUSD", "usd") true。“usd”的字母出现在“XRPUSD”字符串的末尾。由于函数忽略了大小写差异,因此“usd”、“Usd”、“USD”以及其他各种大小写形式都被视为相同。重要的是字母组合匹配,而不是它们的大小写。
StrEndsWith("XRPUSD", "xru") false。虽然“xru”这个短语存在于字符串内部,但它不是结尾部分的字符,因此函数返回false
StrEndsWith("0.35675", "675") true。“0.35675”这个文本确实以“675”字符结尾。

使用注意事项 (处理空值)

我们这个自定义函数在处理空字符串或na值时,行为和内置的str.endswith()一样。简单总结就是:

  • 任何字符串都‘以空字符串结尾’,所以StrEndsWith("EURUSD", "")会返回true
  • 一个空字符串里不可能‘以任何非空内容结尾’,所以StrEndsWith("", "USD")会返回false
实战案例:根据时区识别不同国家的股票

下面的指标旨在识别在英国、德国和美国交易所交易的股票。它通过我们自定义的StrEndsWith()函数,来检查交易品种的时区(syminfo.timezone)是否以特定的城市名结尾,从而判断其所属的国家。

//@version=6
indicator(title="不区分大小写的后缀匹配", overlay=true)

StrEndsWith(string source, string substring) =>
     str.endswith(str.lower(source), str.lower(substring))

if barstate.islast and syminfo.type == "stock"
    if StrEndsWith(syminfo.timezone, "london")
        label.new(bar_index, high, "这是一只英国股票!",
             color=color.teal, textcolor=color.white)
    else if StrEndsWith(syminfo.timezone, "berlin")
        label.new(bar_index, high, "这是一只德国股票!",
             color=color.fuchsia, textcolor=color.white)
    else if StrEndsWith(syminfo.timezone, "new_york")
        label.new(bar_index, high, "这是一只美国股票!",
             color=color.lime)

这个脚本首先通过一个外层if语句,确保我们只在图表的最后一个K线上,并且只对“股票”类型的品种进行操作。然后,在内层的级联if语句中,我们调用自己创建的StrEndsWith()函数,依次检查时区是否以"london""berlin""new_york"结尾,并根据结果打上不同颜色的标签。

在下面的股票图表上,脚本会正确地识别出这是一只哪国股票:

使用自定义Pine脚本函数进行不区分大小写的后缀匹配,根据时区识别股票国家

总结

总结一下,通过str.lower()str.endswith()的组合,我们成功打造了自定义工具三剑客的最后一位StrEndsWith()

至此,我们已经拥有了一套完整的、不区分大小写的文本匹配工具箱:

  • StrContains()用于模糊包含。
  • StrStartsWith()用于前缀匹配。
  • StrEndsWith()用于后缀匹配。

学会自己动手创造工具,是让你从PineScript新手走向高手的必经之路。

赞(0)
未经允许不得转载:图道交易 » Pine Script(24):字符串是否以子字符串结尾(忽略大小写)
分享到

评论 抢沙发

评论前必须登录!

立即登录   注册

登录

找回密码

注册