概述:改变TradingView标签外观的Pine Script函数
在我们的Pine Script代码绘制出标签后,有几种方法可以自定义标签的视觉外观。这使我们能根据个人喜好调整标签,并能通过代码设定条件,来决定标签的外观在何时以及如何改变。但具体是哪些函数可以像那样修改标签呢?
以下这些Pine Script函数可以改变一个已存在标签的外观:
| 函数 | 描述 |
|---|---|
label.set_color() |
更改标签的颜色。 |
label.set_size() |
调整标签的尺寸。 |
label.set_style() |
修改标签的样式(形状)。 |
顺带一提,Pine Script中还有一些函数可以改变标签内部文本的外观,包括label.set_text()(设置、更改和移除标签文本)、label.set_textalign()(把标签文本向左、中或右对齐)和label.set_textcolor()(修改标签文本的颜色)。
现在,我们把注意力转向那些改变标签视觉外观的函数。
更改标签颜色
label.set_color()函数用于更改一个标签的颜色。这个颜色会影响标签的整个背景、其边框以及(如果适用的话)其指向箭头。
要实现颜色更改,label.set_color()需要两个信息:一个标签标识符,用以告知要修改哪个标签;以及新的标签颜色。对于颜色,我们可以从标准颜色变量、十六进制颜色值和RGB颜色值中选择,并且我们也可以把这些颜色中的任意一种设置为带透明度的颜色。
所需的标识符是在我们使用label.new()创建标签时获得的。例如:
// 在K线最高价处绘制一个标签,以显示该K线的成交量
myLabel = label.new(bar_index, high, textcolor=color.white,
text=str.tostring(volume, format.volume))
此处的label.new()在当前K线的最高价处绘制了一个标签。其文本颜色为白色(color.white),文本内容是当前K线的成交量,通过str.tostring()函数格式化为文本。我们把函数返回的标识符存储在myLabel变量中。
现在,label.set_color()就可以更改该标签的颜色了:
// 将标签的颜色更改为蓝绿色(teal)
label.set_color(myLabel, color.teal)
这里我们向该函数传递了两个参数。myLabel变量标识了要更改哪个标签,而color.teal则是标签的新颜色。
在图表上,这个蓝绿色的标签效果如下:

更改标签尺寸
label.set_size()函数用于设置一个标签的尺寸。Pine Script提供了几种比默认尺寸更大和更小的尺寸选项。
要调整一个标签的尺寸,label.set_size()需要两个信息:一个用于指定要修改哪个标签的标签标识符,以及要使用的新尺寸。对于后者,我们可以从以下值中选择一个:size.tiny、size.small、size.normal、size.large、size.huge和size.auto。
这些标签尺寸在图表上的效果如下所示:

从代码层面看,label.set_size()需要一个标签标识符来更改现有标签的尺寸。因此,我们首先创建一个标签(并获取其返回的标识符):
// 在当前K线的编号和最高价处创建一个新标签
myLabel = label.new(bar_index, high, color=color.teal,
textcolor=color.white, text="True Range: " + str.tostring(ta.tr))
此处的label.new()在当前K线的最高价处绘制了一个新标签。这个标签以蓝绿色(color.teal)显示,文字为白色(color.white)。其文本显示”True Range:”加上当前K线的真实波幅(ta.tr),并通过str.tostring()函数转换为文本。为了方便后续访问,我们把label.new()返回的标识符存储在myLabel变量中。
现在,label.set_size()就可以使用这个标识符来更改标签的尺寸了:
// 将我们刚刚创建的标签尺寸增大为 size.large
label.set_size(myLabel, size.large)
我们向该函数传递了两个值。myLabel变量标识了要更改哪个标签,而size.large值则设定了新的标签尺寸。
前面两个代码片段所创建的标签效果如下:

更改标签样式
label.set_style()函数用于更改一个已存在标签的样式。这里的样式指的是标签的形状或外观。
要自定义样式,我们需要为label.set_style()提供两个信息:一个是标签标识符,用于指定要修改哪个标签;另一个是具体的样式。Pine Script提供了多种内置的标签样式,它们的名称都以label.style_开头。
要获取所需的标签标识符,我们必须先通过label.new()创建一个标签:
// 在当前K线的高点创建一个标签,用于显示该K线的波幅
myLabel = label.new(bar_index, high, color=color.teal,
textcolor=color.white, size=size.large,
text="波幅:\n" + str.tostring(high - low))
上述代码在K线的高点位置绘制了一个标签。它具有青色(color.teal)的背景和白色(color.white)的文字,尺寸较大(size.large)。其内容显示了”波幅:”字样以及当前K线的最高价与最低价之差。我们使用str.tostring()函数把计算出的数值范围转换为文本。label.new()返回的标识符被我们存入了myLabel变量中。
获取到标识符之后,我们就可以调用label.set_style()来更改该标签的样式了:
// 将标签的样式更改为一个从其左下角伸出箭头的样式
label.set_style(myLabel, label.style_label_lower_left)
我们向函数传递了两个参数:myLabel变量用于指定目标标签,而label.style_label_lower_left则定义了标签的新样式——一个从左下角伸出箭头的文本框样式。
由以上两个代码片段创建出的标签,其最终效果如下:

