TradingView中的运算符/操作符

引言

运算符或者说操作符是编程语言中的基本元素,用于执行各种操作和计算。它们是构建复杂逻辑和算法的关键组成部分,使程序能够对数据进行处理和转换。在TradingView中,运算符可以实现条件逻辑的判断、订单执行等功能。除此之外它还可以帮助交易者根据特定的策略和条件来编写自定义的脚本和指标,从而更好地理解市场走势并做出相应的交易决策。

运算符、操作数和表达式

运算符(Operators):运算符是用于执行操作的符号或关键字。它们指示编程语言执行特定的操作,如算术运算“加(+)、减(-)、乘(*)、除(/)”,逻辑运算”与(and)、或(or)、非(not)“,比较运算”大于(>)、小于(<)、等于(=)“等。运算符可以是单目(只需要一个操作数)或双目(需要两个操作数)。例如”-5″中的 “-” 是一个单目运算符,它作用于数字 “5”,表示负数;2 + 3 中的 “+” 是一个双目运算符,作用于数字 “2” 和 “3”,表示加法操作。

操作数(Operands):操作数是运算符所操作的值或变量。在表达式中,操作数可以是常量、变量、函数调用、表达式等,它们参与运算符指定的操作。例如上面的例子”2 + 3“中,数字 “2” 和 “3”就是操作数。

表达式(Expressions):表达式是由运算符和操作数组成的序列,用于计算某个值。表达式可以是简单的算术表达式,也可以是复杂的逻辑表达式。通过对表达式进行求值,可以得到一个结果。例如, “-5″ 就是一个表达式。”-” 是单目运算符,作用于数字 “5”,表示取负操作,整个表达式的求值结果为 -5。

在TradingView中,表达式”sma(close, 20)”表示返回收盘价的 20 期移动平均。

  • 式中运算符是函数调用操作符”()“,用于调用名为 “sma” 的函数。
  • 操作数分别是 “close” 和 “20”。”close” 是表示收盘价的数据序列,可以简单理解成收盘价。它是函数 “sma” 的第一个参数;”20″ 是表示期数的数字,它是函数 “sma” 的第二个参数,表示计算移动平均的期数。

历史引用运算符“[]”

作为一种与金融相关的语言,TradingView中也有一些特殊的运算符。例如在”获取K线数据“这篇文章中,我们重点介绍了如何使用历史引用运算符”[]“正确的获取K线数据。简单的来说,对于任意TradingView中出现的时间序列(基于K线)数据,我们都可以使用”[]“来读取它们之前的数据。例如”close[1]“表示获取当前收盘价前一根K线收盘价的数据,”sma(close, 20)[1]”表示收盘价的 20 期移动平均前一根K线的20期移动平均价。如果想继续往后推,我们只需要增加”[]“中的数字。

需要注意的是,当前未完成的这根K线的收盘价对应的历史引用运算符中的编号是“0”,默认情况下直接用“close”来代替(close = close[0])。

三元运算符“?:”

在TradingView中会大量的使用三元运算符“?:”代替if/else,这让会初学者十分的抓狂,不过等我们适应了之后,就能体会到这种设计的巧秒。举个例子来说明,例如我们在策略脚本中想使用plot函数画出止损线,在TradingView中应该这么写:

plot(strategy.position_size > 0 and is_trading == 1 ? long_tp_stop : na, color = color.white, style = plot.style_linebr)

“strategy.position_size > 0” 表示当前持仓大于0,代表正在进行交易。
“is_trading == 1” 表示当前状态为多单。
“?” 相当于if/else条件语句中的 “if” 部分,表示条件为真时要执行的操作。
“:” 相当于if/else条件语句中的 “else” 部分,表示条件为假时要执行的操作。
“long_tp_stop” 表示止损价。
“color” 表示颜色,”color.white”为白色。
“style” 表示样式,”plot.style_linebr”为直线。

具体效果如下:

这句代码的意思当做多的时候,用白色直线画出止损价。其它情况止损价的值不存在,为na,不需要处理。如果使用if/else写的话,应该是这样的:

if strategy.position_size > 0 and is_trading == 1
    stop_value = long_tp_stop
else
    stop_value = na

在TradingView中,Plot()函数必须在脚本的顶层,它不能嵌套在其他函数或条件语句中。直白点说就是plot函数必须顶头写。

if strategy.position_size > 0 and is_trading == 1:
    stop_value = long_tp_stop
    plot()  // 错误写法
else:
    stop_value = na
    plot()  // 错误写法

因为TradingView是基于K线设计的,plot函数的作用是用来生成图表中的图形和线条,所以它必须要顶头才能确保它在每根K线上都能够正常的加载一次数据。使用三元运算符的话,就可以避免这种情况,这样的话,函数就可以正常工作了。

运算符的布尔值(true / false)

运算符的布尔值(true / false)是指当使用运算符执行操作时,该操作的结果是否为真(true)或假(false)。例如,对于运算符“strategy.position_size > 0 and is_trading”,如果比较表达式成立,则结果为真(true),否则为假(false)。

定义自定义函数

在TradingView中,我们可以使用函数声明运算符”=>”创建自定义函数,关于这部分内容,我会单独写文章详细讲解。

运算符的优先顺序

运算符的优先顺序指的是在表达式中,多个运算符同时出现时,它们的执行顺序。通常情况下,运算符的优先级由编程语言规定,并遵循一定的规则。在TradingView中也有着关于运算顺序的详细定义,可以看这篇文章(链接)。

小结

TradingView中的大部分运算符和其它语言一样。除此之外,它还有一些特殊的运算符和语法规定。例如历史引用运算符“[]”和函数声明运算符”=>”。

发表回复 2

邓邓, 邓

邓邓, 邓

老庄哥哥 我想问下 同一个入场条件满足的时候 我要开一个多 一个空 实现两个独立的入场应该怎么样写的呢

laozhuang

laozhuang

使用strategy.order可以同时下单,不要使用strategy.entry

Index