我们都知道加号+
可以用来做数学加法,但它在PineScript里还有一个非常实用的功能:连接文字,也就是我们常说的“字符串拼接”。这个功能在自定义图表标签、创建动态警报信息时,简直是神器,今天咱们就来聊聊怎么用好它。
在聊拼接之前,咱们先快速明确一下什么是“字符串”。在编程里,任何一段文本,比如"这是一个信号"
或者"
价格突破"
,都叫字符串。你可以直接在代码里用单引号或双引号把它写出来,也可以把它存到一个变量里。
而用+
号来拼接它们时,有几个铁律你必须记住:
- 类型必须统一:加号
+
的两边必须都是字符串。你不能拿一个字符串直接去加一个数字,比如"买入价:" + 128.5
,程序会看不懂,直接报错。这就像你不能拿苹果加橘子,然后问等于几个苹果一样,类型不同,没法运算。 - 数字需要翻译:那如果我非要把一个数字,比如当前的价格,拼接到文字里怎么办?很简单,用
str.tostring()
函数先把它“变身”成字符串。比如,想显示“前一根收盘价是123.45”,正确的写法是"前一根收盘价是" + str.tostring(close[1])
。你可以把str.tostring()
理解为数字到文字的翻译官。 - 拼接不是加法:当
+
号两边是字符串时,它做的是“拼接”,不是“数学加法”。所以"25" + "2"
的结果是文字"252"
,而不是数字27
。这一点要分清楚。
这里还有一个重要的坑需要注意:在目前版本的PineScript里,用str.tostring()
转换出来的文字,还不能直接在图表上显示出来(比如用在plotchar()
或plotshape()
的text
参数里)。这个限制后续版本可能会改变,但目前你需要知道,它主要用于代码内部的逻辑判断或调试。
案例一:拼接固定的文字
下面的例子展示了如何用+
号连接几个固定的字符串,并用换行符\n
来创建多行文本标签。
//@version=6
indicator(title="字符串拼接案例一", overlay=true)
// 1. 判断当前K线是否创下30天新高或新低
newHigh = high == ta.highest(high, 30)
newLow = low == ta.lowest(low, 30)
// 2. 拼接要在图表上显示的文本
// 使用 "+" 连接字符串,"\n" 是换行符
highText = "New" + "\n" + "high"
lowText = "New" + "\n" + "30-bar" + "\n" + "low"
// 3. 在图表上绘制形状和对应的文本
plotshape(newHigh, location=location.abovebar,
style=shape.diamond, color=color.blue, text=highText)
plotshape(newLow, location=location.belowbar,
style=shape.circle, color=color.purple, text=lowText)
代码逻辑分为三步: 首先,我们定义了两个布尔变量newHigh
和newLow
,用来判断价格是否创下30周期新高或新低。 然后,我们创建了两个字符串变量highText
和lowText
。通过+
号把几个短的字符串和换行符\n
拼接起来,组合成我们想要的显示格式。 最后,用plotshape()
函数,当newHigh
或newLow
条件成立时,就在图表上画出相应的形状和我们刚刚拼接好的文本。
将此示例添加到图表后,效果如下:
案例二:拼接文字和变量
加法运算符不仅能连接固定的文字,也能把一个固定的文字和一个存储着文字的变量组合起来,实现更动态的效果。
//@version=6
indicator(title="字符串拼接案例二", overlay=true)
// 1. 定义一个基础文本
beginText = "Closed "
// 2. 定义K线收高的条件
closedHigher = close > open
// 3. 根据K线是阳是阴,绘制不同的箭头并拼接不同的文本
// 如果是阳线 (closedHigher为true)
plotshape(closedHigher, style=shape.arrowup,
location=location.belowbar, color=color.green,
text=beginText + "higher")
// 如果不是阳线 (not closedHigher为true)
plotshape(not closedHigher, style=shape.arrowdown,
location=location.abovebar, color=color.red,
text=beginText + "lower")
在这个例子里,我们先创建了一个字符串变量beginText
,它的内容是"Closed "
。注意末尾的那个空格,这是个小技巧,可以确保后面拼接的单词不会和它粘在一起。
接着,我们根据K线是阳线还是阴线(closedHigher
是true
还是false
),在调用plotshape()
函数时,动态地把beginText
变量和"higher"
或"lower"
这两个字符串字面量进行拼接,作为text
参数的值。
将此指标添加到图表后,效果如下:
总结
在PineScript里,一段文本被称为“字符串”,加法运算符+
不仅能用于数字相加,还能用于连接(或称“拼接”)字符串。进行字符串连接时,+
号两侧的操作数必须都是字符串类型,如果需要将数字拼接到字符串中,必须先使用str.tostring()
函数将该数字“翻译”成字符串。我们可以通过换行符"\n"
在字符串中创建新的一行,让标签显示更美观。