总结
有三个Pine Script函数可以用来改变TradingView标签的外观:
label.set_color():更改一个已存在标签的背景颜色。label.set_size():修改一个标签的尺寸。label.set_style():改变一个标签的形状样式。
用label.set_color()更改TradingView标签的颜色
在我们的Pine Script代码绘制出标签后,可以使用label.set_color()函数来更改该标签的颜色。这个颜色决定了标签的背景、其边框以及(当标签样式带有指向箭头时)其箭头的颜色。
要设置标签颜色,label.set_color()需要两个信息:要修改的是哪个标签,以及要使用哪种颜色。我们来看一下。
函数语法格式
该函数的标准语法格式如下:
label.set_color(id, color)
id参数用于定义我们想要更改其颜色的标签的标识符。Pine Script正是通过这个标识符来识别要修改哪个标签,没有这个值,Pine Script将无从知晓我们想要修改哪个标签。label.new()在创建标签时会返回这样一个标识符。如果我们(不小心)为该参数传入了na值,那么函数将无法识别目标标签,因而不会更改任何标签的颜色。(但函数在这种情况下不会报错,而是会静默失败。)
color参数用于指定标签的新颜色。Pine Script会把此颜色应用于标签的背景、边框以及(如果适用的话)指向箭头。我们可以使用的颜色值类型包括标准颜色变量、十六进制颜色值、RGB颜色值,以及带透明度的颜色。
如果此参数为na值而非一个颜色值,Pine Script会移除标签的颜色并把其样式设置为无(label.style_none),这样图表上就只剩下标签的文本。当我们再次把标签的颜色设置回一个有效的颜色值时,它的背景和形状便会重新出现。
label.set_color()本身不返回任何值可供我们使用或检查。我们来探讨如何使用这个函数。
快速示例
为了更改一个标签的颜色,我们首先需要一个标签。因此,我们先调用label.new()来创建一个:
// 在K线最高价处绘制一个标签,以显示该K线的成交量
myLabel = label.new(x=bar_index, y=high, textcolor=color.white,
text=str.tostring(volume, format.volume))
这段代码在当前K线的最高价处绘制了一个标签。其文本颜色为白色(color.white),文本内容是当前K线的成交量。由于成交量是一个数值而非文本,我们使用Pine Script的str.tostring()函数把它转换为字符串。
我们把label.new()返回的标识符存储在myLabel变量中,现在我们便可以通过该变量来访问此标签。
接下来,我们更改该标签的颜色:
// 将标签的颜色更改为蓝绿色(teal)
label.set_color(id=myLabel, color=color.teal)
我们向label.set_color()传递了两个参数。第一个myLabel是存有标签标识符的变量,它告诉函数要更改哪个标签。
另一个参数是一个颜色值,它设定了标签的新颜色。这里我们使用了蓝绿色(color.teal)这个标准颜色变量。
图表示例
上述两个代码片段所创建的标签效果如下:

