LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > Pine语言入门(十三)如何为TradingView的K线图表添加背景着色

Pine语言入门(十三)如何为TradingView的K线图表添加背景着色

2020-11-19 金金 来源:区块链网络

在TradingView中,我们可以为图表和水平线着色,也可以填充介于两者之间的背景部分。但是,我们如何从顶部到底部为TradingView图表的整个背景着色?

为TradingView图表背景着色的函数

我们既可以手动设置脚本的颜色,也可以通过代码设置颜色,即可以在特定条件下显示特定颜色。TradingView中可用的颜色是基本的颜色变量和十六进制的颜色值,它们可以使用数百万种颜色。

几个函数有接受颜色值的参数,其中之一是bgcolor()。该函数为脚本的背景着色,并且可以是价格图表的背景或子图表。bgcolor()包括有条件地为图表的背景着色并突出显示交易时段的背景。

该bgcolor()函数具有以下默认语法:

bgcolor(颜色,变换透明度,偏移,可编辑,标题)

color:必填参数,用于将填充背景的颜色设置为基本TradingView颜色或十六进制颜色值。也可以将此参数设置为三元条件表达式(例如close > open ? color.green : color.red),以便有条件地为图表的背景着色。
transp:可选参数,用于设置填充背景的透明度。默认值为90(高度透明),可能的值范围是0(不透明)到100(完全不可见)。
offset:可选参数,用于以一定数量的条形移动彩色背景。省略时,offset默认为0(表示无偏移)。将此参数设置为负值会将背景移到左侧(即过去),而将正值将其重新放置在图表右侧的将来柱形上。另请参见偏移彩色背景。
editable:可选参数,默认值为true,允许我们在脚本的“样式”窗口中手动更改填充背景的设置。背景设置无法手动更改当editable设置为false。
title:可选参数,用于指定填充背景的标题,并且在手动更改脚本颜色时,此名称显示在“样式”窗口中。描述性名称使区分不同背景更加容易。

注意:该bgcolor()和fill()函数都能给图表背景着色。但是,fill() 在两条曲线或两条水平线之间的背景部分上色,而bgcolor()则是从上到下为图表的背景上色。

使用TradingView交易策略为图表的背景着色

举例说明bgcolor()功能。在此策略中,当三条EMA(指数移动平均线)从短期到长期依次排列,进入多头头寸;而当三个EMA彼此下方时,依次向下排列,我们将做空。

该示例策略给予市场头寸为背景着色。多头时,背景颜色变为绿色。空头时为红色。

但首先是代码:

//@version=4
strategy(title=”EMA crosses”, overlay=true)

// Inputs
priceData = input(title=”Price data”, type=input.source, defval=hl2)
ema1Length = input(title=”EMA 1”, type=input.integer, defval=12)
ema2Length = input(title=”EMA 2”, type=input.integer, defval=24)
ema3Length = input(title=”EMA 3”, type=input.integer, defval=36)

// Compute values
ema1 = ema(priceData, ema1Length)
ema2 = ema(priceData, ema2Length)
ema3 = ema(priceData, ema3Length)

enterLong = ema1 > ema2 and ema2 > ema3
enterShort = ema1 < ema2 and ema2 < ema3

// Plot values
plot(series=ema1, color=color.orange, linewidth=2)
plot(series=ema2, color=color.maroon, linewidth=2)
plot(series=ema3, color=color.blue, linewidth=2)

// Submit orders
if (enterLong)
strategy.entry(id=”Enter Long”, long=strategy.long)

if (enterShort)
strategy.entry(id=”Enter Short”, long=strategy.short)

// Colour background
backgroundColour = (strategy.position_size > 0) ? color.green : color.red

bgcolor(color=backgroundColour, transp=85)

同样从头开始解释整个脚本过程:

从strategy()函数开始,overlay参数为true是将策略显示在主图图表上。

接下来,策略添加三个输入函数,即在图表的设置项中有相应的对话框:

priceData = input(title=”Price data”, type=input.source, defval=hl2)
ema1Length = input(title=”EMA 1”, type= input. integer, defval=12)
ema2Length = input(title=”EMA 2”, type= input. integer, defval=24)
ema3Length = input(title=”EMA 3”, type= input. integer, defval=36)

第一行的输入是源数据输入选项,将input()函数的类型参数type设置为source。这样的输入会在脚本的设置中创建一个下拉菜单,可以在对话框中选择不同的数据源。在本例中,此输入的默认值(defval)设置为hl2,意思是最高点和最低点的平均值,[high + low] / 2值。此输入内容命名为“价格数据”,然后使用赋值运算符(=)将其当前值存储在priceData变量。这样,就可以使用此变量来引用“价格数据”输入的当前值。

其他三个输入都是数字整数输入,我们通过将函数的type参数设置为input()来进行输入integer。这些输入,名为“EMA 1”,“2 EMA”和“EMA 3”,给出了默认值的12,24,和36。input()的返回值存储在ema1Length,ema2Length和ema3Length输入变量里,稍后在计算EMA时参考它们。

然后我们计算移动平均值:

ema1 = ema(priceData, ema1Length)
ema2 = ema(priceData, ema2Length)
ema3 = ema(priceData, ema3Length)

EMA是使用来计算的ema(),该函数需要两个参数:一系列数据以及用于计算EMA的柱线数(TradingView,nd)。这些移动平均值基于priceData我们刚才设置的默认值hl2。EMAS的长度被设定为输入变量 ema1Length,ema2Length,和ema3Length。被返回的计算EMA值存进ema()的ema1,ema2和ema3变量里。

然后,这些EMA值用于确定enterLong和enterShort变量的值:

enterLong = ema1 > ema2 and ema2 > ema3
enterShort = ema1 < ema2 and ema2 < ema3

基于使用大于(>)和小于(<)比较运算符以及and和not 逻辑运算符的表达式,两个变量都被赋予为真/假值。

该enterLong变量被分配给基于两个条件真/假值。由于我们将这些条件与and逻辑运算符结合在一起,因此在将所有条件赋予值true之前,都需要将它们都enterLong存在true。当一个或多个条件为时false,and也将合并结果false。我们的第一个条件检查第一个EMA是否高于第二个(ema1 > ema2),而下一个条件评估第二个EMA是否高于第三个(ema2 > ema3)。换句话说,最快的EMA必须高于中间EMA,而EMA必须高于最慢EMA。

在给enterLong变量赋值之后,以几乎相同的方式为变量分配enterShort一个true / false值。

接下来,我们在图表上绘制EMA值:

plot(series=ema1, color=color.orange, linewidth=2)
plot(series=ema2, color= color. maroon, linewidth=2)
plot(series=ema3, color= color. blue, linewidth=2)

然后是设置显示输出函数plot(),该函数在图表上显示由其series参数指定的值。这个参数设置为ema1,ema2和ema3这里的变量,而这些保留的12,24和36均线作为输入选项的默认值。linewidth线宽参数设置为2,,颜色设置为orange,maroon和blue的标准TradingView颜色。

然后,订单开启的条件脚本:

if (enterLong)
strategy.entry(id=”Enter Long”, long=strategy.long)
if (enterShort)
strategy.entry(id=”Enter Short”, long=strategy.short)

这两个if语句使用enterLong和enterShort真/假变量。if语句评估条件,当条件为true时,将执行代码。第一个if语句对enterLong变量进行评估,并在该变量返回true时执行其下的语句。

最后为图表的背景着色:

backgroundColour = (strategy.position_size > 0) ? green : red
bgcolor(color=backgroundColour, transp=85)

在这里,我们有条件地为背景着色。为此,我们首先创建backgroundColour变量并为其分配条件三元运算符(?:)返回的值。该运算符将判断条件,并在条件为true时返回其第二个值,或者在条件为false时返回其第三个值。

我们这里计算的条件是的值是否该(持仓头寸)strategy.position_size变量是大于(>)0,strategy.position_size内置变量返回的方向和策略的开启位置的大小:正值表示多头;负值表示空头头寸。不同条件下显示不同的颜色。

将这些颜色之一存储在backgroundColour变量中后,我们使用更改图表的背景颜色bgcolor()。我们将此函数的color参数设置为backgroundColour变量,并将其transp参数设置为彩色背景的透明度。当策略时多头时,图表的背景将变为绿色;而在策略空头时,则将其变为红色。

为TradingView策略的背景着色

把代码放进比特币日线,结果显示如下图:

总结

该bgcolor()函数为图表的背景着色,并且可以是主图表区域(将脚本添加到图表工具时)或显示指标或策略的子图表。设置背景颜色是通过此函数的color参数完成的,而背景的透明度是通过transp设置的,该参数接受的值介于0(无透明度)到100(完全透明)之间。要将彩色背景向左或向右移动,我们分别将bgcolor()函数的offset参数设置为负值或正值。的其他两个参数bgcolor(),title并且editable,如果定义,并与名称,彩色背景显示在脚本的“风格”窗口。

下图是金金将分区间定投策略的不同区间分别着色的结果:

有兴趣的可以复制脚本进行试验。

有想制定自己的指标和交易策略的伙伴,欢迎大家添加微信jinvlog交流。

注册Tradingview平台,点击Tradingview。

—-

编译者/作者:金金

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...