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

Pine Script(150):K线着色进阶,渐变、偏移、show_last与价格区间

#Pine Script入门教学

为价格K线添加渐变色

Pine Script的 barcolor() 函数可以为TradingView图表上的价格K线着色。该函数为每根K线使用一种颜色,但可以根据不同情况使用不同的颜色。

其中一种选择就是渐变色。当我们定义一个包含两种颜色的范围,并让Pine Script从该范围中选择一种颜色时,我们的图表就能根据某个值的变化,获得一种颜色渐变和过渡的效果。

要创建一个渐变K线颜色,我们需要:

  1. 计算出作为渐变色基准的数值。
  2. 使用 color.from_gradient() 函数获取渐变色。我们将上一步的数值、数值的上下边界以及两种端点颜色传递给该函数。
  3. 使用 barcolor() 函数将渐变色应用到图表的价格K线上。

让我们看看如何将这些步骤转化为代码。

快速示例

首先,我们计算一个值,用它来说明当前K线应使用哪种颜色渐变。一种选择是使用随机指标的 %K值:

// 步骤一:计算随机指标
stochValue = ta.sma(ta.stoch(close, high, low, 14), 3)

这里,ta.stoch() 函数用于计算随机指标的%K线。该函数处理 closehighlow 价格,周期为14。我们将该函数的结果再用 ta.sma() 函数进行平滑,从而得到%K值,并将其存储在 stochValue 变量中供后续使用。

然后,我们用这个值来确定渐变色:

// 步骤二:确定渐变色
gradientColour = color.from_gradient(stochValue, 0, 100, color.maroon, color.lime)

我们使用 color.from_gradient() 函数来获取当前的渐变色。我们为该函数提供了五个参数。

第一个是 stochValue,即随机指标 %K线的值。通过 0100,我们为该值定义了下边界和上边界。color.marooncolor.lime 颜色则为渐变色设置了低端和高端的颜色。

根据当前随机指标%K值与0和100的相对位置,我们得到一个从褐红色到酸橙绿的渐变色。我们将这个颜色存储在 gradientColour 变量中。

然后我们将这个颜色应用到价格K线上:

// 步骤三:将渐变色应用于K线
barcolor(color=gradientColour)

这里我们调用 barcolor() 函数,并把 gradientColour 变量传给它。这样,每根K线都会被赋予一个由 color.from_gradient() 创建的渐变色。

这些渐变颜色在图表上看起来是这样的:

合并步骤

上面的三个步骤提供了清晰且易于扩展的代码。但如果我们的代码不那么复杂,也可以将所有步骤合并到 barcolor() 函数内部。

它看起来是这样的:

// 基于随机指标创建渐变色K线
barcolor(color.from_gradient(ta.sma(ta.stoch(close, high, low, 14), 3), 0, 100, color.maroon, color.lime))

这将 color.from_gradient() 函数放在了 barcolor() 内部,而在 color.from_gradient() 内部我们又调用了 ta.stoch() 函数。

这样做出的代码非常紧凑,但一旦出现错误,也很难进行调试。花一点额外的时间将三个步骤分开编写,得到的脚本会更容易维护。

脚本示例

让我们通过一个完整的脚本来看看上述步骤是如何工作的。下方的指标计算并绘制了7周期的相对强弱指数(RSI)。我们使用20和80作为这个振荡器的超卖和超买水平。

我们基于RSI与其超买和超卖水平的相对位置来创建一个渐变色,并将该颜色应用到图表的价格K线上。

该指标的完整代码是:

//@version=5
indicator(title="Gradient bar colour", precision=2)

// 创建输入选项
priceData = input.source(close, title="Price Data")
rsiLength = input.int(7, title="RSI Length", minval=2)

obLevel = input.int(80, title="Overbought Level")
osLevel = input.int(20, title="Oversold Level")

