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

Pine Script(181):标签外观函数概述与set_color改色

#Pine Script入门教学

概述:改变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.tinysize.smallsize.normalsize.largesize.hugesize.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()idcolor关键字参数是可选的。在范例中包含它们,主要是为了清晰地展示函数需要哪些数据。一旦我们熟悉了函数用法,便可以省略它们,以减少代码输入。如果省略可选的关键字参数,调用方式如下:

// 将标签的颜色更改为青色
label.set_color(myLabel, color.teal)
//             ^         ^ 省略了可选的 'id=' 和 'color='

label.set_color()的使用方式

label.set_color()的唯一职责就是设置标签的背景色。具体可分为三种操作:更改颜色,把标签的颜色设置为一个新的颜色;保持颜色,如果设置的颜色与当前颜色相同,则标签外观不变;隐藏形状,把颜色设置为na或100%完全透明的颜色,可以使标签的形状(背景和边框)完全不可见。

在脚本中,我们通常把label.set_color()置于ifswitch语句中,以便只在满足特定条件时才去更新颜色。无条件地在每个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()为其添加透明度。
赞(0)
未经允许不得转载:图道交易 » Pine Script(181):标签外观函数概述与set_color改色
分享到

评论 抢沙发

登录

找回密码

注册