如何在TradingView上创建技术分析指标
目录
导语
什么是Pine Script?
创建
The Pine Editor
绘制移动平均线(MA)
绘制相对强弱指数(RSI)指标图表
回溯测试
结合起来
总结
如何在TradingView上创建技术分析指标
首页文章
如何在TradingView上创建技术分析指标

如何在TradingView上创建技术分析指标

高阶
Published Aug 28, 2020Updated Nov 18, 2021
12m

导语

如果没有正确的交易工具,就无法进行有效的技术分析。强大的交易策略有助于避免常见错误,改善风险管理,提升识别并利用机会的能力。
对许多人来说,TradingView是一个有问必答的图表平台。这一强大的HTML5网络应用程序提供技术分析工具中心,帮助数百万用户追踪外汇加密货币以及传统股市的动向。
TradingView拥有诸多强大功能:允许用户追踪多个交易平台上的资产,并在其社交网站上发布对交易的看法。本文将重点介绍其定制功能。我们将使用TradingView的专属编程语言Pine Script,它允许我们对图表布局进行更细致的控制。

开始操作吧!


什么是Pine Script?

Pine Script是一种可用于修改TradingView图表的脚本语言。TradingView平台已经提供了许多类似功能,但Pine Script的功能更强大。无论是想更换K线图颜色,还是想回溯测试一个新策略,Pine Editor支持您依据自身需求定制实时图表。
代码本身已有完备记载,所以一定要查看用户手册了解详情。本文旨在讨论一些基础知识,并介绍在加密货币交易中可以派上用场的指标。


创建

Pine Script简单易用。我们编写的任何代码都是在TradingView的服务器上运行,因此我们可以通过浏览器访问编辑器并开发我们的脚本,无需额外下载或配置。

在本教程中,我们将绘制比特币/币安USD(BTCBUSD)货币对图表。如果您还没有币安账户,请创建一个免费账户(也可创建专业会员账户,但在本指南中没有必要)。
打开链接,会看到一张类似于以下的图表:


您的图表数据可能更新。


现在,我们想获取拥有丰富功能的图表,点击按钮进入。然后我们就可以看见更详细的视图、绘图工具、绘制趋势线的选项以及其他功能。


功能齐全的图表。您可通过点击高亮选项卡上方的视图来调整时间表。


我们不会讨论如何使用现有的各种工具,但如果真的想要开展技术分析,我们强烈建议您先熟悉这些工具。在左下方(如图概述),您会看到几个不同选项卡——点击Pine Editor


The Pine Editor



这个编辑器很神奇。我们会告诉它我们想做什么,然后点击添加到图表,就会看到我们添加的注释出现在图表中。请注意,如果我们同时添加几个注释,就会混成一团,所以我们会在例子中删除(在图表中单击右键>删除指标)。
可以看到,我们已经有几行代码了。让我们点击添加到图表,看看会发生什么。



将第二个图表添加到原始图表下方。新图表刚好显示相同数据。将鼠标放在我的脚本上,并点击×删除。现在,让我们来研究一下代码。
研究(“我的脚本”)
第一行只是设置我们的注释。仅需您想调用的指标名称(本例中为“我的脚本”),但我们还可以添加一些可选参数。其中一个是覆盖,该参数指示TradingView将指标放到现有图表中(而不是新图表中)。从我们列举的第一个例子中可以看出,默认值为false。虽然现在还看不到它是如何操作的,但overlay=true会将指标添加到现有图表中。
绘制图表(收盘)
这条线是绘制比特币收盘价图表的指令。绘制图表只是给我们提供一张折线图,但我们也可以呈现K线图和条形图,我们很快就会看到。

现在,让我们试试以下方法:

//@version=4 study("My Script", overlay=true) plot(open, color=color.purple)
添加完毕后,应该能看到第二个图表(看起来像是原图表向右移动了)。我们做的是绘制开盘价图表,由于当天的开盘价就是前一天的收盘价,所以这些图表走势完全相同是合理的。
好了!让我们删除当前注释(记住,单击右键并点击删除指标即可实现)。将鼠标放在比特币/BUSD上,并点击隐藏按钮,可删除当前图表。

许多交易者更喜欢使用K线图,比起我们刚才做的那种简单图表,K线图能为我们提供更多信息。接下来让我们将绘制的图表添加进去。

