Skip to content

变量

在 Navi Stream 中我们有 3 种关键字来存储值:letvarvarip

变量声明的语法是:

其中:

  • declaration_mode - 是变量模式,我们可以使用 letvarvarip 3 种。
  • type - 用于声明变量类型,如 numberstring(可选参数)。
  • identifier - 变量名。
  • expression - 变量的值,可以是任何表达式。

let

let 用于定义一个可变变量,类似于 JavaScript 中的 let

INFO

我们在 Navi Stream 中没有可变和不可变类型,所以你可以随时更改变量的值。

nvs

你可以随时为变量赋新值。

nvs

var

var 用于流处理,它类似于 let,但是在每个周期结束时重置为初始值。

TIP

var 是一个周期性的 let,它的值只在每个周期结束时才固定,其他时间它会重置为周期开始时的值。

下面的示例展示了如何使用 var 来计算当前周期:

nvs

当我们运行这段代码后),我们可以得到以下结果:

idxbar
10
20
30
40
51
61
71
81
91
102

上面的结果符合 5m 周期规则,你可以看到 var 变量的值只在最后一个 5m 结束时才确定。

下面的流程图展示了 var 变量的变化:

varip

varip 用于流处理,它类似于 var,但是在每个周期结束时重置为初始值,并且在每个周期结束时输出一个值。

Use case

idxtimepricevolume
110:00100.25300
210:01100.50200
310:02100.75100
410:03101.00300
510:04101.25200
610:05101.50100
710:06101.75300
810:07102.00200
910:08102.25100
1010:09102.50300
1110:10102.75200

现在,我们想要计算每个周期(5m)的总量,我们可以使用 varip 来计算:

nvs

如果我们计算它,我们可以得到:

idxtotal_amount
1300
2500
3600
4900
51100
61200
71500
81700
91800
102100
112300

barstate.is_confirmed

WARNING

Navi Stream 的计算周期有点特殊,每个周期(期间)的最后一个数据将被计算两次,最后一个数据将在确认模式下计算一次。

在最后一个数据是,barstate.is_confirmed 的状态为 true,所以我们可以判断它,以避免 total_amount 被计算两次。

我们期望只在每个周期结束时输出数据,所以我们可以这样写:

nvs

这样一来,Navi Stream 将会发送 alert,如下所示:

idxtotal_amount
5"total_amount 1100"
11"total_amount 2300"