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

Pine Script(18):检查字符串是否为空

#Pine Script入门教学

在写指标或策略时,我们经常会添加一些自定义的输入项,比如让用户自己填写警报信息或者图表标签。但如果用户什么都没填,我们可能就不想显示任何东西。这时候,我们就需要一个能力:判断用户输入的字符串是否为“空”。

这节课,我们就来聊聊在PineScript里判断空字符串的几种方法和常见“坑”。

什么是真正的“空”

首先,我们要明确什么是真正的“空”。一个空字符串,是指里面一个字符都没有,连一个空格都没有。

一个只包含空格的字符串" "在图表上虽然看不见,但它不是空字符串,它的长度是1。

另外,在PineScript里,还有一个特殊的值na(Not Available),在进行空值判断时,它的行为和空字符串""是一样的。

判断空字符串的两种方法

PineScript提供了两种方法来判断字符串是否为空,它们在功能上是等价的,用哪个纯粹是个人风格问题。我个人更推荐第一种,因为它更直观、代码更简洁。

方法一:直接与空字符串""比较(推荐)

这是最直接的方法。我们可以用等于号==或不等于号!=,来判断一个字符串是否为空。

// 判断字符串为空
if syminfo.description == ""
    label.new(bar_index, high, text="该品种没有描述信息!")

// 判断字符串非空
messageStr = "这是一个信号"
if messageStr != ""
    label.new(bar_index, high, text="messageStr非空")

代码读起来就像我们说的话:“如果我的字符串不等于空”,非常清晰。这里务必注意,判断相等用的是两个等号==,别跟赋值的单个等号=搞混了。

方法二:使用str.length()检查长度

第二种方法,是检查字符串的长度。str.length()函数会返回字符串里包含的字符数量。如果长度为0,那它肯定是空的。

// 判断字符串为空
if str.length(syminfo.description) == 0
    label.new(bar_index, high, text="该品种没有描述信息!")

// 判断字符串非空
if str.length(syminfo.description) > 0
    label.new(bar_index, high, text="该品种有描述信息!")

这种方法同样有效,只是代码稍微长一点。

重点避坑区:if语句的条件

很多从Python等其他语言转过来的朋友,习惯直接写if myString:来判断字符串是否为空。在PineScript里,这种写法是绝对错误的!

PineScript的if语句要求条件必须是一个明确的truefalse。所以你必须老老实实地写出完整的比较,使其返回一个布尔值:

// 错误的写法,无法通过编译
// if syminfo.description

// 正确的写法
if syminfo.description != "" 
    // ...
完整示例:条件性显示信号标签

下面的脚本完美地展示了判断空字符串的实际应用。它允许用户在输入框里自定义一个信号消息,只有当用户填写了消息,并且均线发生交叉时,才会在图表上把这个消息显示出来。

//@version=6
indicator(title="空字符串判断案例", overlay=true)

// 1. 创建输入框,默认空字符串""
signalText = input.string("", title="信号消息")

// 2. 计算绘制两条EMA均线
emaFast = ta.ema(close, 20)
emaSlow = ta.ema(close, 50)
plot(emaFast, color=color.orange, title="快线EMA")
plot(emaSlow, color=color.teal, linewidth=2, title="慢线EMA")

// 3. 均线发生交叉时显示标签
if signalText != "" and ta.cross(emaFast, emaSlow)
    // 创建标签
    label.new(bar_index, high, text=signalText, color=color.black,
         textcolor=color.white, size=size.large)

这个if语句的判断条件signalText != "",确保了只有当用户确实在设置里输入了内容后,脚本才会在交叉点创建标签,否则图表将保持整洁。

当您将此脚本添加到图表时,由于“信号消息”输入框默认是空的,因此最初不会显示任何信号标签:

应用了Pine脚本判断空字符串逻辑的指标,在用户未输入文本时图表保持干净

如果我们输入任何文本,指标会在移动平均线每次交叉时显示标签。这些标签的内容就是我们输入的文本:

用户输入文本后,使用Pine脚本判断空字符串的指标在交叉点显示了自定义标签

总结

什么是空?:一个字符都没有的""或者值为na。只包含空格的字符串不是空字符串。
两种判断方法:用myString != ""(推荐,更直观)或str.length(myString) > 0。两者效果相同。
核心避坑点:if语句后必须跟一个明确的布尔比较,不能直接放一个字符串变量。
主要用途:优雅地处理用户输入,让你的脚本在用户未提供信息时,保持图表整洁,避免显示无效内容。

赞(0)
未经允许不得转载:图道交易 » Pine Script(18):检查字符串是否为空
分享到

评论 抢沙发

评论前必须登录!

立即登录   注册

登录

找回密码

注册