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 |