TradingView中的color.new()函数

引言

函数color.new()可以为某个特定的颜色指定透明度。为颜色设置不同的透明度,能够让图表中的视觉特征更加明显,也更加美观。

语法

函数color.new()的语法如下:

color.new(color, transp)
  • 参数color: 指要需要设置的颜色。它可以是的TradingView内置颜色,例如color.red表示红色;或十六进制颜色,例如”0000FF”表示蓝色。
  • 参数transp: 指颜色的透明程度。它的取值范围是从0(表示完全不透明)到100(表示完全透明色)的整数。

示例:使用color.new()创建TradingView内置颜色

现在我们来写一个非常简单的指标脚本,用它来标注一段时间内的最高低和最低点。并给这些颜色区域加上透明属性。

首先创建一个指标脚本,然后定义两种回看长度,分别画出两种不同回看长度下的最高价和最低价所组成的图线。

//@version=5
indicator(title="color.new() example", overlay=true)

//回看长度
long = 20
short = 10

// 计算不同回看长度下的最高价
high_long = ta.highest(high, long)[1]  // 这里用历史回看符的原因是只计算已经完成的K线,用它过滤掉当前K线
high_short = ta.highest(high, short)[1]
// 最低价
low_long = ta.lowest(low, long)[1]
low_short = ta.lowest(low, short)[1]

// 画图
hl = plot(high_long, color=color.green, linewidth=3)
hs = plot(high_short, color=color.green, linewidth=2)

ll = plot(low_long, color=color.red, linewidth=3)
ls = plot(low_short, color=color.red, linewidth=2)

效果如上图所示。函数ta.highest()和ta.lowest()可以获取指定回看长度内的最高价和最价低。因为我们有两种回看长度,所以最高价和最低价分别有两根线,用绿色和红色表示。下面我们最高价之间的区域和最低价之间的区域填充起来,在这个过程中我们会用到color.new()来处理填充的颜色。

//填充
fill(plot1=hl, plot2=hs, color=color.new(color.green, 70))
fill(plot1=ll, plot2=ls, color=color.new(color.red, 70))

函数fill可以填充两条曲线之间所形成的区域,由于使用了70的透明度,尽管颜色是系统内置的颜色,但是效果还是有很大差别的。我们可以用这种方法标记一些比较重要的区间,例如压力带,支持带,通道之内的指标。

函数color.new()的适用范围

函数color.new()是一个非常实用的功能,我总结了一下它适用的使用场景。

函数描述
barcolor()标记主图表中K线的颜色
bgcolor()填充关键K线的背景色
fill()填充两条曲线之间的区域
hline()在指定的价格上以特定颜色呈现一条水平线
plot()绘制曲线
plotarrow()在图表上以特定颜色绘制箭头
plotbar()使用特定颜色绘制K线(美国线样式的K线)
plotcandle()使用特定颜色绘制K线(蜡烛K线)
plotchar()以特定颜色显示文字
plotshape()以特定颜色绘制特殊字符

默认情况下,我们使用函数color.new()创建颜色时,每根K线的显示效果都相同。如何设置在不同的条件下改变颜色的透明度呢?

第一种方法是使用三元运算符”?:”,它是Pine Script中绘图时经常会用的一种运算符。举个例子:

//@version=5
indicator(title="设置不同的颜色透明度", overlay=true)

myColour = close > close[1] ? 
     color.new(color.red, 30) : 
     color.new(color.green, 30)

plot(ta.ema(close, 20), color=myColour, linewidth=3)

它的逻辑是这样的,当?前面的表达式成立时,执行?后面的表达成式;否则执行:后面的表达式。具体效果如下所示:

可以看到线条的颜色会根据条件的改变而发生变化。

另外一种方法是使用if/else语句,本质上它和三元运算符的逻辑是一样的。

//@version=5
indicator(title="设置不同的颜色透明度", 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)

当if后面的条件成立时,执行它下面的语句;否则执行else后面的语句。

函数color.new()既可以使用系统内置的颜色,也可以使用自定义的十六进制颜色,这一点非常的灵活。就我个人而言,我很少适用十六进制颜色,我感觉有点抽象,缺乏直观的感受。需要注意的是颜色在Pine Script中也是一种series类型的数据,它后面也可以接历史运算符“[]”。

提示:

TradingView的图表也是由多个图层组成的,如果在同一个区域内出现多种颜色,此时颜色的显示效果会和设置的颜色不一致,这是一种完全正常的现象,犹如现实中的颜料混色一样。

发表回复 0

Index