表达式函数

由small_q创建,最终由qxiao 被浏览 272 用户

BigQuant的DAI数据平台提供了许多字段运算的表达式函数,完整的函数在这个文档(DAI SQL 函数列表),我们这篇文档总结了一些常见的表达式

1. DAI数据平台表达式函数的使用

1.1 输入特征模块中使用表达式函数

DAI数据平台封装的表达式函数,需要在可视化模式下的“输入特征(DAI SQL)”模块中的“表达式特征”一栏中填写,之后再连接数据抽取模块就可以把该表达式的计算抽取出来

例如,我们以5日平均收盘价m_avg(close, 5)为例

1.2 将表达式函数计算出来的字段命名

我们可以给表达式函数计算出来的字段命名,在表达式函数写好后,我们在后面加上一个空格,再加上AS 新名字,就完成了对计算字段的命名

例如,我们想计算5日平均收盘价,并起名为“close_avg_5”,就可以写为m_avg(close, 5) AS close_avg_5

1.3 将字段命名为临时变量

临时变量(哑变量)的作用是只在表达式运算的过程中,起到中间变量的作用,并不会出现在最终数据抽取的结果中,将变量命名为临时变量,只需在给它起的名前加一个下划线即可

例如,我们想计算5日平均收盘价为临时变量,并起名为“_close_avg_5”,就可以写为m_avg(close, 5) AS _close_avg_5,之后我们按照这个临时变量把全市场股票排序,计算出c_rank(_close_avg_5)

从最终的提取结果我们可以看到,_close_avg_5作为一个中间变量并没有被提取出来

\

2. 时序计算函数与截面计算函数

2.1 时序计算函数与截面计算函数的区别

金融数据都是从两个维度进行展开的:时间维度&标的维度

时序计算指的是,对于同一标的,不同时间的数据进行操作,例如:

  • 对于贵州茅台一只股票,求过去5天收盘价的平均
  • 对于贵州茅台一只股票,求过去20天的收益率
  • 对于贵州茅台一只股票,求MACD指标(TA-Lib指标)

截面计算指的是,对于同一时间,不同标的的数据进行操作,例如:

  • 2024-04-30这一天,全市场股票的收盘价的平均
  • 2024-04-30这一天,全市场股票的收盘价的降序排名名次
  • 2024-04-30这一天,全市场股票的

以下一张图展示了时序计算函数与截面计算函数的区别

2.2 DAI数据平台的时序运算函数

DAI平台封装的时序运算函数都是以m_开头的,并且函数的参数中基本都要填入窗口大小这个参数,常见的有(只展示部分典型,全部请参考DAI SQL 函数列表):

函数 功能
m_lag(字段, 窗口大小) 时间序列上,字段向历史的偏移值
m_lead(字段, 窗口大小) 时间序列上,字段向未来的偏移值
m_sum(字段, 窗口大小) 时间序列上,字段在时间窗口中的求和
m_product(字段, 窗口大小) 时间序列上,字段在时间窗口中的求积
m_avg(字段, 窗口大小) 时间序列上,字段在时间窗口中的平均
m_stddev(字段, 窗口大小) 时间序列上,字段在时间窗口中的标准差
m_variance(字段, 窗口大小) 时间序列上,字段在时间窗口中的方差
m_skewness(字段, 窗口大小) 时间序列上,字段在时间窗口中的偏度
m_kurtosis(字段, 窗口大小) 时间序列上,字段在时间窗口中的峰度
m_covar_samp(字段1, 字段2,窗口大小) 时间序列上,字段1和字段2在时间窗口中的协方差
m_corr(字段1, 字段2,窗口大小) 时间序列上,字段1和字段2在时间窗口中的相关系数
m_max(字段, 窗口大小) 时间序列上,字段在时间窗口中的最大值
m_min(字段, 窗口大小) 时间序列上,字段在时间窗口中的最小值
m_rank(字段, 窗口大小) 时间序列上,字段在时间窗口中的升序排名
m_pct_rank(字段, 窗口大小) 时间序列上,字段在时间窗口中的升序百分比排名

2.3 DAI数据平台的截面运算函数

DAI平台封装的截面运算函数都是以c_开头的,而且基本不需要指定窗口大小,常见的有(只展示部分典型,全部请参考DAI SQL 函数列表):

函数 功能
c_sum(字段) 在截面上,所有标的字段的求和
c_avg(字段) 在截面上,所有标的字段的平均
c_std(字段) 在截面上,所有标的字段的标准差
c_var(字段) 在截面上,所有标的字段的方差
c_rank(字段) 在截面上,所有标的字段的升序排名
c_pct_rank(字段) 在截面上,所有标的字段的升序百分比排名
c_cbins(字段, 组数) 在截面上,所有标的按照字段排名后分成等大小的组

\

3. DAI平台的其他常用表达式函数

3.1 运算符

表达式计算中是支持加减乘除这样的简单运算符的,常见的有

运算符 功能 用例
+ 加法 close + open
- 减法 close - open
* 乘法 close * 2
/ 除法 volume / amount
** 或 ^ 指数 close ^ 2
() 括号 (high + low) / 2

3.2 简单标量计算

简单标量计算函数可以在所有数字类型的字段上使用,而且不分截面或者时序

函数 功能
abs(X) X的绝对值
exp(X) e的X次方
log(底数, X) X的以自定义底数为底的对数
ln(X) X的以e为底的对数
log10(X) X的以10为底的对数
log2(X) X的以2为底的对数
pow(X, Y) 或 power(X, Y) X的Y次方
least(X, Y) 返回X与Y当中的小者
greatest(X, Y) 返回X与Y当中的大者

3.3 三元表达式

在DAI数据平台中,三元表达式是使用IF(条件, X, Y)的格式来定义的,含义是如果条件满足,则为X,如果条件不满足,则为Y

我们来看两个例子:

  • IF(close < m_lag(close, 1), 1, 0):如果今日收盘价小于昨日收盘价,就标记一个1,否则就标记一个0
  • IF(float_market_cap > 2500000000, 2500000000, float_market_cap):如果流通市值大于25亿,我就将流通市值标为25亿的上界,否则就为流通市值的原始值

在DAI数据平台中,我们有以下逻辑运算符

运算符 功能 用例
= 或 == 判断是否等于 close = open
!= 判断是否不等于 close != open
< 判断是否小于 close < open
<= 判断是否小于等于 close <= open
> 判断是否大于 close > open
>= 判断是否大于等于 close >= open
& 且 close > open & float_market_cap > 2500000000
|| 或 close > open || float_market_cap > 2500000000
IN 判断是否在一系列的值当中 instrument IN (‘600519.SH‘, ‘000001.SZ‘, ‘000002.SZ‘)
() 括号 (close > open || close > m_lag(close, 1)) & high != low
LIKE ‘%A‘ 判断字符串是否以A结尾(前面无所谓) instrument LIKE ‘%SH‘
LIKE ‘A%‘ 判断字符串是否以A开头(后面无所谓) instrument LIKE ‘3%‘
LIKE ‘%A%‘ 判断字符串是否包括A(前后都无所谓) name LIKE ‘%酒%’

\

标签

数据处理
评论
  • 2.3 描述 “DAI平台封装的时序运算函数都是以
  • 感谢
{link}