//@version=4 study("My Script", overlay=true) plotcandle(open, high, low, close)
开始得很顺利,但颜色单调让它看起来有些乏味。在理想情况下,当开盘价低于收盘价时,K线图应该呈红色,如果收盘价高于开盘价,K线图呈绿色。我们在plotcandle()函数上方添加一行:
//@version=4 study("My Script", overlay=true) colors = open >= close?color.red: color.green plotcandle(open, high, low, close)

这要查看每一张K线图,检查开盘价是否高于或等于收盘价。如果情况如此,就意味着价格在这段时间内下跌,K线图将变成红色。否则会变成绿色。修改plotcandle()函数,添加该颜色方案:

//@version=4 study("My Script", overlay=true) colors = open >= close?color.red: color.green plotcandle(open, high, low, close, color=colors)

如果您还没有删除现有指标,请将其删除,并将这一指标添加到图表中。现在我们应该就绘制出了一张类似于K线图的图表。


干得漂亮!


绘制移动平均线(MA)

我们已经完成了一些基本操作。让我们来看看我们的第一个自定义指标——指数移动平均线,或EMA。这个工具很实用,它能使我们过滤掉任何市场噪音,使价格行为变得平缓。
EMA与简单移动平均线(SMA)略有不同,它更看重最近的数据。它倾向于对突然的变化作出更多反应,并经常用于短期操作(例如,在日间交易中)。


简单移动平均线(SMA)

我们也可以绘制SMA,这样我们之后就可以对两者进行对比了。将该行添加到您的脚本中。

plot(sma(close, 10))

这绘制的是前十天平均数图表。调整括号里的数字,看长度变化时,曲线是如何变化的。


SMA基于前十天的数据。


指数移动平均线(EMA)

EMA的理解比较复杂,但不用担心。我们先来分析一下这个公式:

EMA=(收盘价-前一天的EMA)*倍数-前一天的EMA

这说明什么呢?每一天,我们会在前一天的基础上计算出一个新的移动平均线值。倍数是“加权”最近的天数,用以下公式计算:

倍数=2/(EMA长度+1)

与简单移动平均线一样,我们需要为EMA的长度赋值。在句法上,绘制EMA函数与绘制SMA函数类似。将其与SMA一起绘制,您就可以将两者进行对比了。

//@version=4 study("My Script", overlay=true) plot(sma(close, 10)) plot(ema(close, 10))


您会看到这两种类型的MA略有不同。



内置脚本

到目前为止,我们已经手动编写了我们的代码,您会有一个直观感受。现在我们会介绍一些能够节约时间的功能,特别是如果我们要编写更复杂的脚本,但又不想从头开始的时候。

在编辑器右上方,点击新建。会得到一个显示各种不同技术指标的下拉菜单。点击移动平均指数,查看EMA指标的源代码。



点击并将其添加到图表中。


这个指数与我们的不同,您会注意到input()函数。从可用性角度来看,这些都很不错,因为您可点击此框……



……并点击设置的齿轮图标,在弹窗中轻松更改一些数值。



我们将在下一个脚本中添加几个input()函数来演示这一内容。


绘制相对强弱指数(RSI)指标图表

相对强弱指数(RSI)技术分析中的另一个重要指标。称为动量指标,衡量资产买卖的价格。在0到100范围内,RSI得分尝试告知投资者资产是超买还是超卖。通常情况下,如果一项资产的得分小于或等于30分,就可能被认为是超卖,而得分大于或等于70分,就可能是超买。
前往新建>RSI策略,您可亲自查看。RSI一般以14为周期进行测量(即14小时或14天),但您可以自由调整这一设置来适应自己的策略。
将RSI添加到图表中。您应该看到现在显示的几个箭头(由该代码中的strategy.entry()函数定义)。RsiLE表示延长资产的潜在机会,因为它可能被超卖。RsiSE强调在资产超买时可能做空的点。请注意,与所有指标一样,您没必要把这些指标作为价格将要下降/增加的铁证。


回溯测试

有一种方法可供我们测试自己的自定义指标。虽然过去的表现不能保证未来的结果,但对我们的脚本进行回溯测试可以使我们了解其在捕捉信号方面的有效性。

