龙听期货论坛's Archiver

龙听 发表于 2024-3-29 13:46

【PART 2】算术运算符:TradingView Pine 中的算术运算符 (+, -, *, /)

几乎所有 TradingView 脚本中都会用到算术运算符。它们有哪些特点,如何工作?

TradingView Pine 中的算术运算符

TradingView 有四个算术运算符,可执行加法 (+)、减法 (-)、乘法 (*) 和除法 (/) 等标准数学运算(Pine 脚本语言教程,未注明日期)。顺便提一下,运算符是对一个或多个值进行运算以产生结果的代码元素(Stephens,2014)。我们将运算符运算的值称为操作数(Sharp,2013 年)。

TradingView 中的简单算术运算符正如您所期望的那样工作:

[img]http://p.algo2.net/2024/0329/7082dda4f58a7.png[/img]
如上表所示,所有算术运算符都需要两个操作数(Pine Script Language Tutorial, n.d.)。但加法(+)和减法(-)运算符也可以应用于一个操作数(TradingView, n.d.)。在这种情况下,"-"返回操作数的相反值,而 "+"则保持数值不变。

因此,如果我们假设 x 是一个值为 10 的变量,而 y 的值为 -5,那么将 + 和 - 运算符放在这些变量之前会产生以下效果:

[img]http://p.algo2.net/2024/0329/10133897e9f74.png[/img]

TradingView 运算符返回的值

算术运算符返回的值取决于操作数的类型(Pine Script Language Tutorial,n.d.)。在两种情况下,算术运算符返回的值与你预期的不同。

首先,当用 / 除两个整数时,小数值会被丢弃,Pine 会将其舍入为零。但这只发生在整数除法中:当我们执行除法时,操作数之一是浮点数,那么结果将是十进制答案。例如,23 除以 7 的结果是 3,但 23 除以 7.0(或 23.0 除以 7)的结果是 3.2857。

其次,当一个操作数为 NaN("非数字",一种由无效运算引起的数值;Albahari & Albahari, 2012)时,算术运算符也会返回 NaN(《松树脚本语言教程》,无注释)。

在 TradingView Pine 中使用加法和减法运算符

加法(+)和减法(-)运算符的示例如下:[code]
//@version=5
indicator(title="Arithmetic operators - example 1")

// Make persistent variables for our volume count
var upVolume = 0.0
var downVolume = 0.0

// Count up and down volume based on how bar closed
if close > open
    upVolume := upVolume[1] + volume
else if close < open
    downVolume := downVolume[1] + volume

// Plot data on the chart
plot(upVolume, color=color.green)
plot(downVolume, color=color.red)
[/code]我们首先使用 indicator() 函数配置指标的设置。

然后,我们创建两个持久变量:upVolume 和 downVolume。我们将用它们来计算所有上涨条形图和下跌条形图的总成交量之和。它们是持久变量,因此可以从一个条形图记住下一个条形图的值。

接下来,一个级联 if 语句会首先检查当前条形图的收盘价(close)是否大于(>)其开盘价(open)。如果是,我们就将当前条形图的成交量(volume)与上一条形图的 upVolume[1] 值相加。这样就得到了总的上涨交易量总和,我们将其存储在 upVolume 变量的更新值中。

当收盘价不大于开盘价时,运行下一个 if 条件。这个条件测试收盘价是否小于(<)开盘价。在这种情况下,我们取前一栏的 downVolume 值,加上 (+) 当前栏的交易量(成交量),并将此值放入 downVolume 变量中。

计算完这两个变量后,我们使用 plot() 函数在图表上将它们绘制成绿色和红色线条。

将此示例指标添加到 TradingView 图表中后,它看起来就像这样:

[img]http://p.algo2.net/2024/0329/cb0125fe438df.png[/img]

在 TradingView Pine 中执行乘除运算

在 TradingView 中使用 / 和 * 运算符的过程如下:[code]//@version=5
indicator(title="Arithmetic operators - example 2")

volumeEMA = ta.ema(volume, 30)
volumeRatio = volume / volumeEMA

highVolume = 1.75 * volumeEMA

plotColour = volume > highVolume ? color.orange : color.navy

plot(volumeRatio, style=plot.style_histogram, color=plotColour,
     linewidth=4)[/code]在本例中,我们首先使用 indicator() 定义指标的设置。

下一条语句根据最近 30 个条形图的交易量数据计算指数移动平均线(EMA),并将 ta.ema() 返回的值放入 volumeEMA 变量。然后,我们用当前条形图的交易量(成交量)除以 volumeEMA,并将结果赋值给 volumeRatio 变量。

然后,我们将 volumeEMA 乘以 1.75(即比平均成交量高出 75%),计算出 highVolume 的值。现在,所有变量都已定义,我们可以使用条件三元运算符(?) 如果当前条形图的成交量大于 (>) highVolume 的值,该运算符就会进行评估。在这种情况下,橘色将被添加到 plotColour 变量中;否则,该变量将被添加为海军蓝。

示例中的最后一条语句调用 plot() 函数,根据 volumeRatio 变量创建直方图。我们将该图的颜色设置为刚才定义的 plotColour 变量。

添加到图表中后,上面的示例看起来就像这样:

[img]http://p.algo2.net/2024/0329/61321d1a1142b.png[/img]

算术运算符的其他示例包括使用加法运算符 (+) 组合字符串,以及使用模运算符 (%) 求除法的余数。

总结

TradingView 中的四个算术运算符是加法 (+)、减法 (-)、乘法 (*) 和除法 (/)。每种运算符都可以对两个操作数进行运算,而加法和减法也可以只对一个操作数进行运算。算术运算符返回的值取决于操作数的类型:当一个操作数是 NaN 时,结果也是 NaN。当两个整数相除时,任何小数余数都会被丢弃;而当至少一个操作数是浮点数时,就不会出现这种情况。

页: [1]