以下代码展示了如何把这些代码片段整合为一个完整的TradingView脚本:
//@version=5
indicator(title="label.set_color() 快速示例", overlay=true)
// 在最后一根K线上,绘制一个标签并设置其背景颜色
if barstate.islast
// 在K线最高价处绘制一个标签以显示该K线的成交量
myLabel = label.new(x=bar_index, y=high, textcolor=color.white,
text=str.tostring(volume, format.volume))
// 将标签的颜色更改为蓝绿色
label.set_color(id=myLabel, color=color.teal)
首先,我们用indicator()函数来配置脚本。title参数为脚本命名,而overlay使脚本叠加显示在主图表上。
接着,一个if语句会判断脚本是否正在处理最后一根价格K线(barstate.islast)。如果条件为真,Pine Script便会执行我们前面讨论过的代码:label.new()创建一个新标签,然后label.set_color()更改该标签的颜色。
其他颜色选项
除了使用color.red这类标准的颜色变量,label.set_color()还支持三种额外的颜色类型,提供了更丰富的色彩选择。
第一种是十六进制颜色值。这种颜色以#号开头,后跟6位或8位字符(例如#007FFF)。尽管看起来有些神秘,但它能精确定义海量的颜色。下面是label.set_color()如何使用十六进制颜色的范例:
// 将标签的颜色设置为蔚蓝色
label.set_color(id=myLabel, color=#007FFF)
第二种是RGB颜色值。这种颜色通过组合红(R)、绿(G)、蓝(B)三种颜色分量来定义。在Pine Script中,我们使用color.rgb()函数来创建它。label.set_color()使用RGB颜色的范例如下:
// 将标签的颜色更改为品红色
label.set_color(id=myLabel, color=color.rgb(120, 81, 169))
最后一种是透明色。我们可以通过color.new()函数为上述任何一种颜色(标准颜色、十六进制色、RGB色)添加透明度。该函数的透明度参数范围从100(完全透明,即不可见)到0(完全不透明)。label.set_color()使用透明色的范例如下:
// 将标签的颜色更改为带45%透明度的红色
label.set_color(id=myLabel, color=color.new(color.red, 45))
// 使标签的颜色为带80%透明度的午夜绿
label.set_color(id=myLabel, color=color.new(#004953, 80))
关键字参数
label.set_color()的id和color关键字参数是可选的。在范例中包含它们,主要是为了清晰地展示函数需要哪些数据。一旦我们熟悉了函数用法,便可以省略它们,以减少代码输入。如果省略可选的关键字参数,调用方式如下:
// 将标签的颜色更改为青色
label.set_color(myLabel, color.teal)
// ^ ^ 省略了可选的 'id=' 和 'color='
label.set_color()的使用方式
label.set_color()的唯一职责就是设置标签的背景色。具体可分为三种操作:更改颜色,把标签的颜色设置为一个新的颜色;保持颜色,如果设置的颜色与当前颜色相同,则标签外观不变;隐藏形状,把颜色设置为na或100%完全透明的颜色,可以使标签的形状(背景和边框)完全不可见。
在脚本中,我们通常把label.set_color()置于if或switch语句中,以便只在满足特定条件时才去更新颜色。无条件地在每个K线上都调用它并不常见,除非颜色需要非常频繁地动态变化。
如果只想进行一次性的颜色设置,在创建标签时直接通过label.new()的color参数来完成会更方便。当然,如果需要根据条件动态地改变一个已存在标签的颜色,label.set_color()仍然是不可或缺的。
脚本范例
我们通过一个完整的脚本来深入理解label.set_color()的用法。本指标旨在识别市场波动性加剧的时期。当波动性指标ATR首次突破其均线时,我们用橙色标签标记;如果随后波动性进一步创下新高,我们会把该标签变为红色,以示极端波动。
该指标的完整代码如下:
//@version=5
indicator(title="更改标签颜色", overlay=true)
// 计算ATR及其均线
atrValue = ta.atr(12)
atrAvg = ta.sma(atrValue, 20)
// 创建一个持久化的标签变量(以便在if语句外部也能访问)
var label atrLabel = na
// 当ATR上穿其均线时,用橙色标签标记波动期开始
if ta.crossover(atrValue, atrAvg)
atrLabel := label.new(bar_index, high, text="高\nATR",
color=color.orange, textcolor=color.white)
// 如果ATR创下20周期新高,将上一个标签变为红色以示“极端”波动
if atrValue > ta.highest(atrValue, 20)[1]
label.set_color(atrLabel, color.red)
脚本始于indicator()函数,用于命名和设置图表叠加。接着,我们计算出12周期的ATR及其20周期的简单移动平均线。然后,我们创建了一个持久化变量atrLabel,用于在不同K线周期之间追踪最新创建的标签标识符。
接下来是信号识别与标签创建:
// 当ATR上穿其均线时,用橙色标签标记波动期开始
if ta.crossover(atrValue, atrAvg)
atrLabel := label.new(bar_index, high, text="高\nATR",
color=color.orange, textcolor=color.white)
这个if语句使用ta.crossover()检测ATR是否上穿了其均线。一旦条件满足,我们便创建一个橙色的标签来标记高波动的开始,并把其标识符存入atrLabel变量。
最后,我们检查波动性是否进一步加剧:
// 如果ATR创下20周期新高,将上一个标签变为红色以示“极端”波动
if atrValue > ta.highest(atrValue, 20)[1]
label.set_color(atrLabel, color.red)
这个if语句判断当前的ATR值是否超过了过去20根K线的最高ATR。这里ta.highest(atrValue, 20)[1]的[1]至关重要,它确保我们比较的是不包含当前K线在内的前期高点,这样当前的ATR值才有机会创下新高。
当条件满足时,我们调用label.set_color(),通过atrLabel变量找到最新的那个标签,并把其颜色更改为红色,以警示极端波动。
在图表上,ATR上穿其均线时会出现标签。其中,那些随后波动性进一步创下新高的信号,其标签会由橙色变为红色,从而清晰地区分出不同程度的波动信号:

label.set_color()的特性与限制
- 默认颜色:如果没有通过
label.new()或label.set_color()指定颜色,标签默认显示为蓝色(color.blue)。 - 颜色应用于整体:设置的颜色会同时应用于标签的背景、边框和箭头(如果存在)。无法为这些部分设置不同的颜色。
- 不支持复杂填充:标签的背景只能是纯色,不支持图案、图片或渐变色。
- 只写不读:Pine Script无法通过代码读取一个标签当前的颜色。要确保颜色状态,唯一的方法就是主动去设置它。
总结
label.set_color()函数用于更改Pine Script标签的背景颜色。- 它需要两个参数:一个从
label.new()获取的标签标识符,以及一个新的颜色值。 - 颜色值可以是标准颜色变量、十六进制颜色或RGB颜色,并且都可以通过
color.new()为其添加透明度。


