我们在处理交易品种信息时,经常会遇到一些带有固定前缀的文本,比如很多ETF的描述都以ProShares
或iShares
开头。在图表上显示标签或发送警报时,这些前缀往往是多余的“噪音”,我们真正关心的是后面的核心信息。
那么,如何智能地“砍掉”这些不需要的前缀呢?PineScript虽然没有提供现成的工具,但这正是我们自己动手,打造高级文本处理函数的绝佳机会。
自定义移除前缀的StrRemovePrefix()
函数
下面这个自定义函数,能够从一个字符串的开头移除指定的文本,并且可以选择是否忽略大小写,非常强大。
//移除字符串的前缀,可选是否区分大小写
StrRemovePrefix(string source, string prefix, simple bool ignoreCase = false) =>
// 步骤1: 是否将source和prefix统一转为小写以进行比较
sourceStr = ignoreCase ? str.lower(source) : source
prefixStr = ignoreCase ? str.lower(prefix) : prefix
// 步骤2: 检查处理后的字符串是否真的以此前缀开头
result = if str.startswith(sourceStr, prefixStr)
// 从原始字符串的第 N 个字符开始,截取到末尾(N = prefix的长度)
str.substring(source, str.length(prefix))
else
source
result
这个函数的核心逻辑分为两步:
- 预处理:它首先根据第三个参数
ignoreCase
的值,来决定是否要用str.lower()
将原始字符串和前缀字符串都临时转成小写。如果ignoreCase
为true
,就都转成小写来比较;如果为false
,就保持原样进行严格的大小写匹配。 - 判断和截取:接着,它用
str.startswith()
来判断预处理后的字符串是否以前缀开头。如果是,就用str.substring()
函数,从原始字符串中跳过前缀的长度,只返回剩下的部分。如果不是,就原封不动地返回原始字符串。
这个函数的用法示例及其结果如下:
使用注意事项
- 这个函数可以处理任何返回字符串的地方,包括内置变量、自定义变量、函数返回值等。
- 函数返回的是一个新的、被修改过的字符串副本,它不会改变你传入的原始变量的值。
- 要移除的前缀必须和字符串开头完全一样,包括空格。
StrRemovePrefix(" EURUSD", "EUR")
就不会成功,因为source
字符串的开头多了一个空格。 - 当你要移除的前缀
prefix
是空字符串""
或na
时,函数不会做任何操作,直接返回原始字符串。
实战案例:清理品种描述以获得更简洁的标签
下面的指标会查找交易品种的描述。当这段描述以“ProShares”开头时,脚本会通过我们自制的StrRemovePrefix()
函数来“清理”这段描述,然后把原始描述和清理后的描述都显示在标签里,方便我们对比。
//@version=6
indicator(title="移除字符串前缀 - 案例", overlay=true)
// --- 自定义的函数 ---
StrRemovePrefix(string source, string prefix, simple bool ignoreCase = false) =>
sourceStr = ignoreCase ? str.lower(source) : source
prefixStr = ignoreCase ? str.lower(prefix) : prefix
result = if str.startswith(sourceStr, prefixStr)
str.substring(source, str.length(prefix))
else
source
result
// 1. 调用我们的函数来“清洗”品种描述
// 我们想从 syminfo.description 中移除 "ProShares" 这个前缀
cleanDescription = StrRemovePrefix(syminfo.description, "ProShares", true)
// 2. 在图表末尾,用标签同时显示原始描述和清洗后的描述,以作对比
if barstate.islastconfirmedhistory
label.new(bar_index, high,
// 使用 \n 换行符来组织标签内的文本
text="原始描述: " + syminfo.description +
"\n\n移除'ProShares'前缀后: " + cleanDescription,
color=color.teal, textcolor=color.white)
在图表上,这个标签会显示当前交易品种的描述。如果该描述以“ProShares”前缀开头(不区分大小写),那么修改后的描述就会将该前缀移除,反之则显示原始描述。下面是以“ProShares”开头的ETF品种上(ProShares UltraPro QQQ – TQQQ)和黄金品种,加载代码后的提示:
总结
总结一下,通过组合str.startswith
、str.lower
和str.substring
这几个基础函数,我们成功地创造了一个非常实用的文本清理工具StrRemovePrefix()
。它不仅能帮你移除固定的前缀,还能通过可选参数智能地处理大小写问题。当原始字符串不含指定前缀时,它会安全地返回原始字符串,不会产生错误。这个例子再次证明了,掌握了基础工具的组合运用,你就能解决PineScript中几乎任何文本处理的挑战,让你的指标和策略输出的信息更干净、更专业。
评论前必须登录!
立即登录 注册