volumeBar

New in version 2.00.9.

语法

volumeBar(X, interval, [label=’seq’])

参数

X 是数值型向量。

interval 非零的数值,表示一个定值或百分比。

label 为标记分组的方法,有以下三种类型:

  • ‘seq’:默认值,表示按 0, 1, 2, 3… 的顺序标记组号。

  • ‘left’:当前分组第一个元素前所有元素的累加和作为组号。第1个分组的组号为 0。

  • ‘right’:X 从第一个元素开始累加到当前分组中最后一个元素的值作为组号。

详情

X 进行累加,并根据指定的阈值进行分组,返回数据所属分组的组号。分组规则为:

依次累加 X 中的元素

  • 若阈值为正数,则累加和大于等于阈值的所有数据划分为一组。

  • 若阈值为负数,则累加和小于等于阈值的所有数据划分为一组。

然后从下一个元素重新开始累加,并分组,以此类推,最后剩下的元素不管累加和是否大于等于阈值,都划为一组。

interval 确定了累加分组的阈值,可以是一个定值也可以是一个百分比:

  • 当 interval ∈ (0, 1) 时, 表示一个百分比,阈值为 sum(X) * interval。注意,系统会将阈值转换为与 X 相同的类型再进行比较。例如,X 是整型,则累加和将与 floor(sum(X) * interval)进行比较。

  • 否则,interval 表示一个定值,即阈值为 interval。

例子

$ X =  1 3 4 2 2 1 1 1 1 6 8
$ volumeBar(X, 4)
[0,0,1,2,2,3,3,3,3,4,5]

$ volumeBar(X, 4, 'left')
[0,0,4,8,8,12,12,12,12,16,22]

$ volumeBar(X, 4, 'right')
[4,4,8,12,12,16,16,16,16,22,30]

$ X = -6 2 -4 -5 -1 3 -2 -1
$ volumeBar(X, -2)
[0,1,1,2,3,3,3,3]

$ volumeBar(X, -2, 'left')
[0,-6,-6,-8,-13,-13,-13,-13]

$ volumeBar(X, -2, 'right')
[-6,-8,-8,-13,-14,-14,-14,-14]

$ securityID = `st001`st002`st001`st002`st001`st002
$ time = 2022.01.01 2022.01.01 2022.01.02 2022.01.02 2022.01.03 2022.01.03
$ price = 30.15 30.21 30.09 30.13 30.18 30.16
$ volume = 190 212 198 211 205 199
$ t = table(securityID, time, price, volume)

//每支股票根据 volume 的累加和分组,统计各分组的平均价格。
$ select avg(price) from t group by securityID, contextby(volumeBar{, 400}, volume, securityID) as cumVol
securityID cumVol avg_price
st001 0 30.14
st002 0 30.17
st002 1 30.16