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

Pine Script(190):方框边框颜色与样式,set_border_color与set_border_style

#Pine Script入门教学

用box.set_border_color()更改方框的边框颜色

在我们创建一个方框后,可以使用box.set_border_color()函数来更改该方框的颜色。这个颜色会应用于方框的所有四个边框。

该函数的标准语法格式如下:

box.set_border_color(id, color)

id参数是我们想要更改的方框绘图的标识符。box.new()在创建方框时会返回这个ID,它告知Pine Script要修改哪个方框。没有它,Pine Script将无从知晓我们想要修改哪个方框。color参数用于设置方框的新边框颜色,可用的颜色选项包括:标准颜色变量(例如color.orange)、十六进制颜色值(例如#ebebeb)、由RGB值创建的颜色(例如color.rgb(220, 120, 34)),以及使用color.new()函数创建的带透明度的颜色。

快速示例

要更改一个方框的边框颜色,我们首先需要一个方框。因此,我们先用box.new()创建一个:

// 创建一个范围超出当前K线10%的方框,
// 时间范围在20根K线前至当前K线之间
myBox = box.new(left=bar_index[20], top=high * 1.1,
	 right=bar_index, bottom=low * 0.9, bgcolor=na,
	 border_width=2)

这段代码把box.new()返回的标识符存储在myBox变量中。然后我们就可以使用这个标识符和box.set_border_color()函数了。例如:

// 将方框的边框颜色更改为橙色
box.set_border_color(id=myBox, color=color.orange)

这里我们修改了myBox方框,把其边框颜色设为橙色(color.orange)。

这两个代码片段所创建的方框效果如下:

顺便一提,box.set_border_color()并不要求使用关键字参数。示例中使用它们只是为了让代码更清晰。但你可以省略它们以减少输入量,像这样也完全有效:

// 将方框的边框颜色更改为橙色
box.set_border_color(myBox, color.orange)

其他颜色选项

标准颜色变量并非box.set_border_color()接受的唯一颜色选项。我们也可以使用一个十六进制颜色值:

// 使用品蓝色作为方框的边框颜色
box.set_border_color(id=myBox, color=#4169E1)

或者,我们也可以使用color.rgb()函数,通过红、绿、蓝三个分量值来设置边框颜色:

// 使方框绘图的边框为深粉色
box.set_border_color(id=myBox, color=color.rgb(231, 84, 128))

我们还可以使用color.new()函数为上述三种颜色选项中的任意一种添加透明度。下面是它与一个标准颜色变量结合使用的例子:

// 将方框的边框变为带透明度的紫红色
box.set_border_color(id=myBox, color=color.new(color.fuchsia, 75))

box.set_border_color()的使用方式

box.set_border_color()函数主要有两种用途。一是更改我们之前创建的方框绘图的边框颜色。二是禁用我们之前创建的方框的边框,我们通过把其边框颜色设置为na值来实现这一点。(要重新启用边框,只需再次把它设置为一个有效的颜色即可。)

我们经常把box.set_border_color()与一个真/假条件判断结合使用,这样可以在特定情况发生时更改边框颜色,而在其他时候保持其不变。

如果我们想在任何情况下都把边框设置为同一种颜色,那么我们也可以在用box.new()创建方框时就直接指定边框颜色。那样可以减少代码量,并使我们的代码更紧凑。

示例脚本

让我们在一个完整的脚本中看看如何使用box.set_border_color()。下面的指标会为未来的价格绘制一个方框,该方框的颜色会根据当前价格与移动平均线的关系而变为红色或绿色。

//@version=5
indicator(title="设置方框边框颜色", overlay=true)

// 计算并绘制指数移动平均线
emaValue = ta.ema(close, 20)
plot(series=emaValue, title="EMA", color=color.orange, linewidth=2)

// 在最后一根历史K线上,用一个方框绘图
// 来高亮显示一个预期范围
if barstate.islastconfirmedhistory
    myBox = box.new(left=bar_index[1], top=high * 1.03,
         right=bar_index + 10, bottom=low * 0.97, bgcolor=na,
         border_width=2)

    if close > emaValue
        box.set_border_color(id=myBox, color=color.green)
    else
        box.set_border_color(id=myBox, color=color.red)

首先,我们用indicator()函数来配置指标,它为脚本命名并使其叠加显示在主图表上。

然后,我们使用ta.ema()函数计算指数移动平均线,并把这个20周期的平均值存储在emaValue变量中。接着plot()函数把这个值以橙色(color.orange)的常规线图形式显示出来。

接下来,一个if语句检查脚本是否运行到了图表的最后一根已确认的历史K线(barstate.islastconfirmedhistory)。我们在这根K线上做两件事。

首先,我们使用box.new()创建一个方框绘图。由于这段代码只在该特定K线上运行,所以只会创建一个方框(而不是多个)。

方框的上下边框距离当前K线3%(high * 1.03low * 0.97)。左边框是前一根K线(bar_index[1]),而右边框则被放置在未来10根K线处(bar_index + 10)。我们通过把bgcolor设置为na来禁用方框的背景,并通过border_width来增加方框的边框尺寸。

然后,一个if/else语句判断当前收盘价(close)是否高于20周期的EMA(emaValue)。如果是,box.set_border_color()函数把方框的边框更改为绿色(color.green)。如果收盘价等于或低于平均线,else代码块则把方框的边框设为红色(color.red)。

让我们看看这个脚本在图表上的效果。当当前价格高于移动平均线时,脚本会创建一个带有绿色边框的方框:

当价格低于指数移动平均线时,方框的边框则被绘制成红色:

box.set_border_color()的特性

  • 新的方框绘图默认以蓝色(color.blue)边框开始。所以如果我们想要蓝色的边框,就不必使用box.set_border_color()
  • 边框颜色会应用于方框的所有四个边框。box.set_border_color()无法为某个特定的边框设置单独的颜色。
  • box.set_border_color()把边框颜色设置为na时,我们会禁用该方框绘图的边框。
  • 一个方框的边框只能是实心的、单一的颜色。我们不能应用渐变色或某种颜色图案。
  • 当一个方框的边框宽度为零时,将不会显示任何边框,此时更改其边框颜色也没有任何效果。在这种情况下,我们需要先把边框尺寸增加到1或更高。
  • Pine Script没有提供一个函数来获取方框当前的边框颜色。因此,要确保一个方框具有某种特定的边框颜色,我们唯一的办法就是调用box.set_border_color()并明确设置该颜色。

总结

  • box.set_border_color()函数更改一个特定方框绘图的边框颜色。
  • 该函数可以使用Pine Script中任何可能的颜色选项。
  • 我们可以更改一个已禁用边框的颜色,但这在图表上不会产生任何效果。我们必须先重新启用该边框。

用box.set_border_style()自定义方框的边框样式

在我们的Pine Script代码绘制一个方框后,可以使用box.set_border_style()函数来修改该方框的边框样式。例如,这就是我们如何为一个先前创建的方框赋予虚线边框的方式。

该函数的标准语法格式如下:

box.set_border_style(id, style)

id参数是我们想要修改的方框的标识符。这个ID值是在我们创建方框时由box.new()返回的,它告知Pine Script要操作哪个方框。没有它,Pine Script将无从知晓我们指的是哪个方框。style参数用于指定方框的新边框样式,可用的样式有三种:line.style_solid(实线边框)、line.style_dotted(点线边框)和line.style_dashed(虚线边框)。

快速示例

要修改一个方框的边框样式,我们首先需要一个方框。我们可以使用box.new()来创建这个绘图:

// 在30根K线前的高点和当前K线前5根K线的低点之间绘制一个方框
myBox = box.new(left=bar_index[30], top=high[30],
	 right=bar_index[5], bottom=low[5], bgcolor=na,
	 border_width=3)

创建方框后,这段代码把返回的标识符存储在myBox变量中。然后我们就可以使用这个变量来更改方框的边框样式了。

假设我们想要一个点线边框。为此,我们可以这样调用box.set_border_style()

// 将方框的边框更改为点线样式
box.set_border_style(id=myBox, style=line.style_dotted)

这个代码片段把myBox方框绘图的边框设置为点状线(line.style_dotted)。

前面两个代码片段所创建的方框效果如下:

顺便一提,box.set_border_style()的关键字参数是可选的。示例中使用它们只是为了让代码更清晰。但你可以省略它们以减少键盘输入,像这样也完全有效:

// 将方框的边框更改为点线样式
box.set_border_style(myBox, line.style_dotted)

box.set_border_style()的使用方式

当我们想为一个已存在的方框赋予不同的边框样式时,就可以使用box.set_border_style()函数。

我们通常把box.set_border_style()与测试真/假条件的if语句结合使用。这样可以在特定情况发生时更改边框样式,而在其他场景中保持其样式不变。

如果我们的方框在任何情况下都应该具有某种特定的边框样式,那么我们也可以在用box.new()创建方框时就直接配置好该样式。那样所需的代码比box.set_border_style()更少,也能保持我们的代码更紧凑。

示例脚本

让我们在一个完整的脚本中使用box.set_border_style()。下面的指标会基于最近的最高高点和最低低点价格范围创建一个方框,并把它绘制在未来作为一种预测。当交易品种属于波动性较大的资产类别时,我们让方框的边框变为点线,以表达额外的不确定性。

该指标的代码如下:

//@version=5
indicator(title="box.set_border_style() 的基本示例", overlay=true)

// 计算过去10根K线的价格范围
priceRange = (ta.highest(high, 10) - ta.lowest(low, 10)) / 2

// 在最后一根历史K线上,通过绘制一个使用近期价格波动的方框
// 来显示可能的未来价格范围
if barstate.islastconfirmedhistory
    predictBox = box.new(left=bar_index, top=close + priceRange,
         right=bar_index + 10, bottom=close - priceRange, bgcolor=na,
         border_width=3, border_color=color.orange)

    // 对于波动性较大的加密货币,将方框切换为点线样式
    // (从默认的实线),以突出更多的不确定性
    if syminfo.type == "crypto"
        box.set_border_style(id=predictBox, style=line.style_dotted)

该指标首先用indicator()函数配置其选项,它为脚本命名并使其叠加显示在主图表上。

接下来,我们计算近期的价格范围。通过ta.highest()函数我们得到10周期内的最高高点,而ta.lowest()函数则给出同一时期的最低低点。我们把这两个值相减然后除以2,并把结果存入priceRange变量。

然后,一个if语句检查barstate.islastconfirmedhistory变量,该变量仅在图表的最后一根已确认的历史K线上为true。通过这个条件,脚本只会创建一个方框,而不是多个。

if语句内部,box.new()创建一个方框绘图。这个方框显示在当前K线编号(bar_index)和右侧10根K线处(bar_index + 10)之间。其上边框是当前收盘价加上我们之前计算的价格范围,下边框则是收盘价减去该范围。

由于没有背景(bgcolor=na),我们得到一个透明的方框。其边框以橙色(color.orange)显示,厚度为3。我们把方框的标识符存储在predictBox变量中以供后续使用。

接着,一个嵌套的if语句判断当前交易品种的类型(syminfo.type)是否为加密货币("crypto")。对于这类交易品种,box.set_border_style()函数会给我们刚刚创建的方框(predictBox)一个点线边框(line.style_dotted)。这不会改变其他类型交易品种的边框样式,因此那些品种将使用默认的实线边框。

让我们看看它在图表上的效果。当脚本在像以太坊(ETHUSD)这样的加密货币上运行时,方框会有一个点线边框:

在其他资产类别的图表上,方框则保持其默认的实线边框,例如在这个欧元/美元图表上:

box.set_border_style()的特性

  • 当我们创建一个新方框时,其边框颜色默认与其背景颜色相同,这会掩盖边框的样式。为了使边框(更)可见,我们可以更改其背景颜色、使方框透明,或者更改其边框颜色。
  • 有多种方法可以移除一个方框的边框。当边框被关闭时,box.set_border_style()对边框样式所做的更改将不可见。我们必须先恢复方框的边框。
  • 我们的代码无法获取一个方框当前使用的是哪种边框样式。要确保方框使用某种特定的样式,唯一的办法就是调用box.set_border_style()并明确设置该样式。

总结

  • box.set_border_style()函数更改一个方框的边框样式。
  • 一个方框可以使用实线(line.style_solid)、点线(line.style_dotted)和虚线(line.style_dashed)三种边框样式。
  • 当一个方框的边框被禁用,或者其颜色与背景色相同时,边框的样式将不可见。

Pine Script有哪些方框边框样式

TradingView的指标和策略可以用代码绘制方框。这些绘图非常适合高亮显示价格行为,并提供了丰富的选项。自定义方框的一种方式就是通过其边框样式。

有两种方式可以设置一个方框的边框样式。一是通过box.new()函数的style参数,这会创建一个带有期望边框样式的新方框。二是通过box.set_border_style()函数,这个函数可以修改一个已存在方框的边框样式。

这两个函数都可以使用三种边框样式:line.style_solid使方框的所有四个边框都为实线;line.style_dotted为方框的所有四个边框赋予点线样式;line.style_dashed把方框的所有四个边框变为虚线样式。

所以共有三种边框样式可供选择。但它们在图表上具体是什么样子呢?我们来看一下。

实线边框line.style_solid

默认的方框边框样式是实线(line.style_solid)。当边框宽度为2且方框背景透明时,一个带有实线边框的方框看起来是这样的:

点线边框line.style_dotted

一个使用line.style_dotted边框样式的方框,其所有四个边框都会呈现为点线:

虚线边框line.style_dashed

而一个带有虚线边框样式(line.style_dashed)的方框,则被四条虚线所环绕:

边框样式与边框宽度

另外两个方框设置会影响边框样式的外观。边框的颜色固然会影响边框的视觉效果,但真正能影响边框样式观感的是方框的边框宽度。

这是因为,边框尺寸不仅会使边框变粗,还会增加点线和虚线线段之间的间距。

例如,一个宽度为1像素的点线(line.style_dotted)边框看起来是这样的:

如果我们把边框的宽度增加到10像素,那么相同的边框样式看起来就相当不同了:

所以,如果某种特定的边框样式不合你的心意,不妨尝试更改其边框宽度,看看是否能改善其外观。

方框边框样式的特性

  • 当我们创建一个新的方框绘图时,该方框默认以line.style_solid(实线)边框样式开始。
  • 一个新的方框绘图,其边框颜色默认与其背景颜色相同,这会掩盖边框的样式。为了使边框可见,我们可以把方框设为透明、更改方框的背景色,或者更改其边框颜色。
  • 那些用于设置方框样式的常量值可能看起来很熟悉;我们对趋势线的样式也使用相同的值。(趋势线还支持箭头样式,但方框绘图不支持。)
  • Pine Script不支持自定义边框样式;我们必须从实线、虚线或点线中进行选择。
  • 边框样式会应用于整个方框绘图,不可能为某个特定的边框设置单独的样式。
  • 当我们移除一个方框的边框后,我们将无法看到对其边框样式的任何更改。要看到新边框样式的效果,我们必须首先恢复方框的边框。

总结

  • 我们使用box.new()函数或box.set_border_style()函数来设置一个方框的边框样式。
  • 一个Pine Script方框可以使用三种边框样式之一:虚线(line.style_dashed)、点线(line.style_dotted)或默认的实线(line.style_solid)。这个样式会应用于所有四个边框。
  • 我们使用的边框宽度和颜色也会影响一个方框的样式外观。

用输入选项设置方框的边框样式

Pine Script提供了多种输入选项类型。借助这些自定义选项,我们可以快速地更改脚本的设置。其中一个非常有用的选项是能够更改方框的边框样式。但Pine Script并未默认提供这样的功能。幸运的是,这不成问题,我们可以自己编写一个。

以下三个步骤可以创建一个用于设置方框边框样式的输入。第一步,使用input.string()函数创建一个基于文本的下拉菜单,为每种方框边框样式提供一个选项。第二步,把输入选项的文本值转换为Pine Script可识别的边框样式值(即名称以line.style_*开头的常量)。第三步,把这个样式应用到一个方框绘图上——可以在创建新方框时通过box.new()直接指定样式,也可以使用box.set_border_style()函数在特定条件下修改一个已存在方框的样式。

让我们开始动手编写代码吧!

步骤1:创建边框样式下拉菜单

Pine Script没有专门用于方框边框样式的输入类型。因此,我们将使用一个常规的文本输入选项,稍后再把它转换为实际的边框样式。

要创建这个基于文本的选项,我们可以这样做:

// 步骤 1:为方框边框样式创建一个下拉菜单
boxStyleInput = input.string(title="Box Line Style", defval="solid (─)",
     options=["solid (─)", "dotted (┈)", "dashed (╌)"])

这段代码使用input.string()函数来创建一个文本输入。我们指定了几个函数参数。通过title,我们定义了在脚本设置窗口中该输入控件前显示的文本。

我们为该选项设置了一个默认值(defval"solid (─)",这使得输入框初始默认为实线边框。

通过options参数,我们告知Pine Script在下拉菜单中包含哪些选项。这个列表包含了三种值,每种对应一种可能的方框边框样式。

我们把输入控件的当前值存储在boxStyleInput变量中。后续代码访问此变量时,将获取到用户选择的值。如果我们手动更改输入的值,代码中这个变量的值也会随之更新。

步骤2:将输入值转换为line.style_*常量

现在我们有了一个输入,它说明了要使用哪种边框样式。但这个输入的格式并不正确。要设置方框的边框样式,我们不使用字符串,而是需要一个line.style_*类型的值。

所以,我们需要把输入的字符串转换为一个不同的值。我们通过以下代码来实现:

// 步骤 2:将输入值转换为正确的线条样式常量
boxStyle = boxStyleInput == "dotted (┈)" ? line.style_dotted : 
     boxStyleInput == "dashed (╌)" ? line.style_dashed :
         line.style_solid

这里我们创建了一个新变量:boxStyle。它的值是方框可以使用的三种边框样式之一。该变量具体获得哪种样式,取决于一系列条件运算符(?:)的判断结果。每个条件运算符都会评估boxStyleInput输入变量的值。

第一个条件运算符判断该变量是否等于(=="dotted (┈)"。如果我们从下拉菜单中选择了点线,那么该条件运算符会返回相应的边框样式:line.style_dotted。如果输入被设置为不同的值,则会执行下一个条件运算符。

第二个条件运算符判断输入是否被设置为"dashed (╌)"。对于这种边框样式,条件运算符返回line.style_dashed。如果输入的值也不是这个,那么该条件运算符将返回第三个选项,即实线边框(line.style_solid)。

无论条件运算符最终返回哪个值,我们都把它存入boxStyle变量,以供下一步使用。

步骤3:设置方框的边框样式

至此,我们已经有了一个包含与用户输入相匹配的边框样式的变量。现在我们需要把这个样式应用到图表上。

有两种方法可以做到这一点:我们可以在创建方框的那一刻就设定好它的样式,或者更改一个已存在方框的样式。我们分别来看。

要在一个方框被创建时就设定好它的边框,我们调用box.new()并把boxStyle变量传递给它。例如:

// 步骤 3:使用输入选项来设置方框边框样式
// 创建一个立即使用输入所设定的方框样式的新方框
box.new(left=bar_index[45], top=high[45],
	 right=bar_index, bottom=low,
	 bgcolor=na, border_color=color.fuchsia,
	 border_width=3, border_style=boxStyle)

这段代码在45根K线前的高点和当前K线的低点之间绘制了一个方框。方框的边框以紫红色(color.fuchsia)显示,边框宽度为3

border_style参数决定了这个新方框的外观。这里我们使用了上一步中创建的boxStyle变量,这使得方框的边框样式与用户的输入选项相匹配。

第二种选择是更改一个已存在方框的样式。要实现这一点,我们首先需要创建一个方框:

// 步骤 3:使用输入选项来设置方框边框样式
// 先创建一个方框,之后再更改其边框样式
myBox = box.new(left=bar_index[45], top=high[45],
	 right=bar_index, bottom=low,
	 bgcolor=na, border_color=color.fuchsia,
	 border_width=3)

这里的box.new()在当前K线和45根K线前之间绘制了一个新方框。我们把返回的方框标识符存储在myBox变量中,以便后续可以访问这个绘图。

然后,在代码的稍后部分,我们把该方框的边框更改为用户输入所对应的值:

// 将 'myBox' 方框的样式更改为输入选项所对应的值
box.set_border_style(id=myBox, style=boxStyle)

这里的box.set_border_style()函数用于更新边框样式。我们通过myBox变量来识别要修改哪个方框,而上一步中创建的boxStyle变量则指定了要使用的边框样式。

我们通常在if语句内部使用第二种方法,这样就只在特定情况下才更改一个已存在方框的边框样式。

示例图表

让我们看看上面的代码在TradingView中的效果。首先是输入选项,带有边框样式的下拉列表看起来是这样的:

输入的默认值是实线。使用该样式的方框显示如下:

当我们把输入切换为虚线时,方框会变为:

示例脚本

下面的指标把上述三个步骤整合到了一个脚本中,用一个输入选项来设置方框的边框样式。它具备我们上面讨论过的所有功能,但现在是一个可以运行在你图表上的完整脚本:

//@version=5
indicator(title="用于方框边框样式的输入", overlay=true)

// 步骤 1:为方框边框样式创建一个下拉菜单
boxStyleInput = input.string(title="Box Line Style", defval="solid (─)",
     options=["solid (─)", "dotted (┈)", "dashed (╌)"])

// 步骤 2:将输入值转换为正确的线条样式常量
boxStyle = boxStyleInput == "dotted (┈)" ? line.style_dotted : 
     boxStyleInput == "dashed (╌)" ? line.style_dashed :
         line.style_solid

// 步骤 3:使用输入选项来设置方框边框样式
if barstate.islastconfirmedhistory
    // 创建一个立即使用输入所设定的方框样式的新方框
    box.new(left=bar_index[45], top=high[45],
         right=bar_index, bottom=low,
         bgcolor=na, border_color=color.fuchsia,
         border_width=3, border_style=boxStyle)

    // 或者先创建一个方框,之后再更改其边框样式
    myBox = box.new(left=bar_index[45], top=high[45],
         right=bar_index, bottom=low,
         bgcolor=na, border_color=color.fuchsia,
         border_width=3)

    box.set_border_style(id=myBox, style=boxStyle)

请参阅上面的图片以了解该指标的外观。更早之前我们已经讨论了代码的具体作用。

赞(0)
未经允许不得转载:图道交易 » Pine Script(190):方框边框颜色与样式,set_border_color与set_border_style
分享到

评论 抢沙发

登录

找回密码

注册