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

Pine Script(148):手动改色、颜色显示差异与旧版颜色兼容

#Pine Script入门教学

如何手动更改脚本的颜色

在TradingView中,除了可以通过编程方式来处理颜色,我们也可以手动自定义指标和交易策略的颜色。该如何操作呢?

在TradingView中处理颜色

基本的TradingView颜色以及十六进制颜色值,在我们需要从脚本中以可视化的方式输出数值时,为我们提供了大量的颜色选项。当我们创建自己的指标或交易策略时,大多数时候我们会通过编程方式来处理颜色,例如有条件地改变颜色。

但我们也可以手动更改脚本的颜色。这样,我们就可以在不编辑代码的情况下调整脚本的颜色,并能为同一个脚本的多个实例设置不同的颜色。在本文中,我们将讨论如何手动更改脚本颜色。我们还会探讨如何通过编程为绘图和图形添加描述性名称,这有助于我们在设置时清楚地知道正在更改的是哪个颜色。

手动调整标准TradingView脚本的颜色

要手动更改脚本的颜色,可以按以下步骤操作。假设我们已经将MACD指标添加到了我们的交易品种上,图表看起来是这样的:

要更改MACD绘图的颜色,我们首先需要打开脚本的属性窗口。有几种方法可以做到这一点。第一种方法是在脚本的任一绘图上(在这里是直方图或其中一条线)单击右键,然后选择“格式…”:

也可以通过双击一个绘图来打开脚本属性窗口,此时鼠标光标会变成一只小手,表示已成功选中该绘图:

第三种也是最后一种打开脚本属性窗口的方法是,点击脚本名称右侧的齿轮图标

以上三种方法中的任何一种都会弹出脚本的设置窗口。该窗口默认会选中“输入”标签页。对于MACD指标,这个窗口会显示以下设置:

要更改颜色设置,我们切换到“样式”标签页,对于MACD指标,这里有以下选项:

这里的三个颜色各有其名(“Histogram”、“MACD”和“Signal”),并分别被设为了红色、蓝色和橙色。我们通过点击显示当前颜色的方块来更改颜色,就像这样:

我们也可以在这里使用网格下方的滑块来更改颜色的透明度。例如,将直方图设为深蓝色,透明度设为大约25%,效果如下:

同样地,更改MACD线的颜色需要点击它当前的颜色。但这次我们不选择标准颜色,而是选择“自定义颜色…”选项:

这会弹出一个窗口,我们除了可以设置透明度和颜色本身,还可以指定饱和度。通过这些选项,我们可以将MACD线设置为以下效果:

在“样式”窗口中指定好颜色后,我们点击“确定”来让脚本改变其颜色。在我们的例子中,这会让MACD指标看起来是这样的:

更改自定义TradingView脚本的颜色

手动更改自定义TradingView脚本颜色的方法与上文讨论的相同。然而,根据脚本编码方式的不同,我们可能很难分清哪个颜色设置对应哪个绘图。例如,我们来看看下面这个来自某个自定义脚本的“样式”窗口:

这9条线状图都有不同的颜色。但与MACD指标(其每个绘图都有一个描述性的名称)不同的是,这里所有的绘图都被简单地命名为“Plot”。这就导致我们无法清楚地知道哪个颜色选项对应哪条曲线。

是以下这段代码生成了那些未命名的绘图:

//@version=5
indicator(title="Example of multiple moving averages",
     shorttitle="MAs example", overlay=true)

ma1 = ta.ema(close, 10)
ma2 = ta.sma(high, 20)
ma3 = ta.ema(close, 30)
ma4 = ta.sma(close, 40)
ma5 = ta.ema(low, 50)
ma6 = ta.sma(high, 60)
ma7 = ta.ema(close, 70)
ma8 = ta.sma(low, 80)
ma9 = ta.sma(close, 90)

plot(ma1, color=color.red)
plot(ma2, color=color.fuchsia)
plot(ma3, color=color.blue)
plot(ma4, color=color.orange)
plot(ma5, color=color.black)
plot(ma6, color=color.teal)
plot(ma7, color=color.maroon)
plot(ma8, color=color.navy)
plot(ma9, color=color.lime)

