: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

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

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

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

TradingView Pine 中的算术运算符

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

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


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

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



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 中使用加法和减法运算符

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

  3. // Make persistent variables for our volume count
  4. var upVolume = 0.0
  5. var downVolume = 0.0

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

  11. // Plot data on the chart
  12. plot(upVolume, color=color.green)
  13. plot(downVolume, color=color.red)
复制代码
我们首先使用 indicator() 函数配置指标的设置。

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

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

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

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

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



在 TradingView Pine 中执行乘除运算

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

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

  5. highVolume = 1.75 * volumeEMA

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

  7. plot(volumeRatio, style=plot.style_histogram, color=plotColour,
  8.      linewidth=4)
复制代码
在本例中,我们首先使用 indicator() 定义指标的设置。

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

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

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

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



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

总结

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

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   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

返回列表