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

Pine Script(21):字符串是否以另一字符串结尾

#Pine Script入门教学

我们已经学会了用str.contains()做模糊搜索,用str.startswith()做前缀匹配。现在,我们来学习这个系列的最后一个工具:str.endswith()

顾名思义,它专门用来判断一个字符串是否以某段特定的文字“结尾”。这个功能在筛选特定计价货币的交易对时,非常有用。比如,我想让一个策略只在所有以'USDT'结尾的加密货币对上运行,或者只在'JPY'结尾的日元交叉盘上运行。

str.endswith()的核心规则

它的用法和前两个函数完全一样:str.endswith(主字符串, 要查找的子字符串)。它的返回规则也遵循相同的逻辑:

  1. 常规情况:只有当“主字符串”的结尾部分与“子字符串”一模一样时,才返回true;否则返回false
  2. 最重要的规则:同样,严格区分大小写。'USD''usd'是两码事。
  3. 空值“陷阱”:如果被查找的子字符串是空的(""na),函数会认为“任何字符串都以空字符串结尾”,所以结果总是true
  4. 被搜索对象为空:如果你在一个空的主字符串里去查找一个非空的子字符串,结果肯定是false

这个函数的应用场景非常明确,主要就是做“后缀匹配”。最经典的应用就是通过品种代码的后缀来筛选特定类别的资产,比如所有以'EUR'结尾的欧元计价货币对。此外,你也可以用它来验证用户输入的内容、过滤数组里的特定元素,或者分析交易订单的备注信息等等。

严格区分大小写!

我要最后一次强调,contains, startswithendswith这三兄弟,在比较时,对字母的大小写都极度敏感。这是新手最常犯的错误,一定要刻在脑子里。

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

代码示例 结果
str.endswith("EURGBP", "Gbp") false。因为“Gbp”中的“bp”的大小写与源字符串(“GBP”)末尾的大小写不匹配,尽管字母相同。
str.endswith("EURGBP", "gbp") false。字母相同,但小写的“gbp”不等于源字符串末尾的大写字母。
str.endswith("EURGBP", "GBP") true。因为“GBP”子字符串在源字符串的末尾部分逐字出现,并且大小写完全一致。
筛选所有以“USD”为计价货币的品种

下面的指标会检查当前交易品种的代码(syminfo.ticker)是否以“USD”结尾。如果符合,那么这个交易品种的计价货币很可能就是美元。这个功能可以让你写出一个通用的策略,但在面对不同计价货币的品种时,可以有不同的风险参数或仓位大小。

//@version=6
indicator(title="str.endswith() 案例", overlay=true)

// 1. 检查当前品种代码,判断是否以"USD"结尾
usdInstrument = str.endswith(syminfo.ticker, "USD")

// 2. 用标签显示判断结果
if barstate.islastconfirmedhistory
    // 创建一个新标签,显示判断结果
    label.new(bar_index, high, color=color.black, textcolor=color.white,
         text="品种代码: " + syminfo.ticker + 
             "\n\n是否以'USD'结尾?\n" +
             str.tostring(usdInstrument))

在图表上,这个标签会显示当前交易品种的代码,并告知它是否以“USD”结尾。(当你将图表切换到其他交易品种时,标签中显示的信息也会随之更新。)

总结

str.endswith()是你文本处理工具箱里负责“后缀匹配”的专家。至此,我们已经学完了字符串比较的三剑客:

  • str.contains()负责模糊包含
  • str.startswith()负责前缀匹配
  • str.endswith()负责后缀匹配

它们都在Pine Script v6版本以上可用,并且都严格区分大小写。灵活运用这三个函数,你的脚本就能拥有识别不同交易品种的“火眼金睛”,变得更加智能和强大。

赞(0)
未经允许不得转载:图道交易 » Pine Script(21):字符串是否以另一字符串结尾
分享到

评论 抢沙发

评论前必须登录!

立即登录   注册

登录

找回密码

注册