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]

应用 volumeBar 函数生成等量 K 线。

time = [09:30:00, 09:32:15, 09:35:00, 09:37:30, 09:40:00, 09:45:00, 09:47:30, 09:50:00, 09:55:00, 10:00:00]
price = [100.0, 100.1, 100.05, 99.9, 100.2, 100.15, 100.1, 100.05, 100.0, 99.95]
volume = [200, 800, 250, 300, 1200, 250, 180, 400, 600, 350]
t = table(time, price, volume)

select 
    first(time) as barStartTime,
    first(price) as open,
    max(price) as high,
    min(price) as low,
    last(price) as close,
    sum(volume) as totalVolume
from t 
group by volumeBar(tradeVolume, 1500) as volumeBarNo
volumeBarNo barStartTime open high low close totalVolume
0 09:30:00 100 100.1 99.9 99.9 1,550
1 09:40:00 100.2 100.2 100.1 100.1 1,630
2 09:50:00 100.05 100.05 99.95 99.95 1,350