时间序列这个概念在Pine语言中非常重要,是我们学习Pine语言时必须要弄明白的一个概念。

时间序列不是一种类型而是用于随时间存储变量的连续值的基本结构,我们知道Pine脚本是基于图表的,图表中展示的最基本的内容就是K线图。时间序列其中每个值都与一个K线Bar的时间戳关联。open是一个Pine语言的内置变量(built-in),其结构为储存每根K线Bar开盘价的时间序列。
可以理解为open这个时间序列结构代表了当前K线图从开始的第一根Bar到当前脚本执行的这根Bar时所有K线Bar的开盘价。如果当前K线图是5分钟周期,那么我们在Pine策略代码中引用(或者使用)open时就是在使用策略代码当前执行时的K线Bar的开盘价。
如果要引用时间序列中的历史值需要使用[]操作符。当Pine策略在某根K线Bar上执行时,使用open[1]表示引用open时间序列上当前脚本执行的这根K线Bar的前一根K线Bar的开盘价(即上一个K线周期的开盘价)。

时间序列上的变量非常方便用于计算,我们以内置函数ta.cum举例子:
ta.cum
Cumulative (total) sum of `source`. In other words it’s a sum of all elements of `source`.
ta.cum(source) → series float
RETURNS
Total sum series.
ARGUMENTS
source (series int/float)
SEE ALSO
math.sum
测试代码:
v1 = 1
v2 = ta.cum(v1)
plot(v1, title=”v1″)
plot(v2, title=”v2″)
plot(bar_index+1, title=”bar_index”)

有很多类似ta.cum这样的内置函数可以直接处理时间序列上的数据,例如ta.cum就是把传入的变量在每个K线Bar上对应的值累加起来,接下来我们使用一个图表来方便理解。

可以看到,其实v1、v2甚至bar_index都是时间序列结构,在每根Bar上都有对应的数据。这个测试代码不论用“实时价模型”还是“收盘价模型”区别仅仅为图表上是否显示实时Bar。
因为v1这个变量在每一根Bar上都是1,ta.cum(v1)函数在第一根K线Bar上执行时由于只有第一根Bar,所以计算结果为1,赋值给变量v2。

时间序列上的变量也可以使用运算符进行运算,例如代码:ta.sma(high – low, 14),把内置变量high(K线Bar最高价)减去low(K线Bar最低价),最后使用ta.sma函数求平均值。
开始部分我们总结过一些FMZ上的Pine和Trading View上的Pine语言使用方面的不同点,FMZ上的Pine代码编写时可以省略版本号、indicator()、strategy()、并且暂时不支持library()。当然为了兼容较早版本的Pine脚本,策略编写时写上诸如://@version=5,indicator(),strategy()也是可以的。一些策略设置也可以在strategy()函数中传参设置。
Pine语言使用//作为单行注释符,由于Pine语言没有多行注释符。FMZ扩展了注释符/**/用于多行注释。

Pine语句可以以多种方式排列:
1、有些语句可以用一行来表达,比如大多数变量声明、只包含一个函数调用的行或单行函数声明。其他的,像结构,总是需要多行,因为它们需要一个局部的块。
2、脚本的全局范围内的语句(即不属于局部块的部分)不能以空格或制表符(tab键)开始。它们的第一个字符也必须是该行的第一个字符。在行的第一个位置开始的行,根据定义成为脚本的全局范围的一部分。
3、结构或多行函数声明总是需要一个local block。一个本地块必须缩进一个制表符或四个空格(否则,会被解析为上一行的串联代码,即被判定为上一行代码的连续内容),每个局部块定义了一个不同的局部范围。
4、多个单行语句可以通过使用逗号(,)作为分隔符在一行中串联起来。
5、一行中可以包含注释,也可以只是注释。
6、行也可以被包起来(在多行上继续)。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/75138
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!