obColour = input.color(color.green, title="Overbought Bar Colour") 
osColour = input.color(color.red, title="Oversold Bar Colour")

// 计算并绘制RSI
rsiValue = ta.rsi(priceData, rsiLength)
plot(rsiValue, color=color.purple, title="RSI")

// 显示超买和超卖水平
hline(obLevel, color=#787B86, title="Overbought")
hline(osLevel, color=#787B86, title="Oversold")

// 使用基于RSI的渐变色为K线上色
gradientColour = color.from_gradient(rsiValue, osLevel, obLevel, osColour, obColour)
barcolor(gradientColour, title="Gradient Bar Colour")

首先,我们调用 indicator() 函数,为脚本命名并将其绘图的精度设为两位小数。

然后,我们创建了几个输入选项。第一个是input.source()创建的数据源输入,用于指定RSI应计算的数据。三个input.int()创建的整数输入,用于设置RSI周期及其超买和超卖水平。最后两个是input.color()创建的颜色输入,它们设定了渐变色的颜色范围。

接着,ta.rsi() 函数计算相对强弱指数。我们让该函数处理 priceDatarsiLength 这两个输入变量,它们分别默认为收盘价(close)和7根K线的周期。

plot() 函数在图表上以紫色(color.purple)显示RSI。我们使用 hline() 函数在超买和超卖水平(obLevelosLevel 输入变量)绘制两条水平线。

接下来,我们使用 color.from_gradient() 函数来确定渐变色。该颜色基于当前的RSI值(rsiValue)与其配置的超买(obLevel)和超卖(osLevel)水平的相对位置来生成。obColourosColour 变量定义了颜色范围,默认从绿色(color.green)到红色(color.red)。

最后,在最后一个语句中,barcolor() 函数将这个渐变色应用到图表的价格K线上。

下图是该指标在图表上的样子:

正如我们所见,低的RSI值会得到红色的价格K线,而高的RSI值则显示为绿色的K线。位于超买和超卖之间的值则会得到介于红色和绿色之间的渐变色度。

总结

要创建渐变K线颜色,我们首先计算作为渐变色基准的数值。

然后,color.from_gradient() 函数根据该值与高低边界的相对位置,将其转换为一个渐变色。

接下来,我们使用 barcolor() 函数将生成的渐变色应用到图表的价格K线上。

偏移着色的价格K线

在Pine Script中,我们使用 barcolor() 函数为价格K线上色。该函数会对脚本当前正在计算的K线进行着色。但我们也可以将着色的K线向左或向右移动,这个功能称为偏移(offset)。让我们来看看它是如何工作的。

K线颜色偏移详解

偏移(Offset)可以将着色的K线向左或向右移动。这会将K线的颜色从其原始K线移动到另一根不同的K线上。

通常,当我们的代码使用 barcolor() 函数为价格K线上色时,脚本当前正在计算的那根K线会被赋予特定的颜色。

通过偏移,我们可以将着色的K线重新定位到左侧(即朝向之前的K线),或者定位到右侧,即移向时间上晚于当前K线的那些K线。

偏移在多种情况下都很有用。例如,当我们编写一个双K线形态时,在第二根K线结束时,偏移功能可以为该形态的第一根K线赋予特定的颜色。

或者,如果我们的脚本生成买卖信号,我们可以创建一个着色的K线并将其向右偏移一根。这将为交易条件成立后的第一根K线上色。

可能的偏移值

我们通过 barcolor() 函数的 offset 参数来偏移着色的K线。该参数接受三种类型的值:

  • 正值(> 0) 将着色的K线向其原始位置的右侧移动,即朝向时间上更晚的价格K线。
  • 负值(< 0) 将着色的K线向其原始位置的左侧移动,即朝向更早发生的价格K线。
  • 值为0 则将着色的K线放置在脚本计算发生时所在的同一根K线上。

偏移值始终是相对于脚本正在计算的K线而言的。例如,当我们的脚本正在第1,240根K线上计算,并且我们想将着色移动到下一根K线时,我们应使用的偏移值为1,而不是1241

快速示例

下面是 offset 的一个快速示例:

//@version=5
indicator(title="Quick example: offset bar colour", overlay=true)

// 当一根K线的收盘价高于前一根K线时,
// 将前一根K线设为酸橙绿色
barcolor(color=close > close[1] ? color.lime : na, offset=-1)

这里,barcolor() 函数为特定的K线上色。它使用一个条件来判断当前收盘价(close)是否高于前一个收盘价(close[1])。如果是,条件运算符(?:)返回酸橙绿(color.lime)作为K线颜色;否则,na 值会关闭着色功能。

但是,这个颜色并不会出现在收盘价更高的那根K线上。相反,-1 的偏移值会将着色的K线向左移动一格,从而为前一根K线上色。

所以,当一根K线的收盘价高于其前一根K线时,前一根K线会被涂成绿色。效果如下:

我们可以使用更多的偏移值。让我们看另一个例子来学习更多。

图表示例

让我们考虑另一个例子,来看看偏移是如何将K线颜色向左和向右移动的。下面的图表显示了一个做两件事的脚本:它使用一个输入选项所设置的偏移值为价格K线上色,并且它为原始着色K线的位置填充背景色。

因为彩色的背景显示了原始的K线位置,我们可以清楚地看到偏移是如何移动着色K线的。

正向K线偏移

让我们从零偏移开始,此时黄色的K线与蓝色的背景发生在相同的位置:

如果我们将偏移改为1,着色的K线会向其原始位置的右侧移动一根K线:

现在,每一根在蓝色背景之后出现的K线都被涂成了黄色。

当我们将偏移增加到2时,着色的K线会向右再移动一步:

此时,着色的K线距离它们的原始位置有两根K线的距离。

负向K线偏移

负向的K线偏移也会发生类似的情况。首先,让我们回到初始的零偏移状态,此时着色的K线和背景发生在同一时间:

当我们将偏移改为-1时,着色的K线会向其原始位置的左侧移动一根K线:

现在,每一根着色的K线都出现在蓝色背景之前

如果我们将偏移进一步减小到-2,着色的K线会向其初始位置的左侧再移动一步:

现在,每一根着色的K线都距离它们的原始位置有两根K线的距离。

脚本示例

上面图片中的效果是使用下面的指标代码制作的。该脚本会为每日的第一根K线着色并为其背景上色。一个输入选项用于指定K线的偏移量,通过这个选项,我们可以方便地手动更改偏移值。

然而,彩色的背景并不会被偏移。这使得我们能更容易地分辨出着色的K线向哪个方向移动了。

完整的指标代码如下:

//@version=5
indicator(title="Offset bar colour", overlay=true)

// 创建一个用于设置K线颜色偏移值的输入
barColourOffset = input.int(title="Bar Colour Offset", defval=0)

// 确定K线的颜色
newDay     = dayofmonth != dayofmonth[1]
colourBars = newDay ? color.yellow : na

// 使用输入的偏移量为价格K线着色
barcolor(color=colourBars, offset=barColourOffset)

// 通过用彩色背景高亮显示原始位置,
// 我们可以看到偏移的效果
bgcolor(color=newDay ? color.new(color.blue, 85) : na)

首先,我们使用Pine Script的 indicator() 函数来配置指标,为脚本命名并将其叠加在主图表的交易品种上。

然后,我们使用 input.int() 函数创建一个整数输入选项。这个选项将决定着色的K线应该移动多少以及向哪个方向移动。它的默认值为0(即无偏移)。我们将这个“Bar Colour Offset”选项的值存储在 barColourOffset 变量中供后续访问。

接下来,我们确定K线的颜色:

// 确定K线的颜色
newDay     = dayofmonth != dayofmonth[1]
colourBars = newDay ? color.yellow : na

这段代码首先创建了 newDay 变量。它的布尔值(真/假)表明当前K线是否是一个新日历天的开始。每当 dayofmonth 变量的值与前一根K线的值不同(!=)时,情况就是如此。

colourBars 变量持有我们想赋予价格K线的颜色。为了确定这个颜色,条件运算符(?:)会评估 newDay 变量。当该变量为 true 时,运算符返回黄色(color.yellow)作为 colourBars 变量的值;否则,该变量得到 na 值来关闭着色。这就是为特定K线上色的方法。

然后,我们创建着色的K线本身:

// 使用输入的偏移量为价格K线着色
barcolor(color=colourBars, offset=barColourOffset)

这里,barcolor() 函数为图表的价格K线上色。我们使用 colourBars 变量来设置颜色,并使用我们上面创建的 barColourOffset 输入变量来设置偏移。

接下来,bgcolor() 函数为图表的背景着色。我们使用条件运算符为特定K线的背景着色。当新的一天开始时(newDay),背景为蓝色(color.blue),并使用 color.new() 函数设为85%的透明度。否则,na 值会禁用背景色。

最终结果是,我们在着色K线的原始位置上创建了一个彩色的背景,这样我们就能清楚地看到偏移是如何改变K线的初始位置的。

要查看该指标在图表上的样子,请参阅上面的图片。你也可以自己试试这个脚本,用不同的输入值进行实验,看看不同的偏移值是如何改变着色K线的。

总结

通过偏移,一个着色的价格K线可以向其原始位置的左侧或右侧移动。

barcolor() 函数的 offset 参数说明了着色的K线应该向左或向右移动多少根K线。

大于零的偏移值会将着色的K线移动到其原始位置的右侧。

负的偏移值会将着色的K线移动到其原始位置的左侧。

偏移值为零(或根本不使用 offset 参数)时,着色的K线会出现在其原始位置。

只为最近的K线着色(show_last)

TradingView脚本中的 barcolor() 函数可以为价格K线上色。该函数既可以为每一根K线上色,也可以只为特定的K线上色。无论哪种方式,图表上都可能出现数千根着色的K线。但如果我们只想为最近的几根K线上色,该怎么做呢?

为此,我们使用 barcolor() 函数的 show_last 参数。我们传递给该参数的数字,用于指定K线颜色可以在最近的多少根K线上显示。这个K线计数是从图表的最后一根K线开始,向前面的历史K线(即图表的左侧)计算的。

快速示例

比方说,我们想让最后15根K线变为橙色。下面是我们如何为此使用show_last

//@version=5
indicator(title="Quick example: show last bar colours", overlay=true)

// 将最近的15根K线设为橙色
barcolor(color=color.orange, show_last=15)

这个指标调用 barcolor() 函数时使用了两个参数。第一个,color.orange,设置了K线的颜色。另一个,值为15show_last,则指定了最近有多少根K线可以被着色。

下图是该脚本在图表上的样子:

在没有设置K线颜色条件的情况下,理论上每一根以太坊(ETHUSD)的K线都应该变成橙色。但由于show_last限制了着色K线的数量,所以只显示了15根橙色的K线。

show_last的可能取值

我们可以给 show_last 参数三种类型的值:

  • 正值(> 0) 指定了最近有多少根K线可以被着色。
  • 零值(0) 意味着没有限制,因此每一根K线都可以被着色。
  • 负值(< 0) 则表示任何价格K线都不能被着色,这实际上完全关闭了barcolor()的功能。

show_last的默认值是零。所以如果我们不使用这个参数,每一根K线都可以被着色。

设置可能被着色的K线数量

show_last 的一个重要特性是,它只定义了最近有多少根K线可以被着色。换句话说,它指定了 barcolor() 函数可以作用于哪一组K线。但 show_last 并不保证我们会得到特定数量的着色K线。

比方说,我们的脚本只为移动平均线上方的K线上色,并且我们设置 show_last 的值为5。这意味着最多只有最后5根K线可以被着色。现在,如果在这5根K线中只有一根位于均线之上,那么我们在整个图表上就只会看到一根着色的K线。

show_last 不会做的是去搜索整个图表来找到另外4根符合条件的K线。不,show_last 只是定义了哪些最近的K线可以被着色,而这些K线是否真的被着色,则取决于我们编写的K线颜色条件。

图表示例

让我们用一个例子来说明上一点。下面的图表显示了一个寻找两个连续更高收盘价和两个连续更低收盘价的脚本。当它找到这种模式时,它会让第二根K线变成酸橙绿或黄色。

当该脚本使用 show_last 值为0时,每个符合条件的K线模式都会被着色:

show_last 的值为5时,只有最后五根K线可以被着色。但在这段区间内,并没有那么多连续收盘的模式。

因此,从这组5根K线中,我们只得到了3根着色的K线:

这种行为对任何 show_last 的值都会发生。比方说,我们限制脚本最多为最后20根K线上色:

由于并非每根K线都满足颜色条件,所以在可能的20根K线中,只有10根被涂上了绿色或黄色。

脚本示例

上面的图表是使用下面的指标代码制作的。这个脚本有一个输入选项,用于指定最近有多少根K线可以被着色。当出现两个连续的更高收盘价或两个连续的更低收盘价时,就会出现一根着色的K线。

该指标的完整代码是:

//@version=5
indicator(title="Show last bar colours", overlay=true)

// 创建一个输入项来设置show_last的值
barsLastCount = input.int(title="Recent Bars to Colour", defval=0, minval=0)

// 为两个同向连续收盘的K线确定颜色
barColour = if close > close[1] and close[1] > close[2]
    color.lime
else if close < close[1] and close[1] < close[2]
    color.yellow

// 将颜色应用到K线,并将其限制在最近的K线范围内
barcolor(color=barColour, show_last=barsLastCount)

首先,我们使用 indicator() 函数来配置脚本,为指标命名并将其叠加在主图表的交易品种上。

为了配置最近有多少根K线可以被着色,input.int() 函数创建了一个整数输入选项。这个整数输入被命名为“Recent Bars to Colour”,其默认值(defval)为0,并且不能使用低于该值的值(minval=0)。我们使用 barsLastCount 变量来追踪该输入的值。

然后,我们确定要使用哪种K线颜色:

// 为两个同向连续收盘的K线确定颜色
barColour = if close > close[1] and close[1] > close[2]
    color.lime
else if close < close[1] and close[1] < close[2]
    color.yellow

这段代码创建了 barColour 变量。一个级联 if 语句为该变量赋予三种可能的值之一。

第一个 if 条件判断当前收盘价是否高于前一个收盘价(close > close[1]),并且前一个收盘价是否也高于更前一根K线的收盘价(close[1] > close[2])。如果是,代码返回 color.lime 作为 barColour 变量的值。如果该K线模式没有发生,则评估下一个 if 部分。

那段代码测试当前收盘价是否低于前一个收盘价(close < close[1]),并且前一个收盘价是否也小于更前一根K线的收盘价(close[1] < close[2])。当这两个条件都满足时,else if 部分返回 color.yellow 作为变量的值。

当两个条件都未发生时,级联 if 语句默认返回 na 值,这个值会关闭K线的着色功能。

接下来,我们将K线颜色应用到图表上:

// 将颜色应用到K线,并将其限制在最近的K线范围内
barcolor(color=barColour, show_last=barsLastCount)

这里调用了 barcolor() 函数,并带有两个参数。第一个是 barColour 变量,我们之前为其赋予了酸橙绿、黄色或 na 值。

第二个 show_last 参数则使用了 barsLastCount 输入变量。这就是我们的自定义输入选项如何控制最近有多少根K线可以被着色的方法。

你可以自己试试这个脚本,用不同的输入值进行实验,看看不同的值是如何影响 show_last 的行为的。

总结

barcolor() 函数的 show_last 参数指定了最近有多少根K线可以被着色。

这些最近的K线是从图表的最后一根K线向左(即朝向之前的历史K线)测量的。

show_last 设置了可以被着色的最近K线的最大数量,但最终是K线的颜色条件控制着这些K线中哪些会被真正着色。

为落在价格区间内的K线着色

有时,我们很难用肉眼判断一根价格K线是否正好落在一个特定的价格区间内。幸运的是,我们不必为此费力地锻炼眼力。通过一小段代码,TradingView就可以为我们识别出来。让我们看看如何实现。

为价格区间内的TradingView K线着色

当我们监控市场时,有时希望观察一根K线是落在还是触及某个特定区间。我们可以在图表上画线然后自己进行监控,但是当交易品种的价格刻度非常精确时(例如外汇货币对),这种视觉检查会变得非常累。

幸运的是,TradingView的Pine脚本语言可以为我们监控价格K线。有几种方法可以做到这一点。我们可以为位于区间内的K线填充背景色,或者只为交易品种的价格K线赋予一种独特的颜色。

我们通过 barcolor() 来实现后者。该函数可以为整个价格K线上色,并且它接受标准颜色、十六进制颜色,甚至是透明颜色。

让我们看看如何使用该函数来高亮显示位于某个区间内的K线。

概述:为交易区间内的K线着色的步骤

要制作一个能为特定价格区间内的K线着色的TradingView指标或策略,我们可以遵循以下步骤:

  1. (可选) 创建输入项来配置价格区间的范围。
  2. 将当前K线的最高价和最低价与该区间进行比较。
  3. 如果K线位于该区间内,则使用 barcolor() 函数为其着色。

让我们逐步了解这些步骤所需的代码。

步骤一:通过输入项配置价格区间(可选)

要判断一根K线是否在一个区间内,我们首先需要知道这个区间的范围。我们可以在脚本内部计算这些值,例如使用近期的最高价和最低价。或者,我们也可以使用手动设定的值。

在本文中,我们使用手动值。最方便的方法是使用输入选项,这样我们就可以快速地调整脚本的参数而无需修改代码。

所以,在第一步中,我们创建一些输入项:

// 通过输入选项来配置K线范围
rangeUp = input.float(8500, title="Price Range Upper Bound", minval=0)
rangeDown = input.float(7500, title="Price Range Lower Bound", minval=0)
fullBarInRange = input.bool(false, title="Full Bar In Range?")

我们在这里创建了两种类型的输入。前两个是浮点数输入,我们通过 input.float() 函数来创建这种可以接受小数的输入项。

第一个浮点输入名为“Price Range Upper Bound”(价格区间上界),它定义了我们价格区间的最高限制,默认值为8,500。我们使用 rangeUp 变量来追踪其当前值。

第二个浮点输入“Price Range Lower Bound”(价格区间下界),指定了我们关注区间的较低价格,默认值为7,500。我们稍后在代码中将通过 rangeDown 变量来引用这个输入。

第三个输入是一个布尔型(真/假)输入,我们通过 input.bool() 函数来创建。该函数会生成一个我们可以勾选或取消的复选框。我们将这个选项命名为“Full Bar In Range?”(整根K线位于区间内?),并默认将其关闭(false)。我们使用 fullBarInRange 变量来追踪该输入的值。

我们创建最后一个输入的原因是:当我们比较一根K线与一个价格区间时,我们可能要求整根K线都完全位于该区间内,但也可能希望捕捉到那些部分触及该区间的K线。要包含那些部分进入或穿出区间的K线,我们就可以禁用“Full Bar In Range?”这个输入选项。

步骤二:比较K线的最高价和最低价与价格区间

现在,我们来判断一根K线与我们设定的价格区间的关系。为此,我们使用上一步中的价格上下限,并编写两种不同的比较逻辑:

// 根据输入偏好,判断K线是否在区间内
insideRange = if fullBarInRange
    high < rangeUp and low > rangeDown
else
    high > rangeDown and low < rangeUp

我们在这里创建的 insideRange 变量通过一个 if/else 语句来获取其值。我们评估的条件是 fullBarInRange 这个输入变量。当只想考虑完全在价格区间内的K线时,该变量为 true

因此,我们判断K线的最高价是否低于(<)价格区间的上界(rangeUp),并且要求K线的最低价高于(>)区间的下界(rangeDown)。当K线完全位于该区间内时,insideRange 变量得到一个 true 值(否则为 false)。

当K线不需要完全位于价格区间内时,else 代码块会执行。在这种情况下,我们只简单地判断K线的最高价是否高于区间的下限(rangeDown),同时最低价是否低于区间的上限(rangeUp)。

步骤三:为价格区间内的K线上色

在上一步中,我们创建了一个布尔变量 insideRange,它告诉我们当前K线是在价格区间内(true)还是在其外(false)。现在,我们利用这个信息来为价格K线本身着色。

我们在TradingView中使用 barcolor() 为价格K线上色。但该函数通常会为每一根K线上色,这并非我们所愿。因此,我们使用一个条件来只为位于区间内的K线上色:

// 为区间内的K线上色
barcolor(insideRange ? #00FF7F : na)

这里,我们调用 barcolor() 来改变价格K线的颜色。由于我们不希望高亮显示所有K线,因此我们在该函数的第一个参数中加入了一个条件。我们使用条件运算符(?:)来评估 insideRange 是否为 true

当该变量为 true 时,运算符返回 #00FF7F 这个十六进制颜色值,即春绿色,barcolor() 随即使用该颜色为价格K线上色。(虽然我们这里使用了十六进制颜色,但你也可以使用标准颜色或透明色。)

当一根K线不落在区间内时,insideRangefalse。在这种情况下,条件运算符返回 na。这个特殊的值会为该K线禁用 barcolor() 的功能。通过这种方式,我们只为落在价格区间内的K线上色。

示例指标:为比特币价格区间内的K线着色

上述步骤被包含在下方的示例指标中。这个脚本会改变落在$7,500到$8,500区间内的K线的颜色。

通过一个输入选项,我们可以配置K线是应该完全位于该区间内,还是只需部分触及。(尽管这个示例是一个指标脚本,但完全相同的代码也可以被TradingView策略使用。)

该指标的代码是:

//@version=5
indicator(title="Colour bars in price range", overlay=true)

// 步骤一:
// 通过输入选项配置K线范围
rangeUp = input.float(8500, title="Price Range Upper Bound", minval=0)
rangeDown = input.float(7500, title="Price Range Lower Bound", minval=0)
fullBarInRange = input.bool(false, title="Full Bar In Range?")

// 步骤二:
// 根据输入偏好,判断K线是否在区间内
insideRange = if fullBarInRange
    high < rangeUp and low > rangeDown
else
    high > rangeDown and low < rangeUp

// 步骤三:
// 为区间内的K线上色
barcolor(insideRange ? #00FF7F : na)

让我们看看这个脚本做了什么。在下面的比特币(BTC/USD)图表上,该指标高亮显示了任何其最高价或最低价进入了$7,500到$8,500区间的K线。在该范围之外的K线没有被涂成绿色,而是保留了其原始颜色。

当我们启用“Full Bar In Range?”输入时,该指标只高亮显示完全在价格区间内的K线。对于同一个图表周期,它看起来是这样的:

赞(0)
未经允许不得转载:图道交易 » Pine Script(150):K线着色进阶,渐变、偏移、show_last与价格区间
分享到

评论 抢沙发

登录

找回密码

注册