LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > Pine语言入门(十五)如何编写警报?资深交易员Peter·Brandt推荐Tradingview

Pine语言入门(十五)如何编写警报?资深交易员Peter·Brandt推荐Tradingview

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

之前写了篇关于警报的文章,但有些简单,今天看下更详细的教程。可以按照过程一步步操作,来编写我们自己的自定义警报条件。

这是为了区别于直接在K线图界面手动添加警报,那里是平台默认给出了一些条件,比如上穿、下穿,或者低于、高于某个值等等。

而如果要定义自己策略的警报,往往有多个条件综合判断,就需要自定义编写了。

本文主要内容和关键问题如下:

用Alertcondition()编程TradingView警报

常见问题解答:常见的TradingView Alertcondition()问题

如何使用TradingView策略触发警报?
alertcondition()函数是否会发出警报?
警报alertcondition()会随着代码调整而变化的警报吗?
我们如何查看alertcondition()是否正常工作?
如何包含自定义的动态警报消息?
生成TradingView警报的示例

使用以下命令编写TradingView警报alertcondition()

TradingView的警报可以将各种情况通知我们,无论是移动平均交叉还是价格超出特定值或者范围。警报触发后,会有一个弹出窗口,发出声音通知,也可以设置发送短信或电子邮件。

要达到这样的效果,要先通过alertcondition()函数来创建警报条件,这个警报条件是包含在整个使用的策略里的。然后,当策略脚本在图表上运行时,再手动启用和配置该警报条件。

alertcondition()函数的默认模式是:

alertcondition(condition, title, message)

这三个参数具有以下含义:

condition:必选参数,使用true / false值指定警报应触发(true)还是不触发(false)。这个condition就是要编写的警报条件。要注意,警报的触发以及出发频率是需要手动设置的,如果不手动设置,condition即使为true,警报也不会触发。

title: 带有警报标题的可选常量字符串参数。该标题显示在“创建警报”窗口中。描述性标题有助于区分不同的警报条件。

message: 可选的常量字符串参数,用于设置警报显示的消息。创建和配置警报message时,我们提供的值将作为默认值。我们也可以手动在“创建警报”窗口中更改消息,这里只是一个占位符。

我们可以alertcondition()在同一脚本中重复使用该函数。因为我们很可能是需要不同的条件下警报不同的内容,但同样,我们将需要分别手动启用和配置每个警报条件。

alertcondition()不是“输出函数”。但是每个TradingView脚本确实至少需要一个“输出函数”。否则,就会出现“脚本必须至少具有一个输出函数调用”的错误。

也就是说,你不能写个脚本只包含警报函数alertcondition(),还需要包含类似plot(),bgcolor()的函数以便脚本在图表上具有输出显示。

看例子之前,先看一些和alertcondition()有关的常见问题。

常见的TradingViewalertcondition()问题

如何使用TradingView策略触发警报?

Tradingview自带的指标警报对于有关市场情况变化的通知很有帮助。我们的自定义策略警报对于通知我们做交易来讲更有用。

但是,现在不能用TradingView编码直接生成启动了的警报。也就是上面所说的,alertcondition()函数不会触发警报。而是执行以下操作:当我们添加一个包含alertcondition()函数脚本运行在图表上时,它会在“创建警报”窗口中创建一个内置指标之外的警报条件。

即,alertcondition()仅设置警报选项。但是我们仍然需要手动配置并启用警报,然后才能触发它!

alertcondition()可以通过代码调整来更改警报吗?

这点也是有些不好理解,假设我们配置了编码警报。然后,我们更改代码,以便alertcondition()在不同情况下触发。但是该更该不会直接改变现在正在启用的警报。

也就是说,一旦启用一个脚本警报,就可以更改脚本的输入选项,调整其代码,更改图表设置或将脚本从图表中删除。所有这些都不会影响我们现有的警报,就有很大的灵活性。

但如果我们确实希望更改脚本的警报,则首先需要删除现有警报。然后,我们必须根据指标的更新代码或设置来创建和配置新警报。

我们如何查看是否alertcondition()函数正常运行?

无法直接查看 alertcondition()将在何时何地触发警报,但可以从图表看到警报可能触发了哪些历史柱。因为一般警报里都会一些代码,每当警报条件为true时,就为图表的背景着色、注释文字或绘制某种形状。

我们如何包含自定义的动态警报消息?

函数的title和message参数都alertcondition()接受字符串值。更准确地说,它们的值必须是常量。

