BigQuant使用文档

表达式函数

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

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}