: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

【PART 2】算术运算符:TradingView Pine 中的模数运算符 (%)

【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:

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

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
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

使用 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。
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表