这意味着,针对每一种情形,要写一个alertcondition()警报函数。

生成TradingView警报的示例脚本

现在,让我们看看该alertcondition()函数如何在实际指标中生成警报。下面的第一个指示器创建基于交易量的警报。其他触发基于最高价和最低价的警报。

示例:生成带有移动平均值的交易量警报

下面的示例指示器使用该alertcondition()功能对交易量警报进行编码。每当仪器的交易量大于20根柱子的指数移动平均线(EMA)时,脚本便会触发警报。

该指标在图表上的显示方式如下:

根据移动平均值生成TradingView警报
该指标的完整代码为:

//@version=4

study(title=”Volume alert example”, overlay=false)
emaLength = input(title=”EMA Length”, type=input.integer, defval=20)
volEMA = ema(volume, emaLength)
// Create alert condition
alertcondition(condition=volume > volEMA, message=”Volume is higher than its EMA”)
// Plot values
plot(series=volume, style=plot.style_histogram, color=color.teal, linewidth=3)
plot(series=volEMA, style=plot.style_line, color=color.orange)

依次讨论每个部分,看看这段代码的作用。我们要做的第一件事是配置指标的设置:

study(title=”Volume alert example”, overlay=false)
emaLength = input(title=”EMA Length”, type=input.integer, defval=20)

使用study()函数设置一些指标属性。用title命名指标。并与overlay设定为false,即脚本出现在一个单独的图表面板,而不是在K线图上。

然后,使用input()函数进行自定义脚本设置。我们将整数选项命名为“ EMA Length”,并将其默认值设置为20。我们将输入值存储在emaLength变量中。这样,当我们的代码需要使用输入的当前值时,我们只需查找该变量的值即可。

然后,我们计算EMA并设置其警报条件:

volEMA = ema(volume, emaLength)
// Create alert condition
alertcondition(condition=volume > volEMA, message=”Volume is higher than its EMA”)

对于交易量的EMA,是用ema()计算20个交易量柱子的值。

接下来,我们使用alertcondition()函数来使卷的警报状态。在这里,我们将该函数的condition参数设置为volume > volEMA。true只要当前交易量大>于其EMA (),便会发出警报状态。并使用该message参数将默认警报消息设置为“交易量高于其EMA”。

指标代码的最后一部分绘制值:

// Plot values
plot(series=volume, style=plot.style_histogram, color=color.teal, linewidth=3)
plot(series=volEMA, style=plot.style_line, color=color.orange)

使用plot()函数在图表上显示指标的值。首先定义交易量柱子青绿色,直方图显示交易量。linewidth设置为3,比正常柱状图宽一点。

第二个plot()声明显示交易量的EMA( volEMA)为实线图有色橙色。这样,我们至少可以在视觉上验证警报应触发的情况。

当将此示例指标添加到图表中时,确实需要首先启用并配置其警报。否则它将无法生成警报。但是,一旦正确设置,警报消息将如下所示:

TradingView中的移动平均警报示例

让我们看一下另一个示例脚本,该脚本创建多个警报条件。

示例:生成关于20条K线柱子高点和低点的警报

实际上,我们可以根据需要多次使用alertcondition(),而不是单个警报条件。这样,我们可以为要跟踪的任何情况创建警报条件。

下面的示例指示器创建两个警报条件。当仪器收盘价高于最高20 个柱子时,发生一种情况。另一个发生在收盘价低于20个柱子最低价之下。

在图表上,指标看起来像:

带有极端价格警报的示例TradingView指标
这是示例指标的完整代码:

//@version=4
study(title=”Highs and lows - alert example”, overlay=true)
// Input options
highLen = input(title=”Highs Length”, type=input.integer, defval=20)
lowLen = input(title=”Lows Length”, type=input.integer, defval=20)
// Compute values
highs = highest(high, highLen)[1]
lows = lowest(low, lowLen)[1]
// Create alert conditions
alertcondition(condition=crossover(close, highs), title=”High breakout”, message=”Closing price crossed highest high”)
alertcondition(condition=crossunder(close, lows), title=”Low breakout”, message=”Closing price crossed lowest low”)
// Plot values
plot(series=highs, color=color.green, linewidth=2)
plot(series=lows, color=color.red, linewidth=2)

逐步讨论:

//@version=4
study(title=”Highs and lows - alert example”, overlay=true)
// Input options
highLen = input(title=”Highs Length”, type=input.integer, defval=20)
lowLen = input(title=”Lows Length”, type=input.integer, defval=20)

