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

【PART 2】算术运算符:使用 TradingView 的加法运算符组合字符串

【PART 2】算术运算符:使用 TradingView 的加法运算符组合字符串

在 TradingView Pine 中,加法运算符 (+) 经常用于计算数值。但我们也可以将该运算符用于字符串。让我们看看如何操作。

在 TradingView 中使用加法运算符添加字符串

运算符允许我们为 TradingView Pine 脚本增加复杂性。运算符是对一个或多个值执行操作的代码元素(Stephens,2014 年)。我们将运算符 "作用于 "的值称为操作数(Sharp,2013 年)。例如,在 10 - 3.5 这样的表达式中,减号是运算符,而 10 和 3.5 是其操作数。

常用的运算符是算术运算符(+、-、*和/),我们在进行计算时会用到这些运算符(Pine Script Language Tutorial,n.d.)。其中的加法运算符 (+) 不仅可以运算数字(如 3 + 0.39 和 high + low),还可以运算字符串。在讨论这个问题之前,我们先来澄清几个术语。

对于程序员来说,字符串指的是一串文本(Stellman & Greene,2010 年)。TradingView 中有两种类型的字符串(Pine Script Language Tutorial,n.d.):

字面字符串是手动输入到脚本源代码中的文本,用单引号或双引号包围。字符串文字的例子有 "enter long "和 "volume increase"。

字符串变量是保存文本的变量。它可以是一个内置变量(如 syminfo.ticker,返回一个包含工具符号的字符串;TradingView, n.d.),也可以是我们自己创建的变量。后者的例子是 myText = "long signal"。

现在,加法运算符能做的事情(除了将数字相加之外)就是将一个字符串加到另一个字符串的末尾。这种操作称为字符串连接(Stellman & Greene,2010 年)。

在 TradingView 中使用 + 将字符串加在一起具有以下特点:

只有当两个操作数都是字符串时,字符串连接才起作用。这意味着 "买入" + "信号 "有效(返回 "买入信号 "字符串),但 "买入" + 10 + "合同 "无效:返回 "不能调用带参数运算符 + (...)" 的错误信息。

当操作数是数字时,我们首先需要将其转换为字符串,然后才能使用 + 创建组合字符串。这种转换使用 str.tostring() 函数完成(TradingView,注)。因此,虽然 "前收盘价" + close[1]会导致 TradingView 出错,但 "前收盘价" + str.tostring(close[1]) 却能正常工作。

目前,str.tostring() 函数只能用于使用相等比较运算符 (==) 进行比较;str.tostring() 不能用于使用 plotshape() 和 plotchar() 等函数在图表上显示文本。

请注意,当我们用 + 组合字符串时,这个加法运算符只是将字符串相加,因此 "25" + "2" 返回的不是 27,而是一个包含 "252 "文字的字符串。

示例:使用 + 将字符串文字加在一起

下面是一个使用 + 运算符组合字符串字面量的基本示例指标:
  1. //@version=5
  2. indicator(title="Example of combining strings", overlay=true)

  3. newHigh = high == ta.highest(high, 30)
  4. newLow  = low == ta.lowest(low, 30)

  5. highText = "New " + "\n" + "high"
  6. lowText  = "New " + "\n" + "30-bar " + "\n" + "low"

  7. plotshape(newHigh, location=location.abovebar,
  8.      style=shape.diamond, color=color.blue, text=highText)

  9. plotshape(newLow, location=location.belowbar,
  10.      style=shape.circle, color=color.purple, text=lowText)
复制代码
我们首先使用 indicator() 函数定义脚本的属性。然后,我们创建两个变量:
  1. newHigh = high == ta.highest(high, 30)
  2. newLow  = low == ta.lowest(low, 30)
复制代码
其中第一个变量 newHigh 被设置为真/假表达式,用于检查当前条形图的高点(high)是否等于(==)30 条形图的高点(包括当前条形图)。我们使用 ta.highest() 函数获取后一个值,该函数返回一定数量条形图的最高值(TradingView,注)。通过使用 high 和 30 参数计算该函数,它将返回最近 30 个条形图的最高价。

另一个变量 newLow 的赋值方法与此相同,只是现在我们要检查当前条形图的低价是否等于最近 30 个价格条形图的最低低价(ta.west(low, 30))。

接下来,我们创建两个额外的变量:
  1. highText = "New " + "\n" + "high"
  2. lowText  = "New " + "\n" + "30-bar " + "\n" + "low"
复制代码
在这里,我们使用 + 运算符将多个字符串文字组合在一起,从而为 highText 和 lowText 变量赋值。