我们以 indicator() 函数开始这个基础示例,用以设置指标的属性。接着创建的9个变量分别命名为 ma1ma9,每个变量都通过 ta.sma()ta.ema() 函数计算出一条移动平均线。

这两个函数都需要一个用于处理的序列值(如 closehighlow 价格)以及一个指定计算周期的整数。这些移动平均线的周期范围从10到90。

在计算完指数移动平均线(EMA)和简单移动平均线(SMA)之后,我们通过 plot() 函数将它们绘制在图表上。该函数的第一个参数用于指定要在图表上显示什么数据,这里我们分别设为 ma1ma9 变量。每条曲线都被设置成一种基本的TradingView颜色。

当添加到图表上时,这个示例指标看起来是这样的:

在TradingView中指定绘图或图形的标题

当每个绘图都有一个描述性的名称时,手动更改脚本中使用的颜色会变得更容易。我们可以通过 plot() 函数的 title 参数来实现这一点,该参数允许我们为绘图指定一个名称。这个名称随后会显示在“样式”窗口中。

事实证明,plot() 并不是唯一可以使用 title 来设置自定义绘图名称的函数。以下每个函数都可以使用可选的 title 参数:

函数 描述
barcolor() 设置价格K线的颜色。
bgcolor() 用一种颜色填充图表的背景。
fill() 填充两条曲线或水平线之间的背景区域。
hline() 在指定的价格水平上绘制一条水平线。
plot() 在图表上绘制一个数据序列。
plotarrow() 在图表上绘制向上和向下的箭头。
plotbar() 在图表上绘制OHLC价格K线。
plotcandle() 在图表上绘制价格蜡烛图。
plotchar() 在图表上将Unicode字符作为视觉图形绘制。
plotshape() 在图表上绘制视觉图形(如箭头、十字和旗帜)。

注意

始终为 title 参数指定一个具有描述性且唯一的名称,这样可以更容易地区分脚本的不同视觉输出。

示例:在TradingView中创建绘图名称

回到我们之前的脚本示例,我们可以像这样使用 title 参数为每个绘图指定一个描述性的名称:

//@version=5
indicator(title="Example of multiple moving averages",
     shorttitle="MAs example", overlay=true)

ma1 = ta.ema(close, 10)
ma2 = ta.sma(high, 20)
ma3 = ta.ema(close, 30)
ma4 = ta.sma(close, 40)
ma5 = ta.ema(low, 50)
ma6 = ta.sma(high, 60)
ma7 = ta.ema(close, 70)
ma8 = ta.sma(low, 80)
ma9 = ta.sma(close, 90)

plot(ma1, color=color.red, title="EMA 1")
plot(ma2, color=color.fuchsia, title="SMA 1")
plot(ma3, color=color.blue, title="EMA 2")
plot(ma4, color=color.orange, title="SMA 2")
plot(ma5, color=color.black, title="EMA 3")
plot(ma6, color=color.teal, title="SMA 3")
plot(ma7, color=color.maroon, title="EMA 4")
plot(ma8, color=color.navy, title="SMA 4")
plot(ma9, color=color.lime, title="SMA 5")

这个代码示例与前一个几乎完全相同,唯一的例外是现在每个 plot() 函数都有一个 title 参数。有了这些绘图名称(如EMA 1SMA 4),我们就可以在脚本的“样式”窗口中轻松地区分不同的绘图了:

我们为 title 参数设定的值也会影响“数据窗口”中使用的名称。这有助于识别特定绘图的颜色和数值,看起来是这样的:

举个例子,让我们把脚本的颜色改为蓝色、红色或绿色。“样式”窗口中的设置会是这样的:

点击“确定”后,指标在图表上看起来是这样的:

阻止手动修改TradingView脚本的颜色

