时间序列

Pine Script™ 的大部分功能源于其旨在高效处理时间序列这一事实。时间序列不是一种合格的类型;它们是 Pine Script™ 用于存储变量随时间变化的连续值的基本结构,其中每个值都与某个时间点相关联。由于图表由条形图组成,每个条形图代表特定的时间点,因此时间序列是处理可能随时间变化的值的理想数据结构。

时间序列的概念与 Pine Script™ 的 执行模型类型系统概念密切相关。理解这三个概念是充分利用 Pine Script™ 功能的关键。

以内置的 open 变量为例,它包含数据集中每个条形图的“开盘”价格,数据集是任何给定图表上的所有条形图。如果您的脚本在 5 分钟图上运行,则 开盘 时间序列中的每个值都是连续 5 分钟图条形图的“开盘”价格。当您的脚本引用 open时,它指的是脚本正在执行的条形图的“开盘”价格。要引用时间序列中的过去值,我们使用 [] 历史引用运算符。当脚本在给定条形图上执行时, 指的是前一个条形图的开盘open[1]时间序列的值

虽然时间序列可能会让程序员想起数组,但它们完全不同。Pine Script™ 确实使用数组数据结构,但它与时间序列是完全不同的概念。

Pine Script™ 中的时间序列与其特殊类型的运行时引擎和内置函数相结合,使得 无需使用 for 循环,只需 即可轻松计算收盘价的累计总和。这是可能的,因为尽管 在脚本中看起来相当静态,但它实际上是在每个条上执行的,因此随着 每个新条的收盘 价添加到其中,其值变得越来越大。当脚本到达图表最右边的条时,返回 图表上所有条的收盘价之和 。ta.cum(close)ta.cum(close)ta.cum(close)

类似地,最近 14 个高值 与低值之间的差值的平均值 可以表示为ta.sma(high - low, 14),或者自上次图表连续出现五个更高的高点以来的条形距离表示为 barssince(rising(high, 5))

即使对连续柱进行函数调用的结果也会在时间序列中留下一些值,可以使用 []历史引用运算符来引用这些值。例如,当测试当前柱的收盘 是否突破过去 10 个柱中的最高 (但不包括当前柱)时, 这可能很有用 ,我们可以将其写为breach = close > highest(close, 10)[1]。同样的语句也可以写为breach = close > highest(close[1], 10)

所有条形图上的相同循环逻辑都应用于函数调用,例如 将在每个条形图上重复,在图表上连续绘制每个条形图的开盘plot(open)

不要将“时间序列”与“series”限定词混淆。时间序列概念解释了变量的连续值如何存储在 Pine Script™ 中;“series”限定词表示变量的值可以逐条更改。例如,考虑 timeframe.period 内置 变量,它具有“simple”限定词和“string”类型,这意味着它属于“simple string”限定类型。“simple”限定词意味着变量的值是在零条柱(脚本执行的第一个条柱)上建立的,并且在脚本在任何图表条柱上执行期间不会更改。变量的值是字符串格式的图表时间范围,例如"D" 对于 1D 图表。即使它的值在脚本期间无法更改,在 Pine Script™ 中,使用 来引用 10 条柱之前的值在语法上是正确的(尽管不是很有用) timeframe.period[10]。这是可能的,因为每个条形图的timeframe.period的连续值 都存储在时间序列中,即使该特定时间序列中的所有值都相同。但请注意,当 使用[]运算符访问变量的过去值时,它会产生一个“series”限定值,即使没有偏移量的变量使用不同的限定符,例如timeframe.period 中的“simple”

当您掌握如何使用 Pine Script™ 的语法及其 执行模型有效地处理时间序列时,您可以使用少量代码定义复杂的计算。

Original text
Rate this translation
Your feedback will be used to help improve Google Translate