我们给 highText 变量分配了一个字符串,该字符串由两个单词("New "和 "high")以及它们之间的换行符("\n")组成。该字符用于分隔文本行(Pine Script Language Tutorial, n.d.),其作用与常规输入时的回车键相同。

lowText 变量被设置为一个类似的字符串组合,不过这个文本更长,而且使用了两个换行符。在这里使用"\n "的好处是可以使文本在图表上显示的宽度更小(而不是绘制一条长线)。

然后,我们在图表上绘制这些变量的值:
  1. plotshape(newHigh, location=location.abovebar,
  2.      style=shape.diamond, color=color.blue, text=highText)

  3. plotshape(newLow, location=location.belowbar,
  4.      style=shape.circle, color=color.purple, text=lowText)
复制代码
只要 plotshape() 函数的第一个参数为 true,该函数就会在图表上绘制可视形状(Pine Script Language Tutorial,n.d.)。

在这里,我们将第一次调用 plotshape() 函数时的参数设置为 newHigh,这样函数就会在图表上每出现 30 条高点时绘制一个形状。我们将形状的类型设置为菱形(shape.diamond),并将其置于柱形图的上方(location.upsidebar)。与该菱形相匹配的文本是 highText 变量,我们之前将其设置为字符串字面组合。

第二个 plotshape() 函数调用与此类似:这一次,只要 newLow 变量为真,我们就绘制一个圆形(shape.circle)。该形状的颜色设置为标准 TradingView 颜色 color.purple,并放置在价格条(location.lowderbar)的下方。沿该形状的文字设置为 lowText 变量。

当我们将上述示例添加到图表中时,它看起来像这样:



在这里,我们可以看到,每当柱形图出现新的 30 柱极端价格时,图表上就会出现 "新高 "和 "新的 30 柱低点 "文本。

在 TradingView 中使用 + 运算符组合字符串和变量

加法运算符还可以将字符串文字和字符串变量组合在一起,如下所示:
  1. //@version=5
  2. indicator(title="Example of combining strings", overlay=true)

  3. beginText = "Closed "

  4. closedHigher = close > open

  5. plotshape(closedHigher, style=shape.arrowup,
  6.      location=location.belowbar, color=color.green,
  7.      text=beginText + "higher")

  8. plotshape(not closedHigher, style=shape.arrowdown,
  9.      location=location.abovebar, color=color.red,
  10.      text=beginText + "lower")
复制代码
首先,我们在这里使用必要的 indicator() 函数来设置脚本的设置。

然后,我们创建 beginText 字符串变量,并在其中存储 "Closed"(关闭)文本。我们创建的下一个变量是 closedHigher,这个变量根据一个表达式赋值为 true 或 false,该表达式用于评估条形图的收盘价是否大于(>)开盘价。

然后,我们用 plotshape() 在图表上画两个箭头:
  1. plotshape(closedHigher, style=shape.arrowup,
  2.      location=location.belowbar, color=color.green,
  3.      text=beginText + "higher")

  4. plotshape(not closedHigher, style=shape.arrowdown,
  5.      location=location.abovebar, color=color.red,
  6.      text=beginText + "lower")
复制代码
只要 closedHigher 变量为真,第一个 plotshape() 函数调用就会在图表上画出一个向上的箭头(shape.arrowup)。我们将这些标记较高收盘价的箭头放在条形图(location.lowbar)的下方,并用绿色(color.green)作为 TradingView 的基本颜色。

箭头附带的文本是用加法运算符 (+) 生成的,用于将 beginText 字符串变量和 "higher "字符串文字连接在一起。由于 beginText 包含一个空格,因此两个单词合并后显示正确(见下图)。

调用最后一个 plotshape() 函数后,只要 not closedHigher 表达式为真,我们就会在图表上绘制一个红色(color.red)的向下箭头(shape.arrowdown)。由于有 not 逻辑操作符,只要 closedHigher 为假,该表达式就为真(Pine 脚本语言教程,未注明出处)。

这意味着,只要柱形图没有收得更高(收盘价不变或更低),这些红色箭头就会绘制出来。这些箭头的位置在柱状图的上方(location.upperbar),我们在图表上绘制的文本是 beginText 和 "lower "字符串与 + 的组合。

添加到图表中的指标示例如下:



总结

一串文本称为字符串,字符串可以是字面字符串(如 "enter long"),也可以是保存文本的字符串变量。加法运算符 (+) 通常用于将数字相加,但也可以将字符串字面量和字符串变量相加。这就要求该运算符左边的值和右边的值都是字符串。

因此,在 + 将一个数字添加到另一个字符串之前,首先需要使用 str.tostring() 函数将其转换为字符串。我们可以使用换行符("\n")在字符串中插入新行。

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

返回列表