然后,我们使用该study()函数设置一些指标选项。随着title我们给指标的名字。并overlay设置为true使指标显示在仪器上,而不是在其他图表面板中。

然后,使用该input()函数创建两个输入选项。我们将这些名称称为“高长度”和“低长度”。两者都是整数,默认值为20。我们将这些输入的当前值放在highLen和lowLen输入变量中。这样,我们的脚本可以使用变量来引用当前输入设置。

然后我们计算脚本的值:

// Compute values
highs = highest(high, highLen)[1]
lows = lowest(low, lowLen)[1]

对于最高价,我们在工具的高价()柱上运行该highest()函数。我们将该计算值存储在变量highhighLenhighs中。

我们以同样的方式获得最低价。我们具有计算棒材低价()的lowest()功能。结果就是我们存储在变量lowlowLenlows中的内容。

注意,highest()和lowest()都向后偏移了1个柱子。我们使用历史记录参考运算符([])进行操作。原因是:如果我们计算出包括当前柱线在内的最高价或最低价,那么该工具永远不会超过或低于该极端价格。因此,我们从之前的柱线中得出极端价格,但不包括当前柱线。

接下来,我们编写指标的警报条件:

// Create alert conditions
alertcondition(condition=crossover(close, highs), title=”High breakout”, message=”Closing price crossed highest high”)
alertcondition(condition=crossunder(close, lows), title=”Low breakout”, message=”Closing price crossed lowest low”)

我们在此设置两个警报条件alertcondition()。首先,我们将condition参数设置为crossover(close, highs)。该crossover()函数true在其第一个值与第二个值相交时返回。否则返回false。

在我们的案例中,我们正在寻找工具的价格(close)何时超过20柱最高价(highs)。发生这种情况时,此警报将显示“收盘价超过最高价”消息。

第二alertcondition()行具有crossunder(close, lows)警报条件。当crossunder()函数true的第一个值小于第二个值时,该函数将返回。没有交叉,crossunder()返回false。

我们在这里寻找工具的价格(close)何时跌破20跟柱子的最低价(lows)。在这种情况下,此警报会触发“收盘价穿越最低价低点”消息。

请注意,这两个alertcondition()函数调用仅产生两个警报条件。我们仍然必须根据这些条件手动创建警报。否则,指标的最高和最低最低警报将不会触发。

我们以两个图结束示例脚本:

// Plot values
plot(series=highs, color=color.green, linewidth=2)
plot(series=lows, color=color.red, linewidth=2)

我们绘制后的最高价和最低价用低值的plot()功能在这里。第一个plot()电话显示highs其值的green颜色。第二plot()行显示中的lows值red。带有参数的两个线图linewidth都比默认大小稍粗一些。

现在,我们将此指标添加到图表中,然后启用并配置其警报。该脚本生成的警报消息如下所示:

总结

要使用我们的TradingView脚本生成警报,我们首先需要创建警报条件。我们这样做alertcondition()。该函数具有一个必需参数和两个可选参数。第一个condition以真/假值指定警报是否应触发(true)或不触发(false)。

第二个参数title命名警报。描述性名称使我们在手动设置警报条件时很容易找到它。message是第三个alertcondition()论点。该脚本接受一个字符串,其中包含触发时警报显示的文本。问题是message需要一个常量字符串,这使我们无法编写动态警报消息。

有几点需要牢记。此函数尚无法发出策略警报,也不会触发自身警报。我们需要手动配置和启用alertcondition()手动创建的每个警报条件。

此外,任何脚本,代码或图表更改都不会反映在现有警报中。要更新这些警报,我们首先将其删除,然后手动重新创建警报。无论alertcondition()是不是可以从图上看到。这需要附加代码,以便在警报条件为时有一些颜色或形状true。

最后,tradingview平台在搞活动,加入会员年费最高折扣60%,普通会员也有40%的折扣,并且多送一个月的市场。

如果你专注于交易,或者研究自己的指标,建议试试这个看盘图表平台。

皮特·布兰德老爷子也在推特上推荐了这次活动。

其说的“编码”,就是金金最近的教程系列所用的Pine语言,这一段的一些机会,也是参考了上面一些回测优秀的策略来执行的,感兴趣的,可以点击下面链接先注册个免费版的,体验下。

—-

编译者/作者:金金

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

LOADING...
LOADING...