LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > Pine语言入门(九)如何在价格图表上叠加一个指标//完成了分区间定投的全部脚

Pine语言入门(九)如何在价格图表上叠加一个指标//完成了分区间定投的全部脚

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

在价格图表上叠加一个指标,目的是在图表区域中绘制指标,即K线图位置绘制指标。我们如何以编程方式指定脚本的显示位置?即在放在K线图区域,或者单独的一个面板显示。

就像交易量这个指标,你可以把它放在单独的一个面板区域显示,也可以放在K线主图区域显示。

以编程方式在价格图表上放置一个指标

之前有粗略的提过用“overlay = true”设置,但是一笔带过,今天用一个例子详细说下。

在TradingView里,我们用study()函数来设置脚本的特性,比如名字和它应该如何显示在图表上。该函数是总是需要包含在指标的源代码中的唯一函数,并且其title参数(设置指标的名称)也是总是要在study()函数中定义。

study()的另一个参数是“overlay”。它是是一个可选参数,将此可选参数设置为true时,含义是覆盖在图表的工具上。这使指标显示与K线显示相同的图表区域中。当我们设置overlay到false,则指标会显示在单独的图表面板。例如:

study(title=”My example script”, overlay=false)

overlay参数的默认值为false,这意味着只要overlay不设置参数,指标就会显示在单独的图表面板中。

该study()函数的overlay参数仅接受文字布尔值(如overlay=true)。不能将其设置为内置bool变量或用户定义的变量,该overlay参数也不能与布尔输入变量一起使用。
即overlay需要直接设置成ture或者false,而不能是其他变量或自定义变量。

当脚本被应用于图表时,在overlay参数加入到该study()函数或该参数有改变之前,则该指标需要被移除并重新添加到图表查看更新代码的效果。

该overlay参数具有一些值得注意的功能:

每个指标,无论其值的范围如何,都可以覆盖在主要数据系列上。当指标的值不同于工具本身使用的标度时,我们可以通过编程方式指定指标的价格标度,以防止工具的标度失真,比如交易量的指标放在K线图界面时,二者的衡量刻度时不一样的,这个可以单独设定。

其中,在overlay被设定为false,指标被隐藏的情况下,子图不可能通过编程设定。我们需要使用指标图表面板右上方显示的“向上移动”和“向下移动”图标手动进行此操作。

虽然大多数TradingView函数受overlay参数影响,但并非全部。例如,barcolor()无论参数overlay是ture还是false,始终都会为K线图的K线柱上色。

让我们看一个编程示例,看看如何overlay在实践中工作。

在单独的图表面板中绘制TradingView交易量直方图

在下面的示例指标中,我们绘制了交易量直方图,把最大和平均交易量绘制为线。

首先,我们将在单独的图表面板中显示该指标,然后在价格图表上覆盖该指标。讨论了代码之后,我们将查看指标在图表上的外观以及其输入选项。

study(title=”Volume histogram”, overlay=false)
// Inputs
highestLen = input(title=”Highest Length”, type=input.integer, defval=25)
averageLen = input(title=”Average Length”, type=input.integer, defval=10)
// Compute values
highestVol = highest(volume, highestLen)[1]
averageVol = sma(volume, averageLen)
// Determine histogram bar colour
histColour = (volume > highestVol) ? color.orange :(volume > averageVol) ? #7B68EE :#4169E1
// Plot the values on the chart
plot(series=volume, style=plot.style_histogram,color = histColour, linewidth=5)
plot(series=highestVol, color=color.red)
plot(series=averageVol, color=color.green)

我们以每个TradingView指标都需要的study()函数开始。此函数设置两个参数:title以定义指示器的名称和overlay,当设定为false,显示在单独的图面板指示。

然后,我们向脚本添加两个输入选项:

highestLen = input(title=”Highest Length”, type=input.integer, defval=25)
averageLen = input(title=”Average Length”, type=input.integer, defval=10)