除了手动更改脚本颜色,我们也可以阻止用户手动修改脚本的颜色。之前表格中提到的每个拥有 title 参数的TradingView函数,也都有一个 editable 参数。当我们将它设为 false 时,便会禁止用户在“样式”窗口中更改颜色和其他设置。

由于该参数默认为 true,因此我们总是可以更改样式设置,除非我们特意将 editable 设为 false。为了看看 editable 的效果,让我们在示例脚本的每个 plot() 语句中都将它设为 false

//@version=5
indicator(title="Example of multiple moving averages",
     shorttitle="MAs example", overlay=true)

ma1 = ta.ema(close, 10)
ma2 = ta.sma(high, 20)
ma3 = ta.ema(close, 30)
ma4 = ta.sma(close, 40)
ma5 = ta.ema(low, 50)
ma6 = ta.sma(high, 60)
ma7 = ta.ema(close, 70)
ma8 = ta.sma(low, 80)
ma9 = ta.sma(close, 90)

plot(ma1, color=color.red, title="EMA 1", editable=false)
plot(ma2, color=color.fuchsia, title="SMA 1", editable=false)
plot(ma3, color=color.blue, title="EMA 2", editable=false)
plot(ma4, color=color.orange, title="SMA 2", editable=false)
plot(ma5, color=color.black, title="EMA 3", editable=false)
plot(ma6, color=color.teal, title="SMA 3", editable=false)
plot(ma7, color=color.maroon, title="EMA 4", editable=false)
plot(ma8, color=color.navy, title="SMA 4", editable=false)
plot(ma9, color=color.lime, title="SMA 5", editable=false)

这里唯一的区别是在每个 plot() 语句中都添加了 editable=false 这段代码。保存脚本后,“样式”窗口现在看起来是这样的:

这里我们可以看到,所有绘图的配置选项都不能再被手动修改了。当然,移动平均线仍然会显示在图表上:

并且每个平均线的名称仍然会显示在“数据窗口”中——editable 只会从“样式”窗口中移除这些绘图的设置选项:

总结

手动更改脚本的颜色是在脚本设置的“样式”标签页中完成的。该窗口可以通过在绘图上单击右键并选择“格式”、点击齿轮图标或双击绘图来打开。通过多个函数都支持的 title 参数,我们可以为绘图或图形指定名称。选择一个唯一且具有描述性的名称,能让修改自定义脚本所使用的颜色变得更容易。

为什么相同的颜色看起来并不总是一样

当我们在指标或策略的代码中指定了某个颜色后,为什么在将该脚本多次添加到图表时,它并不会使用我们指定的颜色?这到底是怎么回事?

同一个TradingView脚本,却是不同的颜色

我们可以在TradingView中通过编程使用标准的TradingView颜色和十六进制颜色值。然而,我们选择的颜色并不总是与图表上实际显示的颜色相同。实际上,图表上的颜色可能是原始颜色的一个不同色度,甚至可能是一个完全不相关的颜色。

每当同一个脚本被多次添加到同一个图表时,就会发生这种颜色轮换(shifted colours)。当脚本已经在图表上,但其代码被编辑并保存时,这种颜色轮换也会发生。此时,TradingView会在图表上重新创建该脚本,很可能会使用略有不同的颜色。

这些变化的颜色使得区分同一个脚本的多个实例变得更容易。但其负面影响是,脚本的颜色可能与我们特意在图表上选择的颜色有很大差异,正如我们将在下面的示例中看到的那样。

注意

颜色轮换似乎是TradingView的一个设计特性。目前,防止TradingView自动更改颜色的唯一方法是将所有代码都放在同一个脚本中(如果可能的话)。这样脚本就不需要被重复地添加到同一个图表上(本文稍后会讨论这种情况的一个例子)。

在TradingView中基础颜色的轮换

为了看看TradingView的基础颜色是如何轮换的,我们首先创建一个简单的脚本来绘制一条绿色的指数移动平均线(EMA):

//@version=5
indicator(title="Colouring repeatedly", overlay=true)

// 输入选项
emaLength = input.int(20, title="EMA Length")

