在输入列表上迭代函数 (Q/KDB)

Iterate function over list of inputs (Q/KDB)

我有一个函数 f[symbol;date0;date1] ,还有一个日期范围,比如说

2017.12.04
2017.12.05
2017.12.06

我想 运行 给定交易品种的这个函数 - 假设 "AAPL" - 每天一次。本质上:

f[AAPL;2017.12.04;2017.12.04]
f[AAPL;2017.12.05;2017.12.05]
f[AAPL;2017.12.05;2017.12.05]

这个函数 returns a table,所以我希望每个日期都附加到之前的结果中。执行此操作的最佳方法是什么?

假设 f 为每次调用生成相同的列,那么您可以将结果夷为平地

q)f:{([]1#x;1#y;1#z)};
q)raze f'[`a;3#.z.d;3#.z.d-1]
x y          z
-----------------------
a 2018.02.07 2018.02.06
a 2018.02.07 2018.02.06
a 2018.02.07 2018.02.06

结果是[更大]table,结果相互附加

这种形式的函数的最佳方法是使用通用形式的 kdb each-both

d:2017.12.04 2017.12.05 2017.12.06

f'[`AAPL;d;d]

kdb 识别原子第一个参数和列表第二个参数,并按顺序将函数应用于每个参数。您也可以使用 raze 按顺序加入每个 table:

raze f'[`AAPL;d;d]

然后 returns 单个连接 table,如果架构相同。