volumeBar

语法

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