// 绘制
plot(ta.ema(close, emaLength), color=color.green, linewidth=3)

我们首先使用 indicator() 函数及其两个参数来定义指标的属性:title(指定脚本名称)和 overlay。当 overlay 参数设为 true 时,脚本会显示在主图表的交易品种上,而不是在子图中。

然后,我们使用 input.int() 函数创建一个数值整数输入。我们将这个输入命名为“EMA Length”,并将其默认值设为20。input.int() 函数不仅在脚本的设置中创建一个选项,还会返回该输入的值,这里我们将该值赋给 emaLength 变量。

我们使用 plot() 在图表上显示EMA。该函数会在图表上绘制其第一个参数所指定的数据。这里,我们将该参数设为由 ta.ema() 返回的值。该函数基于两个值来计算EMA:一个数据序列(这里使用 close 设为收盘价)和以K线数量为单位的移动平均线周期。对于后者,我们使用 emaLength 输入变量。

plot() 函数默认绘制一条线,这里这条线被设为绿色(color.green)这一TradingView基础颜色,其 linewidth 为3,这使我们的线条比可能的最粗线条小一级。

当添加到S&P 500指数差价合约图表上时,这个示例指标看起来是这样的:

该脚本的输入选项如下:

重复使用带有TradingView基础颜色的脚本

现在,让我们来看看当这个示例指标被多次添加到图表时,颜色是如何轮换的。脚本的第二个实例,这次周期为30,使图表看起来是这样的:

这里我们已经可以看到两条EMA线之间存在明显的颜色差异,但让我们继续添加同一个脚本。这是我们第三次添加它,现在的周期为40:

然后是添加了周期设置为50的指标之后:

让我们再额外添加同一个指标三次,周期分别设为60、70和80:

这个将EMA线设为 green (绿色)这一TradingView基础颜色的指标,现在已经被7次添加到同一个图表上。然而,只有一条线真正以纯绿色绘制。

如果我们分析这些线条的颜色,并将它们的十六进制颜色值通过在线工具转换为维基百科颜色列表中的名称,那么我们的TradingView脚本的行为如下:

脚本序号 green 变为 近似颜色名称
1 #008000 Green
2 #59AC72 Medium sea green
3 #59AC8B Cadet blue
4 #59ACA4 Cadet blue
5 #599BAC Cadet blue
6 #5983AC Air Force blue
7 #596AAC UCLA blue

现在,让我们看看十六进制颜色是如何被TradingView轮换的。

在TradingView中使用十六进制颜色改变颜色

当脚本使用十六进制颜色值时,同样会发生这种颜色波动的情况,并且对于这些颜色,轮换的效果似乎更加明显。为了更仔细地研究这一点,我们首先修改我们的示例脚本,让它使用一个十六进制颜色值:

//@version=5
indicator(title="Colouring repeatedly", overlay=true)

// 输入选项
emaLength = input.int(20, title="EMA Length", step=5)

