TradingView中的赋值操作

引言

赋值是编写程序的基础,也是TradingView编程中最常用的操作之一。在编写策略时,肯定需要考虑好如何平仓出场,可能是止损,亦或者是止盈。通常我们会用不同的变量分别来表示止损价或者止盈价,其具体的值就需要进行赋值。当价格达到止盈价或者止损价时,策略就会进行对应的操作。下面我们就结合一些具体的例子来看看如何在策略中灵活的使用赋值操作。

操作符和操作数

在正式开始之前我们需要先搞清楚一些概念,操作符(或运算符)和操作数。

操作符是指对一个或多个操作数执行操作的符号或关键字。而操作数则是操作符操作的值或变量。操作符和操作数一起构成表达式,用于执行特定的计算或操作。而对变量的赋值也需要使用表达式来完成。

变量赋值

在以下赋值表达式中:

stop_loss = 1000

式中,数字“1000”是操作数,“=”是赋值操作符,stop_loss是一个变量,用来表示止损价。我们使用赋值操作符“=”将数字1000赋值给变量stop_loss。

take_profit = high[1]

这个例子中,我们使用变量take_profit表示止盈价。它的值是high[1],high是一个系统内置的变量,表示当前K线的最高价,“[]”是历史运算符,而high[1]表示前一根K线的最高价。

所以此时takpe_profit的值会随着时间发生改变。

从上面的例子中可以发现,对变量赋值有几个显而易见的好处。

第一,可以让程序更加简洁。想象一下,如果我们的策略在多个地方都要用到止损价,我们就可以使用stop_loss进行替代,这样当我们需要调整止损价时,只需要修改赋值的地方就可以了。大大简化了操作,而且不容易出错。

第二,因为使用了变量,程序的可读性会变得更加容易理解。否则隔一段时间再来修改代码的时候,就该头疼了。

第三,变量允许我们更加灵活的使用数据。例如take_profit的值就会随着K线的变化自动更新,而不用我们专门去精力维护。

为函数传参

TradingView内置很多函数,例如像判断金、死叉,获取均线这类的函数,可以为我们节省大量的时间。想要正确的试用这些函数则需要给这些函数的参数输入合适的数值。

strategy(title="我的策略", overlay=true)

例如在上面的例子中,title和overlay是函数strategy中的参数名。title=”Example script”表示将策略脚本中的标题指定为”Example script”,overlay=true表示接下来脚本生成的图表会显示在主图表中。如下图所示:

变量赋值的限制

在TradingView中有一个和其它编程语言明显不同的地方,如果某个变量被赋予了一个数值,当我们想再次通过赋值运算符“=”更新它的数值时,系统会提示语法错误。

当我们已经给averageClose赋值为:close / 2之后,是不能再使用“=”赋值的,取而代之的必须使用重新赋值运算符“:=”来赋值。正确的写法如下:

//@version=5
indicator("我的策略", overlay=true)

averageClose = close / 2
averageClose := ta.sma(close, 10)

plot(averageClose, linewidth=3)

这可能是出于某种安全机制的考虑,毕竟它的应用场景是用来做交易。

赋值运算符“=”和比较运算符“==”

赋值运算符“=”使用一个等号,而比较运算符“==”使用两个等号。它们之间的区别在于,赋值操作符将其右侧的值赋给左侧的变量,而比较运算符则是测试其右侧的值是否与左侧的值相同。这其实是一个相当反人性的设计,从小到大我们都习惯了用“=”表示相等。即使是着多年经验的老鸟,在没有语法提示的情况下也有可能会写错。

而且在一些特殊的情况下,还很容易让人混淆。例如:

//@version=5
indicator(title="我的指标", overlay=true)

colour = high == ta.highest(high, 55) ? color.yellow : color.purple

barcolor(colour)

这个脚本的意思是创建一个指标,根据当前的最高价与过去55根K线中的最高价进行比较,来决定当前K线蜡烛图的颜色。效果如下:

由于运算符“==”的优先级要大于“=”,所以程序在运行的时候会先判断过去55天的最高价:ta.highest(high, 55)是否等于当前最高价high;如果成立的话,颜色为黄色,如果不成立的话,颜色为紫色。最后会将颜色赋值给变量color,之后在图表上渲染显现。

小结

赋值操作符“=”可以为变量赋值,或者传递正确的数值给函数的参数。需要注意的是当我们已经使用赋值操作符“=”给某个变量赋值后,我们不能再次使用“=”为该变量重新赋值,而是需要使用重新赋值操作符“:=”来改变该变量的数值。

发表回复 0

Index