输入是通过进行的input(),该函数将选项添加到脚本的设置,但还返回选项的当前值(Pine Script Language Tutorial,nd)。在这里,我们使用赋值运算符将这些值存储在highestLen和averageLen变量中。这样,我们稍后可以在脚本代码中使用变量来引用输入的当前值。

两个输入都是数字整数输入。这些仅接受整数,并且是通过将函数的type参数设置

input()为integer(Pine Script Language Tutorial,nd)来完成的。

第一个输入带有title参数称为“最高长度” ,该名称是输入选项之前显示的名称(请参见下面的图像)。我们将此输入设置为默认值(defval)25,然后highestLen在计算最大音量时使用此输入(存储在变量中)。

另一个输入名为“平均长度”,以10(defval=10)开始。averageLen在计算平均体积时,使用此输入及其当前值存储在变量中。

然后我们计算指标的值:

highestVol = highest(volume, highestLen)[1]
averageVol = sma(volume, averageLen)

在这里,我们创建两个变量:highestVol和averageVol。第一个函数分配了由返回的值highest(),该函数使用两个参数处理:一系列要处理的值以及要获得(TradingView,nd)最大值的柱线数。在这里,这些参数设置为柱子的值(volume)和highestLen,我们给它的输入变量的默认值为25。

我们将历史记录引用运算符([])放在highest()函数的后面,并且将其方括号之间的值设置为1。我们这样做是因为volume内置变量系列还包括当前条形图的体积。这意味着,如果我们计算直到当前柱线(包括当前柱线)的25条柱线的最大值,那么当前柱线的值永远不会超过该最大值。

因此,我们在这里使用历史记录引用运算符将“返回”的值“偏移”highest()过去的1个小节。这样,highestVol变量不会容纳包括当前柱线在内的最值,而是导致当前柱线最高的25个柱线中的最高值。

我们在此处(averageVol)创建的第二个变量设置为返回的值sma()。该函数使用两个参数来计算简单移动平均线(SMA):要处理的一系列值和用于计算(TradingView,nd)移动平均线的柱数。在这里,这些参数设置为volume和averageLen,这是我们之前给定标准值10的输入变量。

计算指标值后,我们确定交易量直方图的颜色:

histColour = (volume > highestVol) ? orange :(volume > averageVol) ? #7B68EE : #4169E1

借助两个条件(三元)运算符(),为histColour变量分配了条件颜色。该运算符处理三个值,第一个是真/假条件。只要该条件求值为,条件运算符就会返回其第二个值;否则,返回其第三个值(Pine Script Language Tutorial,nd)。?:true

第一个条件运算符评估当前柱(volume)的体积是否大于(>)最近25个柱的最大值(我们存储在highestVol变量中的值)。这也说明了为什么我们不希望highestVol变量包含当前钢筋的体积,否则该条件将永远无法满足。当条件为时true,该条件运算符返回orange 基本的TradingView颜色,我们将该颜色存储在histColour变量中,以备后用。

但是,只要当前条的值不大于最大值,就会处理第二个条件运算符。然后,第二个条件运算符将检查音量是否高于10 bar平均值(volume > averageVol)。如果是这种情况,则此条件运算符将返回中度蓝色的#7B68EE 十六进制颜色(然后将该颜色存储在histColour变量中)。

但是,如果第二个条件运算符的条件也是false如此,则后一个运算符将返回#4169E1皇家蓝的十六进制颜色,然后将其分配给histColour变量。因此,我们在此所做的就是根据酒吧的音量将该变量设置为橙色,深蓝色或宝蓝色。然后在绘制交易量直方图时使用该变量:

plot(series=volume, style=plot.style_histogram,color = histColour, linewidth=5)
plot(series=highestVol, color=color.red)
plot(series=averageVol, color=color.green)

交易量直方图由制成plot(),该函数将其自变量的数据绘制series在图表上。在第一个plot()语句中,我们将该参数设置为volume。并且将style参数设置histogram为该体积时,将显示为直方图条形图。