下面我们将举一个简单的脚本例子。我们计划一个简单明了的策略,当比特币的价格跌至1.1万美元时进入多头头寸,当价格超过1.13万美元时退出多头头寸。然后我们可以看到这一策略在历史上的盈利情况。

//@version=4 strategy("ToDaMoon", overlay=true) enter = input(11000) exit = input(11300) price = close if (price <= enter) strategy.entry("BuyTheDip",strategy.long,comment="BuyTheDip") if (price >= exit) strategy.close_all(comment="SellTheNews")
这里我们把进入退出定义为变量——两者都是输入,意味着我们以后可以在图表中对两者做出更改。我们还设置了价格变量,取每期的收盘价。然后,我们有一些逻辑按照if句式进行。如果括号中部分为真,那么它下面的缩进区块就会被运行。否则,会被跳过。

因此,如果价格小于或等于我们期望的入市价,且第一个表达式评估为真,我们将建立一个多头头寸。一旦价格等于或超过所需的退市价,第二个区块将被触发,关闭所有未平仓头寸。

我们用箭头为图表添加注释,显示我们进入/退出的位置,所以我们用评价参数来指定标记这些点的内容(在本例中是"BuyTheDip"和"SellTheNews")。复制代码,并将其添加到图表中。


现在您可以在图表中看到这些指标。可能需要放大。


TradingView会自动将您的规则应用于较早的数据。您还会注意到,TradingView从Pine Editor切换到策略测试者选项卡。以便让您看到潜在利润概览、交易清单以及各指标的表现。


我们已经进入和退出的头寸。


结合起来

现在,我们可以利用目前为止看到的一些概念来编写我们自己的脚本。我们会将EMA和RSI结合起来,用它们的值来影响K线图的颜色,使我们可以轻松看懂。

但这并不构成理财建议,在使用这些指标方面,客观地说并没有完全正确的方法。与其他所有工具一样,应该将其与其他工具相结合,制定自己的投资策略。

现在让我们来研究一下新脚本。从图表中删除所有指标,同时隐藏比特币/BUSD图表,这样我们就有一个简洁的操作背景了。

让我们先研究定义。随意命名,只要确保设置overlay=true即可。
study(title="Binance Academy Script", overlay=true)
记住我们前面的EMA公式。我们需要使用EMA长度来计算出倍数。让我们把它变成需要整数位的输入,所以不要留小数位。我们还会设定最小值(minval),以及默认值(defval)。
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0)


根据这一新变量,我们可以计算出图表中每张K线图的EMA值:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength)


很好。接下来让我们看一下RSI。我们将以类似方式为它赋一个长度值:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0)

现在,我们可以计算一下:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength)

在这个阶段,让我们把决定K线图颜色的逻辑结合在一起,这些颜色要取决于EMA和RSI的值。让我们假设(a)K线图的收盘价超过EMA,(b)RSI高于50。

为什么要这样假设呢?因为您可能会决定将这些指标结合起来使用,从而了解何时做多或做空比特币。例如,您可能认为满足这两个条件意味着现在是做多的好时机。或者反过来说,您可以用它来提醒自己什么时候不要做空,即使其他指标给出的参考恰好相反。

因此,我们的下一行代码会类似于这样:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50? color.green: color.red
如果我们把这句话翻译成简明英语,我们其实就是在说,如果EMA值超过收盘价RSI分值超过50,K线图将变为绿色。否则会变为红色。

接下来,绘制EMA图表:

study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50? color.green: color.red plot(emaVal, "EMA")
最后,绘制K线图,请务必包含颜色参数:
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50?color.green: color.red plot(emaVal, "EMA") plotcandle(open, high, low, close, color=colors)

然后,脚本就编写好了!把它添加到图表中,看看它的运作情况吧。


一张含EMA/RSI指标的比特币/BUSD图表。


总结

在本文中,我们通过一些基本例子来向您演示了TradingView上Pine Editor的功能。现在,您应该有信心对价格图表进行简单注释,以便从自己的指标中获得更多见解。

我们在本文中只介绍了其中几个指标,但建立更复杂的指标并不难——可选择新建内置脚本或自己编写内置脚本。

依然缺乏灵感?下列文章可能为您的下一个项目提供一些想法: