Board logo

标题: 【PART 2】算术运算符:TradingView Pine 中的模数运算符 (%) [打印本页]

作者: 龙听    时间: 2024-3-29 13:57     标题: 【PART 2】算术运算符:TradingView Pine 中的模数运算符 (%)

TradingView Pine 中的模数运算符 (%)

除了 TradingView Pine 中的算术运算符外,还有一个用于执行计算的运算符:模运算符 (%)。该运算符的作用是什么,如何使用?

TradingView Pine 中的模数运算符

实际上,所有 TradingView 脚本都包含运算符。运算符是对一个或多个值进行运算的代码元素,这些值称为操作数(Sharp,2013;Stephens,2014)。TradingView Pine 有四个基本算术运算符,分别为加法 (+)、减法 (-)、除法 (/) 和乘法 (*)。

在 TradingView 中执行整除时,任何小数余数都会丢失(参见《Pine 脚本语言教程》,未注明出处)。这意味着 10 / 7 返回 1,而不是 1.4286。但有时我们确实希望计算整除的余数,而不是将其丢弃。为此,我们使用模运算符 (%)。该运算符接受两个操作数,并返回整数除法的余数(Pine Script Language Tutorial,n.d.;TradingView,n.d.)。因此,在其他编程语言中,该运算符有时也被称为余数运算符(Sharp,2013 年)。

例如,5 % 3 的结果是 2(5 / 3 = 1,余数为 2),而 25 % 3 的结果是 1(25 / 3 = 8,余数为 1)。这样的表达式可以理解为 "25 modulo three 等于 1",或者简称为 "25 mod three"(Liberty & MacDonald, 2009)。

有了模运算符,我们可以很容易地找到某事物的第 n 次出现。在其他编程语言中,它主要用于循环(例如,参见 Liberty & Cadenhead, 2011; Liberty & MacDonald, 2009)。由于 TradingView Pine 没有任何循环,因此模运算符的使用很有限。但正如我们将在下面的示例中看到的,在某些情况下,我们仍然需要了解这个有用的运算符。

TradingView 模量运算符的基本示例

为了更好地了解模数运算符的工作原理,我们来看下面的示例:
  1. //@version=5
  2. indicator(title="Modulus - example 1")

  3. plot(bar_index % 6)
复制代码
首先,我们必须使用 indicator() 函数来定义指标的属性。然后使用 plot() 函数绘制一条实线,其结果为 6 modulo bar_index。后面的 bar_index 变量返回当前条数(TradingView,注)。当我们将此脚本添加到图表中时,它看起来就像这样:



在这里,我们可以看到模运算符的结果介于 0 和 5 之间。如果我们再仔细观察,就会发现模运算符会为每个平均分成 6 的条形数字返回 0:
作者: 龙听    时间: 2024-3-29 13:57

Bar numberExpressionResult
00 % 60
11 % 61
22 % 62
33 % 63
44 % 64
55 % 65
66 % 60
77 % 61
88 % 62
99 % 63
1010 % 64
1111 % 65
1212 % 60
1313 % 61
1414 % 62
1515 % 63
1616 % 64
1717 % 65
1818 % 60

作者: 龙听    时间: 2024-3-29 14:01

使用 TradingView 的模数运算符突出显示第 n 个价格条

在上一个示例的基础上,我们可以使用模数运算符突出显示每第 7 个价格条:
  1. //@version=5
  2. indicator(title="Modulus - example 2", overlay=true)

  3. highlightColour = bar_index % 7 == 0 ? color.yellow : na

  4. // Colour chart and bar in yellow (or use no colour change)
  5. barcolor(highlightColour)
  6. bgcolor(color.new(highlightColour, 70))
复制代码
使用 indicator() 设置脚本属性后,我们创建了一个名为 highlightColour 的变量。该变量的值由条件三元运算符 (?:) 设置。当 bar_index modulo 7 等于(==)0 时,该运算符将为变量指定黄色。就颜色而言,na 是默认颜色(Pine Script Language Tutorial, n.d.),这意味着它不会影响图表的视觉效果。

下一条语句使用 barcolor(),这是一个设置价格条颜色的函数(TradingView, n.d.)。它的第一个参数设置为 highlightColour 变量。这样,所有价格条要么是默认颜色(由于 na),要么是黄色。

然后,我们用 bgcolor() 将图表的背景颜色设置为相同的变量(Pine Script Language Tutorial, n.d.)。在这里,我们使用 color.new() 函数使颜色的透明度达到 70%,然后再将其应用于图表背景。这样我们就得到了一个浅黄色的背景。

将此示例脚本添加到图表中会产生以下效果:



使用 TradingView 的模运算符查找偶数和奇数

当我们对一个数字执行模 2 时,% 运算符会在数字为偶数时返回 0(Sempf、Sphar 和 Davis,2010 年)。因此,我们可以使用模运算符查找偶数和奇数。例如
  1. //@version=5
  2. indicator(title="Modulus - example 3", overlay=true)

  3. evenBar = bar_index % 2 == 0 ? 1 : -1

  4. plotarrow(evenBar, colorup=color.blue, colordown=color.yellow,
  5.      maxheight=15)
复制代码
我们首先在这里用 indicator() 指定指标的设置。

然后创建 evenBar 变量,并使用条件三元运算符 (?:) 从两个值中选择一个。该运算符会评估当前条形图编号(bar_index)的 2 次模数是否等于(==)0。如果是,则给 evenBar 赋值为 1;否则赋值为-1。

然后,evenBar 中的正负值将用于 plotarrow()。当其第一个参数为正值时,该函数会绘制向上的箭头,而当该参数为负值时,则会绘制向下的箭头(TradingView,注)。

因此,根据我们在 evenBar 中输入的值,在偶数条上显示向上箭头,在奇数条上显示向下箭头。使用 colorup 时,向上箭头显示为蓝色(color.blue),使用 colordown 时,向下箭头显示为黄色(color.yellow)。通过将最大高度设置为 15 像素,所有箭头的大小都相同。

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



总结

模运算符 (%) 返回整数除法的余数,这个值在使用除法运算符 (/) 除两个整数时被丢弃。使用模运算符,我们可以通过检查数字 % bar_index 是否等于 0,轻松找到第 n 次出现的数字。模运算符的另一个用途是检查偶数(或奇数),在这种情况下,数字 % 2 等于 0。




欢迎光临 龙听期货论坛 (http://www.qhlt.cn/) Powered by Discuz! 7.2