高阶函数

介绍

DolphinDB内置的高阶函数,可以扩展或增强函数或者运算符的功能。高阶函数以一个函数与数据对象作为输入内容,类似于一个函数和数据之间的管道。通常,输入数据首先以一种预设的方式被分解成多个数据块(可能重叠),然后将函数应用于每个数据块,最后将所有的结果组合为一个对象返回。高阶函数的输入数据可以是向量、矩阵或者表,也可以是标量或字典。通过使用高阶函数,某些复杂的分析任务可以用几行代码就可以高效地完成。

语法

高阶函数总是与运算符、用户自定义函数或者系统函数共同使用。所有的高阶函数符号以冒号开头,之后紧跟一个大写字母。

templateFunctionName (<functionName>, functionParameter1, …functionParameterN)

<functionName> :<template symbol> functionParameter

functionParameter1 <functionName> :<template symbol> functionParameter2

DolphinDB中,所有高阶函数的第一个参数必须是一个函数名,不可以是一个函数名数组。如果想要在多个函数上运行多个高阶函数,需要在高阶函数中使用 call 高阶函数。详情请见 call

注意:高阶函数的第一个参数会被强制解析为函数,所以module中的自定义函数(命名或匿名)在不指定module名称时,仍然可以在高阶函数正常解析。

高阶函数总结

下面的表中,总结了高阶函数的名字和应用场景。

符号

函数名

应用范围

典型应用

:E

each

二元运算符,一元运算符,函数调用

多因子Alpha策略回测

peach

并行版本的each

:R

eachRight

二元运算符

:L

eachLeft

二元运算符

:P

eachPre

二元运算符

国内股票行情数据导入实例

:O

eachPost

二元运算符,函数调用

pivot

函数调用

原始数据或分组聚合结果进行行列转置

:A

accumulate

二元运算符,函数调用

:T

reduce

二元运算符,函数调用

:G

groupby

函数调用,二元运算符

最简最快的WorldQuant 101 Alpha因子实现

:C

cross

二元运算符,函数调用

多因子Alpha策略最佳因子权重

pcross

并行版本的cross

高频数据处理技巧:数据透视的应用

:M

moving

函数调用(聚合函数),二元运算符

寻找相似的历史k线

loop

二元运算符,一元运算符,函数调用,混合返回类型

DolphinDB文本数据加载教程

all

二元运算符,函数调用

any

二元运算符,函数调用

call

二元运算符

通常与each函数配合使用,实现同时调用一批函数

pcall

并行版本的call

:X

contextby

函数调用,二元运算符

分组内进行指定的计算

segmentby

函数调用,二元运算符

技术信号回测

rolling

函数调用,二元运算符

计算APPL相对于市场(SPY)的beta值

withNullFill

二元运算符

使用特定值替换Null值参与计算

byRow

函数调用

矩阵按行计算

分解和组装规则

通常来说,一个向量被分解成多个标量,一个矩阵被分解成多列(向量),一个表被分解成多行(字典)。

在组装阶段,标量类型合并组成一个向量,向量合并成一个矩阵,字典合并成一张表。

高阶函数按元素遍历向量,按列遍历矩阵,按行遍历表。