color.new()函数说明
color.new() 函数用于为一个给定的颜色设置一定程度的透明度。我们为颜色设置的透明度越高,它在图表上显示的颜色就越浅(我们也就能越清晰地透过它看到图表背景)。我们在指标(study)和策略(strategy)脚本中都可以使用 color.new() 函数。
color.new() 函数的语法如下:
color.new(color, transp)
color: 指定要应用透明度的颜色。这可以是一个标准的TradingView颜色,也可以是一个十六进制颜色值。transp: 设置透明度,其值范围从0(完全不透明)到100(完全透明,即不可见)。
示例:为TradingView标准颜色设置透明度
下方的示例指标会绘制最高价的最高点和最低价的最低点。我们通过为它们之间的背景区域填充透明色来高亮显示这些价格区域。但首先,我们使用 indicator() 函数来设置脚本的属性。然后,我们创建三个输入选项来设置计算周期。
之后,我们使用 ta.highest() 函数来计算最高价的最高值。我们基于K线的最高价(high)进行计算,并使用一个输入选项作为周期。在每次函数调用后,我们都加上了历史引用运算符 [1]。
这会计算之前K线的最高价,而不包含当前K线的数据。这使得监控价格突破成为可能;如果我们也包含当前K线的数据,那么就无法判断突破了。我们以同样的方式计算最低价的最低值,只是这里我们让 ta.lowest() 函数基于K线的最低价(low)进行计算。
然后,我们使用 plot() 函数在图表上绘制6个不同的极值价格。我们用绿色(color.green)显示最高价,用红色(color.red)显示最低价。由于我们将 plot() 返回的每个绘图对象都存储在一个变量中,我们接下来就可以为这些绘图之间的背景区域上色。我们使用 fill() 函数来完成这个任务。这些填充的背景分别为红色和绿色,我们通过 color.new() 函数将它们的透明度分别设为30%和70%。
//@version=5
indicator(title="Reference indicator - color() example", overlay=true)
// 输入选项
len1 = input.int(10, title="Short Length")
len2 = input.int(20, title="Middle Length")
len3 = input.int(30, title="Long Length")
// 计算数值
hh1 = ta.highest(high, len1)[1]
hh2 = ta.highest(high, len2)[1]
hh3 = ta.highest(high, len3)[1]
ll1 = ta.lowest(low, len1)[1]
ll2 = ta.lowest(low, len2)[1]
ll3 = ta.lowest(low, len3)[1]
// 绘制数值
hpl1 = plot(hh1, color=color.green, linewidth=3)
hpl2 = plot(hh2, color=color.green, linewidth=2)
hpl3 = plot(hh3, color=color.green)
lpl1 = plot(ll1, color=color.red, linewidth=3)
lpl2 = plot(ll2, color=color.red, linewidth=2)
lpl3 = plot(ll3, color=color.red)
// 为背景区域上色
fill(plot1=hpl1, plot2=hpl2, color=color.new(color.green, 30))
fill(plot1=hpl2, plot2=hpl3, color=color.new(color.green, 70))
fill(plot1=lpl1, plot2=lpl2, color=color.new(color.red, 30))
fill(plot1=lpl2, plot2=lpl3, color=color.new(color.red, 70))
在图表上,围绕交易品种极端价格的透明背景看起来是这样的:
color.new() 的注意事项
我们用 color.new() 创建的透明色本身并不能直接使用,但我们可以通过TradingView的各种绘图与着色函数将它们应用到我们的交易图表上。这些函数包括:
| 函数 | 描述 |
|---|---|
barcolor() |
为交易品种的价格K线着色。 |
bgcolor() |
用指定的颜色填充图表背景。 |
fill() |
用指定的颜色填充图表上两条曲线或两条水平线之间的背景区域。 |
hline() |
在指定的价格水平上用指定的颜色渲染一条水平线。 |
plot() |
在图表上用指定的颜色绘制一个数据序列。 |
plotarrow() |
在图表上用指定的颜色绘制一个向上或向下的箭头。 |
plotbar() |
在图表上用指定的颜色绘制一个OHLC价格K线。 |
plotcandle() |
在图表上绘制一个蜡烛图K线并为其着色。 |
plotchar() |
用指定的颜色将字符作为视觉图形绘制。 |
plotshape() |
用指定的颜色绘制一个视觉图形(如箭头或菱形)。 |
当我们使用 color.new() 函数来创建透明色时,该颜色在指标或策略计算的每一根K线上默认都是相同的。但我们不必在每根K线上都使用相同的透明色。我们可以创建一个自己的颜色变量,然后根据特定条件为该变量赋予不同的透明色(或标准的TradingView颜色、十六进制颜色)。实现这一点有两种方法。
第一种方法是使用条件运算符(?:)。该运算符会评估一个布尔(真/假)表达式。当表达式为 true 时,运算符返回它的第二个值;当表达式为 false 时,则返回它的第三个值。使用它来创建条件性透明色的示例如下:
//@version=5
indicator(title="Reference indicator - conditional colours", overlay=true)
myColour = close > close[1] ?
color.new(color.teal, 30) :
color.new(color.yellow, 80)
plot(ta.ema(close, 20), color=myColour, linewidth=3)
第二个选项是使用 if/else语句。这个代码结构首先评估一个布尔表达式,然后根据该表达式是 true 还是 false 来返回两个值中的一个。例如:
//@version=5
indicator(title="Reference indicator - conditional colours", overlay=true)
myColour = if close < ta.sma(close, 10)
color.new(color.teal, 30)
else
color.new(color.yellow, 80)
plot(ta.ema(close, 20), color=myColour, linewidth=3)
我们可以将 color.new() 函数与任何十六进制颜色值以及标准的TradingView颜色一起使用。
虽然可以在 color.new() 函数后面放置历史引用运算符([]),例如 color.new(color.teal, 30)[1],但当我们使用十六进制颜色值或标准颜色时,这并不会对我们的指标或策略产生影响。这是因为这些颜色在每根K线上都是恒定的,因此基于它们创建的透明色也不会因K线而异。
color.new() 的使用技巧
当我们将同一个脚本重复添加到同一个图表时,TradingView会自动调整脚本使用的颜色。这有助于我们区分同一个脚本的不同实例。但这也导致了使用 color.new() 函数创建的透明色不总是看起来完全一样。
下图给出了这些颜色轮换的一个例子。该图表上的指标通过 color.new() 将 color.teal (青色)设置为30%的透明度来绘制一条EMA。虽然脚本的第一个副本确实是用该颜色绘制的,但另外两个副本看起来更像是蓝色而不是青色:
Pine Script有哪些和颜色相关的函数
在Pine Script中,我们可以通过多种方式来定义颜色。例如,我们可以使用标准颜色变量(如 color.red)或十六进制颜色值(如 #EB4C42)。但选择颜色仅仅是第一步,我们还需要一种方法将它显示在图表上。
为此,我们会使用Pine Script的绘图函数。但颜色的功用不止于此。实际上,Pine Script中有四组与颜色相关的函数,它们分别是:
- 在图表上显示颜色。
- 生成新的颜色。
- 返回一个颜色的信息。
- 处理颜色值本身。
接下来,让我们看看每一组中的函数。
在图表上显示颜色
使用颜色最常见的方式,就是在图表上用该特定颜色来显示某些内容。以下Pine Script函数可以实现这一目的:
| 函数 | 描述 |
|---|---|
barcolor() |
将价格K线的颜色更改为指定颜色。 |
bgcolor() |
从上到下为图表背景填充指定颜色。 |
box.new() |
在图表上创建一个新的方框绘图,并指定其边框、背景和文本颜色。 |
box.set_bgcolor() |
更改一个方框绘图的背景颜色。 |
box.set_border_color() |
修改一个方框绘图的边框颜色。 |
box.set_text_color() |
更改一个方框绘图的文本颜色。 |
fill() |
用指定颜色填充两条曲线或水平线之间的图表背景区域。 |
hline() |
在指定价格水平上用指定颜色绘制一条水平线。 |
label.new() |
创建一个带有特定背景和文本颜色的文本标签。 |
label.set_color() |
修改一个特定文本标签的背景颜色。 |
label.set_textcolor() |
更新一个Pine Script标签的文本颜色。 |
line.new() |
用指定颜色绘制一条趋势线。 |
line.set_color() |
修改一条现有趋势线的颜色。 |
linefill.new() |
用指定颜色填充两条趋势线之间的图表背景区域。 |
linefill.set_color() |
更改两条趋势线之间的背景颜色。 |
plot() |
用指定的绘图类型和颜色在图表上绘制一个数据序列。 |
plotarrow() |
在图表上用指定颜色绘制向上和向下的箭头。 |
plotbar() |
用指定颜色创建一个自定义的价格K线。 |
plotcandle() |
用指定颜色创建一个蜡烛图K线。 |
plotchar() |
用指定颜色显示一个带有可选文本的字符。 |
plotshape() |
在图表上用指定颜色绘制一个形状(如箭头、菱形、旗帜)。 |
table.cell() |
向表格添加一个带有指定背景和文本颜色的单元格。 |
table.cell_set_bgcolor() |
定义一个特定表格单元格的背景颜色。 |
table.cell_set_text_color() |
指定某个表格单元格所使用的文本颜色。 |
table.new() |
创建一个带有指定背景、边框和框架颜色的新表格。 |
table.set_bgcolor() |
修改一个现有表格的背景颜色。 |
table.set_border_color() |
更改一个表格所使用的边框颜色。 |
table.set_frame_color() |
更改一个表格的框架颜色。 |
生成颜色
除了直接在图表上显示颜色的函数外,Pine Script还提供了一些函数用于修改和准备颜色,例如创建透明色或渐变色。
这些函数用于生成颜色:
| 函数 | 描述 |
|---|---|
color.from_gradient() |
在两种指定颜色之间创建一个渐变色。 |
color.new() |
从一个颜色和透明度级别创建一个透明色。 |
color.rgb() |
从红、绿、蓝三种颜色分量的值生成一个颜色。 |
颜色信息
有时,我们不只是想生成新颜色,可能还想了解某个特定颜色的更多信息。Pine Script为此提供了以下函数:
| 函数 | 描述 |
|---|---|
color.b() |
返回一个颜色的蓝色分量值。 |
color.g() |
返回一个颜色的绿色分量值。 |
color.r() |
返回一个颜色的红色分量值。 |
color.t() |
返回一个颜色的透明度。 |
处理颜色值
最后,还有一组函数用于处理颜色值本身。它们可以创建颜色集合、移除na值,以及创建一个颜色输入项。
处理颜色值的函数如下:
| 函数 | 描述 |
|---|---|
array.new_color() |
创建一个专门存放颜色值的数组,以便能轻松地同时处理多种颜色。 |
array.new<type>() |
同样可以创建一个存放颜色值的数组。 |
array.from() |
从单个颜色值或变量创建一个数组。 |
color() |
在可能的情况下,将一个值转换(类型转换)为一个颜色值。 |
input() |
创建一个可以指定颜色的通用型输入项。 |
input.color() |
添加一个颜色输入项,允许用户从脚本的设置窗口中选择颜色。 |
fixnan() |
用最近的非na值(即一个有效的颜色值)替换颜色变量中的na值。 |
nz() |
用我们指定的默认颜色替换一个na值。 |
ta.valuewhen() |
获取在指定条件第n次满足时某个值(如颜色)的结果。 |
总结
Pine Script中有多种颜色类型,每种颜色都可以通过多种方式来使用。有些函数用于在图表上显示颜色,另一些函数则用于生成颜色。
此外,还有一些Pine Script函数可以返回一个颜色的具体信息,而最后一组函数则专注于处理颜色值本身。
Pine Script的内置颜色变量
几乎所有的TradingView脚本都会用到颜色。所有的脚本输出,例如趋势线、绘图、表格和K线,都可以被赋予某种颜色。那么,我们可以使用哪些常见的颜色呢?
标准的Pine Script颜色
Pine Script有17个内置的标准颜色变量:
| 变量 | 十六进制值 | RGB值 |
|---|---|---|
color.aqua |
#00BCD4 | color.rgb(0, 188, 212) |
color.black |
#363A45 | color.rgb(54, 58, 69) |
color.blue |
#2196F3 | color.rgb(33, 150, 243) |
color.fuchsia |
#E040FB | color.rgb(224, 64, 251) |
color.gray |
#787B86 | color.rgb(120, 123, 134) |
color.green |
#4CAF50 | color.rgb(76, 175, 80) |
color.lime |
#00E676 | color.rgb(0, 230, 118) |
color.maroon |
#880E4F | color.rgb(136, 14, 79) |
color.navy |
#311B92 | color.rgb(49, 27, 146) |
color.olive |
#808000 | color.rgb(128, 128, 0) |
color.orange |
#FF9800 | color.rgb(255, 152, 0) |
color.purple |
#9C27B0 | color.rgb(156, 39, 176) |
color.red |
#FF5252 | color.rgb(255, 82, 82) |
color.silver |
#B2B5BE | color.rgb(178, 181, 190) |
color.teal |
#00897B | color.rgb(0, 137, 123) |
color.white |
#FFFFFF | color.rgb(255, 255, 255) |
color.yellow |
#FFEB3B | color.rgb(255, 235, 59) |
注意
我们不必记住每个颜色变量的名称。只需在TradingView的代码编辑器中输入 color.,然后按下 Ctrl + Space,即可调出包含所有颜色变量的自动补全窗口。
快速示例
我们可以将Pine Script的内置颜色变量用于任何接受颜色作为参数的函数中。
例如,要以橙色(color.orange)绘制一条移动平均线,可以这么做:
// 以橙色绘制一条20周期的指数移动平均线
plot(ta.ema(close, 20), color=color.orange)
这里,我们调用 plot() 函数在图表上显示一条20周期的指数移动平均线。我们通过 ta.ema() 函数得到该均线,并使用 color.orange 颜色变量使其显示为橙色。
除了直接使用颜色变量,我们也可以先将其传递给一个用于修改颜色的函数,然后再将修改后的颜色用于脚本的输出。例如:
// 将脚本的背景设为带有85%透明度的青色
bgcolor(color.new(color.teal, 85))
这里 bgcolor() 函数为脚本的背景着色。我们使用 color.new() 函数从 color.teal 颜色变量创建了一个透明色。这个带有85%透明度的青色就被用于背景填充。
内置颜色的特性
颜色变量本身并不能发挥作用;只有当我们将它们与输出函数结合使用时,才能看到其效果。
通过所谓的条件性颜色,我们的脚本可以从多种颜色中选择一种在图表上显示。这就是我们如何让移动平均线在上升趋势中显示为绿色,在下降趋势中显示为红色的方法。
我们可以在代码中直接定义颜色,但创建一个颜色输入选项通常会更有用。这样,用户就可以自行选择脚本应使用哪种颜色。
每个内置的颜色变量都是一个常量颜色(const color)值。因此,它们在每一根K线上的值都是相同的。
脚本示例
接下来,我们通过一个完整的脚本来看看如何应用Pine Script的颜色变量。下方的指标会绘制20周期的最高价的最高点和最低价的最低点,我们分别用绿色和红色的线条来显示它们。当价格突破这些近期的极值时,我们会将脚本的背景设为橙色。
完整的指标代码如下:
//@version=5
indicator(title="Colour variables example", overlay=true)
// 计算最高价的最高点和最低价的最低点
highestHigh = ta.highest(high, 20)[1]
lowestLow = ta.lowest(low, 20)[1]
// 用绿色显示最高价,用红色显示最低价
plot(highestHigh, color=color.green, linewidth=2, title="Highest high")
plot(lowestLow, color=color.red, linewidth=2, title="Lowest low")
// 判断是否发生突破
isBreakout = close > highestHigh or close < lowestLow
// 当突破发生时高亮背景
bgcolor(isBreakout ? color.new(color.orange, 80) : na)
首先,我们使用 indicator() 函数设置指标的属性,它负责为脚本命名,并通过 overlay=true 将指标叠加到主图表的交易品种上。
然后,ta.highest() 函数处理 high 价格来计算最高价的最高点,而 ta.lowest() 函数则处理 low 价格来找到最低价的最低点。我们让这两个函数都使用20根K线的周期。[1] 这个偏移量让我们能够获取到前20根K线的最高价和最低价,而不包含当前K线。
为了显示这些最高价和最低价,我们两次调用了 plot() 函数。第一次,我们使用 color.green 颜色变量以绿色显示最高价。然后,使用 color.red 颜色变量以红色绘制最低价。因为我们没有设置绘图类型,Pine Script默认会将它们绘制成常规的线条。
接下来,我们检查价格是否突破了其近期的范围。当K线的收盘价高于最高价的最高点或低于最低价的最低点时,突破就发生了。此时,isBreakout 变量为 true(否则为 false)。
bgcolor() 函数负责在图表上高亮显示这些突破。但在此之前,条件运算符(?:)会先评估 isBreakout 变量。当其值为 true 时,运算符会返回一个通过 color.new() 函数将 color.orange 颜色变量设为80%透明度的颜色。这样我们就不会得到一个实心的橙色背景,视觉上更柔和。
当当前K线上没有突破时,isBreakout 为 false,条件运算符会返回 na,这就会关闭背景色的显示。
下图是该指标在图表上的样子:
Pine Script v4之前的标准颜色
Pine Script的第四个版本对颜色变量进行了两项调整:一是更改了变量的名称,二是调整了颜色的实际视觉效果。
使用Pine Script版本3及更早版本编写的TradingView脚本可以使用以下这些颜色变量:
| 变量 | 十六进制值 | RGB值 |
|---|---|---|
aqua |
#00FFFF | color.rgb(0, 255, 255) |
black |
#000000 | color.rgb(0, 0, 0) |
blue |
#0000FF | color.rgb(0, 0, 255) |
fuchsia |
#FF00FF | color.rgb(255, 0, 255) |
gray |
#808080 | color.rgb(128, 128, 128) |
green |
#008000 | color.rgb(0, 128, 0) |
lime |
#00FF00 | color.rgb(0, 255, 0) |
maroon |
#800000 | color.rgb(128, 0, 0) |
navy |
#000080 | color.rgb(0, 0, 128) |
olive |
#808000 | color.rgb(128, 128, 0) |
orange |
#FF7F00 | color.rgb(255, 127, 0) |
purple |
#800080 | color.rgb(128, 0, 128) |
red |
#FF0000 | color.rgb(255, 0, 0) |
silver |
#C0C0C0 | color.rgb(192, 192, 192) |
teal |
#008080 | color.rgb(0, 128, 128) |
white |
#FFFFFF | color.rgb(255, 255, 255) |
yellow |
#FFFF00 | color.rgb(255, 255, 0) |
内容总结
Pine Script中有17个不同的内置颜色变量,它们的名称都以 color. 开头。
我们不仅可以将这些颜色变量用于输出函数(如绘图),也可以用它们来创建新的颜色(如一个新的透明色)。