在color该参数的plot()函数定义了曲线的颜色,在这里我们设置参数histColour-我们设置为三种颜色较早的一个变量。为了使这些直方图条更加引人注目,我们使用linewidth参数将其大小设置为5 。

其他两个plot()语句在图表上显示最高和平均交易量。为此,我们将其series参数设置为highestVol和averageVol变量。由于我们style此处未指定参数,因此默认情况下,这些值以连续的行绘制。这些行的颜色设置为red和green 基本TradingView颜色。

在单独的图表面板中绘制体积

当我们将以上示例指标添加到德国DAX指数差价合约的图表时,交易量直方图如下所示:

在这里,对于达到新高的柱线,直方图的颜色为橙色。体积高于平均水平的直方图条显示为蓝色,而其他所有条显示为蓝色。

该指标具有以下输入选项:

当我们将这些输入更改为最高高点45和平均长度22条时,上一张图表将变为:

TradingView指标的设置已更改
现在让我们看一下将指标叠加在图表工具上方时的行为。

在图表的工具上绘制一个TradingView指标

要将指标绘制在与图表工具相同的图表面板中,我们只需要更改编程示例的第一行。该study()函数行更改为:

study(title=”Volume histogram”, overlay=true, precision=0)

我们在这里进行两个调整。首先,将overlay参数设置为true使指标图与工具位于同一图表区域(TradingView,nd)。另一个区别是通过将参数设置为0来更改指标的小数精度。precision这样,指标的值就不会以4个小数(默认精度,我们在前面的图片中看到)来显示,而是以零个小数来显示。

然后,我们保存脚本而不进行其他代码修改。指标在图表上刷新,然后看起来像:

尽管此处的价格轴确实发生了变化(浮点之后不再有任何值),但指标并未覆盖在图表的工具上。这是因为overlay在脚本已添加到图表时更改参数需要我们删除指标并将其重新添加到图表。

当我们这样做时,更新的指标将显示在DAX 30指数差价合约上:

这给我们带来了另一个问题:价格规模失真了,因为交易量值(大约500-1,500)远低于DAX指数的值(大约9,500)。为了使指标正确覆盖,它需要使用左价格轴。这样,可以将正确的价格轴用于工具的价值。

要将脚本设置为左轴,我们右键单击指标图之一,然后选择“向左缩放”:

这会将图表和指标更改为:

该指标的规模可以通过编程与设定scale的参数的study()功能。这样,我们无需每次都手动定义此设置。有关更多信息,请参见以编程方式指定指标的比例。

剩下的一个问题是,由于默认情况下图表的左侧价格轴处于禁用状态,因此量值不会显示在价格轴上。要更改此设置,我们右键单击正确的价格轴,然后选择“左轴”:

现在我们的图表有两个价格轴:一个带有指标的值,另一个带有工具的价格。

完成了分区间定投的代码编写

分区间定投的完整代码已经写完,如有兴趣可以去Tradingview上注册个号,可以直接在自己的图上显示这个策略,不过源代码暂时没有公开。

相当长的一段时间之内,会根据这个策略指导自己的操作,在确定性高的位置,会另外加大自己的趋势交易仓位。

接下来会专注量化交易策略,和Python编程的学习。

最近学习Pine语言编写策略的过程发现,自学的过程中,搜索是极为重要的能力,我们碰到的绝大部分问题前人都遇到过,且都在互联网上存在着,就看能否找到。

如果尽量找了找不到,可以主动去寻求帮助,我的几个费时很多的问题都是在社区问的外国友人,基本都得到确定性的答案,还是很感激的。

最近开始翻笑来老师的《自学是门手艺》,这是一本Python编程语言的自学书籍,笑来老师在讲道理上、教别人这件事上,是顶级的。有学编程的,也可从这本书入手。

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

注册Tradingview平台,点击Tradingview。

金金的分区间定投最近已经停止定投,等待更高位置,对分区间定投不了解的可以点击链接:定投这样投,收益高很多

—-

编译者/作者:金金

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

LOADING...
LOADING...