mavgTopN

语法

mavgTopN(X, S, window, top, [ascending=true], [tiesMethod='oldest'])

参数说明和窗口计算规则请参考:mTopN

详情

在给定长度(以元素个数衡量)的滑动窗口内,根据 ascending 指定的排序方式将 X 按照 S 进行稳定排序后,取前 top 个元素计算平均值。

例子

X = 1..7
S = 0.3 0.5 0.1 0.1 0.5 0.2 0.4
mavgTopN(X, S, 4, 2)
# output
[1,1.5,2,3.5,3.5,3.5,5]

X = NULL 1 2 3 4 NULL 5
S = 3 5 1 1 5 2 4
mavgTopN(X, S, 4, 2)
# output
[,1,2,2.5,2.5,2.5,3]

X = matrix(1..5, 6..10)
S = 2022.01.01 2022.02.03 2022.01.23 2022.04.06 2021.12.29
mavgTopN(X, S, 3, 2)
#0 #1
1 6
1.5 6.5
2 7
2.5 7.5
4 9
X = matrix(1..5, 6..10)
S = matrix(2022.01.01 2022.02.03 2022.01.23 NULL 2021.12.29,NULL 2022.02.03 2022.01.23 2022.04.06 NULL)
mavgTopN(X, S, 3, 2)
#0 #1
1
1.5 7
2 7.5
2.5 7.5
4 8.5

某行情数据的数据表,包含四列:股票代码 code,交易日期 date,收盘价 close 和交易量 volume。

t = table(take(`IBM`APPL, 20) as code, 2020.01.01 + 1..20 as date, rand(100,20) + 20 as volume, rand(10,20) + 100.0 as close)
code date volume close
IBM 2020.01.02 114 107
APPL 2020.01.03 66 106
IBM 2020.01.04 36 106
APPL 2020.01.05 52 101
IBM 2020.01.06 28 100
APPL 2020.01.07 55 108
IBM 2020.01.08 54 106
APPL 2020.01.09 103 106
IBM 2020.01.10 94 104
APPL 2020.01.11 82 102
IBM 2020.01.12 98 103
APPL 2020.01.13 118 101
IBM 2020.01.14 61 105
APPL 2020.01.15 43 105
IBM 2020.01.16 41 104
APPL 2020.01.17 111 106
IBM 2020.01.18 119 103
APPL 2020.01.19 24 107
IBM 2020.01.20 22 109
APPL 2020.01.21 26 103

计算每只股票窗口期内交易量最大的3条记录的的平均收盘价。

select code, date, mavgTopN(close, volume, 5, 3, false) from t context by code
code date mavgTopN_close
APPL 2020.01.03 106
APPL 2020.01.05 103.5
APPL 2020.01.07 105
APPL 2020.01.09 106.6667
APPL 2020.01.11 104.6667
APPL 2020.01.13 103
APPL 2020.01.15 103
APPL 2020.01.17 104.3333
APPL 2020.01.19 103
APPL 2020.01.21 104
IBM 2020.01.02 107
IBM 2020.01.04 106.5
IBM 2020.01.06 104.3333
IBM 2020.01.08 106.3333
IBM 2020.01.10 105.6667
IBM 2020.01.12 104.3333
IBM 2020.01.14 104
IBM 2020.01.16 104
IBM 2020.01.18 103.3333
IBM 2020.01.20 103.6667

相关函数:mavg