// 绘制
plot(ta.ema(close, emaLength), color=#1E90FF, linewidth=3)

这个脚本版本与前一个的唯一区别在于,plot() 函数的 color 参数现在被设为 #1E90FF,这是道奇蓝的十六进制颜色值。

当我们第一次将这个版本的脚本添加到图表时,它看起来是这样的:

重复添加带有十六进制颜色的TradingView脚本

现在,让我们看看当同一个脚本被重复添加到图表时,这个颜色是如何逐渐变化的。Colouring repeatedly脚本的第二个实例已经将其EMA线显示为紫色色度:

第三次添加该脚本时,线条的颜色变为紫色:

再次添加同一个指标,这次周期长度为50,图表看起来是这样的:

现在,当脚本再额外添加三次时,线条的颜色变为粉色:

现在,这个绘制道奇蓝EMA线的指标已经被7次添加到图表上。但这些线条中只有一条真正以那种浅蓝色调绘制。

当我们分析这些不同线条的颜色,并使用在线工具将它们显示的颜色转换为维基百科颜色列表中的名称时,我们的TradingView脚本的行为如下:

脚本序号 Dodger blue 变为 近似颜色名称
1 #1E90FF Dodger blue
2 #6D8AFF Cornflower blue
3 #7A6DFF Medium slate blue
4 #A66DFF Lavender indigo
5 #D26DFF Heliotrope
6 #FE6DFF Ultra pink
7 #FF6DD4 Rose pink

幸运的是,在某些情况下,有一个变通方法可以防止TradingView轮换颜色。

如何防止TradingView更改脚本的颜色?

目前,防止TradingView轮换脚本颜色的唯一方法,就是消除多次添加同一个脚本的需求。虽然将多个脚本实例的代码合并到一个指标或策略脚本中并非总是可行,但对于上面讨论的基础脚本示例来说,这是一个可行的替代方案。

因此,与其多次将绘制单条移动平均线的脚本添加到图表,我们也可以创建一个能绘制多条移动平均线的单一脚本。例如:

//@version=5
indicator(title="Colouring repeatedly - single script", overlay=true)

// 输入选项
emaLength = input.int(20, title="EMA Length", step=5)

// 绘制
plot(ta.ema(close, emaLength), color=#1E90FF, linewidth=3)
plot(ta.ema(close, emaLength + 10), color=#1E90FF, linewidth=3)
plot(ta.ema(close, emaLength + 20), color=#1E90FF, linewidth=3)
plot(ta.ema(close, emaLength + 30), color=#1E90FF, linewidth=3)
plot(ta.ema(close, emaLength + 40), color=#1E90FF, linewidth=3)
plot(ta.ema(close, emaLength + 50), color=#1E90FF, linewidth=3)
plot(ta.ema(close, emaLength + 60), color=#1E90FF, linewidth=3)

这里,我们重复使用 plot() 函数来绘制移动平均线。每个 plot() 语句的 color 参数都设为 #1E90FF,即道奇蓝的十六进制颜色值。我们将每个 ema() 函数的周期设为 emaLength 输入变量的值,并在除了一个之外的所有情况下,都给它增加一个从10到60不等的固定值。这样,这些EMA的周期就与我们之前示例中添加到图表上的多个脚本实例的周期相同了。

现在,当我们将这个单一脚本添加到图表时,每条移动平均线都被赋予了相同的颜色:

总结

每当同一个TradingView脚本被多次添加到同一个图表时,脚本的颜色就会发生轮换。这些改变后的颜色开始时可能与原始颜色相似,但最终可能变成一个完全不同的颜色。虽然这有助于区分同一个脚本的不同实例,但它也导致我们的脚本使用了我们代码中指定之外的颜色。一个能防止TradingView改变脚本颜色的变通方法是,在可能的情况下,将代码合并到一个单一的指标或策略中。

如何使用旧版(v3及更早)的颜色

Pine Script提供了几种内置的颜色变量,它们可以与任何接受颜色的函数配合使用。它们的功能之一,就是为线图着色或为图表背景赋予特定的色度。

当TradingView推出Pine Script的第4个版本时,他们对颜色变量进行了两项调整:

  • 不同的变量名。每个变量现在都以 color. 前缀开始。例如,red 变成了 color.redorange 则变成了 color.orange
  • 略有不同的颜色值。例如,color.blue 的蓝色比原始的 blue 颜色更浅。

让我们来看看这次颜色变化具体是怎么回事。然后,我们将探讨如何在当前的Pine Script脚本中使用那些旧版的颜色。

Pine Script中的颜色变化

下表展示了Pine Script的颜色变量在第4版中的变化情况:

颜色 Pine Script v4及更高版本 Pine Script v3及更早版本
水绿色 color.aqua aqua
黑色 color.black black
蓝色 color.blue blue
紫红色 color.fuchsia fuchsia
灰色 color.gray gray
绿色 color.green green
酸橙色 color.lime lime
褐红色 color.maroon maroon
海军蓝 color.navy navy
橄榄色 color.olive olive
橙色 color.orange orange
紫色 color.purple purple
红色 color.red red
银色 color.silver silver
青色 color.teal teal
白色 color.white white
黄色 color.yellow yellow

在17个颜色变量中,只有两种颜色保持不变:橄榄色(color.olive)和白色(color.white)。

虽然一些颜色只改变了一点,但其他的则有明显的不同。如果那些旧版的颜色对我们的脚本来说效果更好,我们该如何在最新版本的Pine Script中重新使用它们呢?让我们一探究竟。

旧版的Pine Script颜色

要在最新版本的Pine Script中使用版本3及更早版本的颜色,我们可以这样做:

  1. 查找每个旧版颜色变量对应的十六进制颜色值。
  2. 创建自定义变量来存储这些十六进制颜色值。
  3. 然后,在任何需要使用颜色的地方,使用这些自定义变量。

为了能在脚本中方便地使用这些旧版颜色,我们可以将以下代码添加到脚本的顶部附近:

// 使用十六进制等价值来定义
// Pine Script v3版本的颜色变量
var colorAqua    = #00FFFF
var colorBlack   = #000000
var colorBlue    = #0000FF
var colorFuchsia = #FF00FF
var colorGray    = #808080
var colorGreen   = #008000
var colorLime    = #00FF00
var colorMaroon  = #800000
var colorNavy    = #000080
var colorOlive   = #808000
var colorOrange  = #FF7F00
var colorPurple  = #800080
var colorRed     = #FF0000
var colorSilver  = #C0C0C0
var colorTeal    = #008080
var colorWhite   = #FFFFFF
var colorYellow  = #FFFF00

这段代码为Pine Script的每种标准颜色都创建了一个对应的变量。它们的十六进制值与Pine Script版本3及更早版本的颜色相同,并且这些自定义变量的名称与我们熟悉的标准名称相似。

在脚本中加入了上面的代码后,我们就可以像使用其他颜色一样来使用这些自定义变量了。例如:

// 使用自定义颜色变量,例如用于K线着色
barcolor(close > ta.ema(close, 20) ? colorGreen : colorRed)

这里,barcolor() 函数根据一条指数移动平均线,将图表上的价格K线涂成绿色或红色。我们使用的红色和绿色色度来自旧版的颜色,而非当前的标准颜色变量

脚本示例

让我们通过一个完整的脚本来看看如何使用这些自定义颜色变量。下方的指标会计算两条移动平均线,我们在图表上用旧版的颜色来绘制它们。

我们还使用这些旧版颜色来改变图表的背景,并最终用它们来为价格K线上色。

该指标的完整代码如下:

//@version=5
indicator(title="Legacy Pine colours", overlay=true)

// 使用十六进制等价值来定义
// Pine Script v3版本的颜色变量
var colorAqua    = #00FFFF
var colorBlack   = #000000
var colorBlue    = #0000FF
var colorFuchsia = #FF00FF
var colorGray    = #808080
var colorGreen   = #008000
var colorLime    = #00FF00
var colorMaroon  = #800000
var colorNavy    = #000080
var colorOlive   = #800000
var colorOrange  = #FF7F00
var colorPurple  = #800080
var colorRed     = #FF0000
var colorSilver  = #C0C0C0
var colorTeal    = #008080
var colorWhite   = #FFFFFF
var colorYellow  = #FFFF00

// 计算两条移动平均线
fastAverage = ta.ema(close, 20)
slowAverage = ta.sma(close, 100)

// 在图表上绘制两条均线
plot(fastAverage, color=colorOrange, linewidth=2, title="Fast Average")
plot(slowAverage, color=colorFuchsia, linewidth=2, title="Slow Average")

// 根据快慢均线为背景着色
backgroundColor = if fastAverage > slowAverage and slowAverage > slowAverage[1]
    color.new(colorGreen, 85)
else if fastAverage < slowAverage and slowAverage < slowAverage[1]
    color.new(colorRed, 85)
else
    color.new(colorYellow, 85)
bgcolor(backgroundColor)

// 当价格穿越快线时为K线着色
crossAboveMA = ta.crossover(close, fastAverage)
crossBelowMA = ta.crossunder(close, fastAverage)
barcolor(crossAboveMA ? colorPurple : crossBelowMA ? colorAqua : na)

我们以 indicator() 函数开始,它负责为脚本命名,并通过 overlay=true 将指标叠加到主图表的交易品种上。

然后,我们包含了上文讨论过的自定义颜色变量。这样,我们就在脚本中获得了Pine Script版本3及更早版本的颜色。

接下来,代码计算了两条移动平均线。第一条是20周期的EMA,另一条是100周期的SMA。我们将它们的值存储在 fastAverageslowAverage 变量中。

然后我们绘制这些移动平均线:

// 在图表上绘制两条均线
plot(fastAverage, color=colorOrange, linewidth=2, title="Fast Average")
plot(slowAverage, color=colorFuchsia, linewidth=2, title="Slow Average")

plot() 函数在这里创建了两个绘图。第一个以旧版的橙色(colorOrange)显示快周期均线。另一个则以旧版的紫红色(colorFuchsia)显示慢周期均线。由于我们没有设置绘图类型,Pine Script默认会将它们都绘制成常规的线条。

接下来,我们为图表背景着色:

// 根据快慢均线为背景着色
backgroundColor = if fastAverage > slowAverage and slowAverage > slowAverage[1]
    color.new(colorGreen, 85)
else if fastAverage < slowAverage and slowAverage < slowAverage[1]
    color.new(colorRed, 85)
else
    color.new(colorYellow, 85)
bgcolor(backgroundColor)

这里的级联 if 语句首先确定背景颜色。

第一个比较判断快周期均线是否在慢周期均线上方,并且慢周期均线是否高于其前一个值(即正在上升)。对于这种情况,我们使用旧版的绿色(colorGreen),并用 color.new() 函数为其设置85%的透明度。

否则,Pine Script会继续评估下一个条件。该条件检查快周期均线是否位于慢周期均线之下,同时慢周期均线也在下降。如果满足条件,我们就使用带有85%透明度的旧版红色(colorRed)。

如果第二个条件也不满足,级联if语句则返回黄色(colorYellow)作为默认颜色。

在这之后,bgcolor() 函数会将最终选定的颜色应用到图表的背景上。

最后,我们为特定的K线着色:

// 当价格穿越快线时为K线着色
crossAboveMA = ta.crossover(close, fastAverage)
crossBelowMA = ta.crossunder(close, fastAverage)

barcolor(crossAboveMA ? colorPurple : 
         crossBelowMA ? colorAqua : 
             na)

我们在这里定义了两个条件。第一个通过 ta.crossover() 函数来判断K线的收盘价是否上穿了20周期的快速平均线。如果发生了上穿,我们得到一个 true 值(否则为 false)。

同样地,第二个条件通过 ta.crossunder() 函数检查收盘价是否下穿了快速平均线。

接下来,我们使用 barcolor() 函数为图表上的K线着色。条件运算符(?:)负责决定使用哪种颜色。当收盘价上穿均线时(即crossAboveMA变量为true),我们使用旧版的紫色(colorPurple)。

如果收盘价下穿了均线(crossBelowMA),我们则选择旧版的水绿色(colorAqua)。当没有发生任何交叉时,na 值会关闭K线着色功能。

在图表上,我们可以看到两条移动平均线都以旧版的颜色显示。并且图表背景以及一些价格K线也都使用了这些旧版颜色。下图展示了移动平均线和带有趋势颜色的背景效果:

总结

Pine Script的第4版更改了许多标准颜色变量所对应的颜色值。

幸运的是,我们仍然可以通过它们的十六进制颜色值来使用这些旧版的颜色。

当我们使用这些十六进制值创建变量后,就可以在最新版本的Pine Script中继续使用那些早期的颜色了。

赞(0)
未经允许不得转载:图道交易 » Pine Script(148):手动改色、颜色显示差异与旧版颜色兼容
分享到

评论 抢沙发

登录

找回密码

注册