Skip to content

内置算子

在下文中,XABC表示因子或因子表达式,c 表示常数,n 表示正整数。

zscore:标准分数,通过一个数与平均数的差再除以标准差得到。

数学符号

支持因子与因子、因子与常数间的基础运算,运算逻辑与常规数学规则一致,具体如下:

符号含义
+加法,两个因子或一个因子与一个常数相加
-减法,两个因子或一个因子与一个常数相减
*乘法,两个因子或一个因子与一个常数相乘
/除法,两个因子或一个因子与一个常数相除
**幂,参考 np.power,可以为两个因子或一个因子及一个常数
//整除,两个因子或一个因子与一个常数整除
%取模,两个因子或一个因子与一个常数取模
>大于,两个因子或一个因子与一个常数比较
<小于
>=大于等于
<=小于等于
&与,两个因子或一个因子与一个常数做逻辑与
|或,两个因子或一个因子与一个常数做逻辑或
~非,对因子取反
!=不等于,两个因子或一个因子与一个常数比较

简单算子

处理单因子或双因子的当期 / 基础时间序列逻辑,涵盖数值转换、条件判断、滞后计算等场景:

算子含义
ABS(X)取因子的绝对值
LOG(X)取因子的对数值
EXP(X)ex 次幂,x 指因子值。参考 np.exp
LOG(X)取因子的自然对数
EQUAL(A, B)比较两个因子或一个因子与一个常数
SIGN(X)取因子值的符号,参考 np.sign
SIGNEDPOWER(X, c)计算因子值的 c 次方,保持符号不变;c 为常数
MIN(A, B)AB 两个因子,取其中较小的值
FMIN(A, B)MIN 类似,但当其中一个值为 NaN 时,FMIN返回另一个值,MIN 则相反
MAX(A, B)AB 两个因子,取其中较大的值
FMAX(A, B)MAX 类似,但当其中一个值为 NaN 时,FMAX 返回另一个值,MAX 则相反
IF(C, A, B)当因子 C 值为 True 时,返回因子 A 的值;反之则返回因子 B 的值
AS_FLOAT(X)将因子 X 的值转换为浮点类型
REF(X, n)返回 n 个交易日前 X 的值
DELAY(X, n)REF 的别名
DELTA(X, n)X - REF(X, n)
PCT_CHANGE(X, n)X / REF(X, n) - 1.0

均线算子

专注于时间序列的平滑计算,覆盖动态移动平均、简单移动平均、指数移动平均等常用均线类型:

DMA

  • DMA(X, c) 基于常数权重 c 计算动态平均,公式为:
python
    y[0] = x[0]
    y[i] = y[i-1] * (1 - c) + x[i] * c
  • DMA(A, B) 对于序列abDMA 变换的结果为:
python
    y[0] = a[0]
    y[i] = y[i-1] * (1 - b[i]) + a[i] * b[i]

MA 及 SMA

  • SMA_CN(X, n, m) 国内常用行情软件中的 SMA 算子,相当于 DMA(X, m / n)
  • SMA(X, n) MA 的别名
  • MA(X, n) 简单移动平均,与 talibMA 相同

EMA

  • EMA_CN(X, n) 指数平滑移动平均,相当于 DMA(X, 2 / (N + 1))
  • EMA(X, n) 指数平滑移动平均,返回收盘价 n 个交易日的指数平滑移动平均

WMA

  • WMA(X, n)talibWMA 相同
  • DECAY_LINEAR(X, n) WMA 的别名

横截面算子

RANK

RANK(X, method='average', ascending=True) 对股票池中股票的因子值排序,返回归一化排名(名次 / 总数量)。对于 NaN 值,返回 NaN

  • method: 排名方式,可选 average, min, max, first, dense,其意义与 pandas.DataFrame.rankmethod 字段相同;
  • ascending: 排序方向(True 升序,False 降序),默认为True
  • 例如:RANK(Factor('close'), 'first', True) 返回当日收盘价在过去股票池内的升序排序占比,若多项值相同,则按它们出现在数组中的顺序进行排序;

SCALE

SCALE(X, to=1) 对股票池中的因子值进行缩放,使其绝对值的和等于 to

  • 例如:SCALE(Factor('close'), 10) 给定股票池,将股票池内收盘价量级调整进行调整,使绝对值之和等于 10

DEMEAN

DEMEAN(X) 对股票池中的因子值做中心化处理,从而使得和为 0

  • 例如:DEMEAN(Factor('close')) 给定股票池,返回每只股票的收盘价减去收盘价的均值

CS_ZSCORE

CS_ZSCORE(X) 求股票池中因子值的 zscore

  • 例如:CS_ZSCORE(Factor('close')) 给定股票池,返回收盘价在选定股票池的标准化值

QUANTILE

QUANTILE(X, bins=5, ascending=True) 将因子值按大小划分为 bins 组,返回对应的组序号。参考 pandas.qcut

  • 例如:QUANTILE(Factor('close'), bins = 5, ascending = True) 表示对收盘价按升序分为 5 组

TOP

TOP(X, threshold=50, pct=False) 筛选股票池内 X 排名靠前的标的

  • 当 pct 为 False 时,因子值处于 top threshold 的股票返回 1,其他返回 0;
  • 当 pct 为 True 时,因子值处于前 threshold 百分位的股票返回 1,其他返回 0。
  • 例如:TOP(Factor('close'), threshold=50, pct=False) 在股票池中排名前 50 的返回 1,其余为 0

BOTTOM

BOTTOM(X, threshold=50, pct=False) 与 TOP 类似,取排名较后的

  • 例如:BOTTOM(Factor('close'), threshold=50, pct=False) 在股票池中排名最后 50 的返回 1,其余为 0

INDUSTRY_NEUTRALIZE

INDUSTRY_NEUTRALIZE(X) 对因子 X 进行行业中性化,默认按申万一级行业分类

  • 例如:INDUSTRY_NEUTRALIZE(Factor('close')) 选定股票池,根据申万行业分类对收盘价进行行业中性化处理

CS_REGRESSION_RESIDUAL

CS_REGRESSION_RESIDUAL(Y, *X, add_const=True) 使用一个或多个因子 *X 作为自变量,Y 作为因变量进行回归,返回回归残差

  • 例如:CS_REGRESSION_RESIDUAL (Factor('close'), Factor('open'), Factor('high'))

CS_FILLNA

CS_FILLNA(X)X所属行业均值填充缺失值

FIX

FIX(X, order_book_id) 固定返回因子 X 在标的 order_book_id 的值,如 FIX(Factor('close'), '000300.XSHG') 将总是返回 000300.XSHG 的收盘价。 常用于计算股票与指数关系,如 CORR(PCT_CHANGE(Facotr('close')), FIX(PCT_CHANGE(Factor('close')), '000300.XSHG')) 可计算股票收益率与沪深 300 收益率的相关性。

其他算子

AVEDEV

AVEDEV(X, n) X 最近 n 期因子值与均值的绝对偏差的平均值

STD

STD(X, n) X 最近 n 期因子值的标准差,与 talibSTDDEV 相同

  • 例如:STD(Factor('close'), 10) 表示收盘价 10 个交易日的标准差

STDDEV

STDDEV(X, n) STD 的别名

VAR

VAR(X, n) X 最近 n 期因子值的方差,与 talibVAR 相同

  • 例如:VAR(Factor('close'), 10) 表示收盘价在过去 10 个交易日内的方差

CROSS

CROSS(A, B) (A[i-1] <= B[i-1]) and A[i] > B[i],即 A 从下方穿越 B

  • 例如:CROSS( MA(Factor('close'), 5), MA(Factor('close'), 10)) 返回 5 日均线与 10 日均线交叉

TS_SKEW

TS_SKEW(X, n) 最近 n 期因子值的偏度

  • 例如:TS_SKEW(Factor('close'), 60) 返回收盘价过去 60 个交易日的偏度

TS_KURT

TS_KURT(X, n) 最近 n 期因子值的峰度

  • 例如:TS_KURT(Factor('close'), 60) 返回收盘价过去 60 个交易日的峰度

SLOPE

SLOPE(X, n) 最近 n 期因子值的线性回归斜率,与 talibLINEARREG_SLOPE 相同

SUM

SUM(X, n) 最近 n 期因子值的和

  • 例如:SUM(Factor('volume'), 10) 统计 10 个交易日成交量的总和

PRODUCT

PRODUCT(X, n) 最近 n 期因子值的乘积

  • 例如:PRODUCT(Factor('close'), 10) 表示过去 10 个交易日收盘价的移动平均求积

TS_MIN

TS_MIN(X, n) 最近 n 期因子值的最小值,与 talibMIN 相同

  • 例如:TS_MIN(Factor('close'), 5) 返回过去 5 个交易日中收盘价的最小值

TS_MAX

TS_MAX(X, n) 最近 n 期因子值的最大值,与 talibMAX 相同

  • 例如:TS_MAX(Factor('close'), 5) 返回过去 5 个交易日中收盘价的最大值

LLV

LLV(X, n) TS_MIN 的别名

  • 例如:LLV(Factor('close'), 10) 表示 10 个交易日内收盘价的最小值

HHV

HHV(X, n) TS_MAX 的别名

  • 例如:HHV(Factor('close'), 10) 表示 10 个交易日内收盘价的最大值

TS_ARGMIN

TS_ARGMIN(X, n) 最近 n 期因子值中最小值的位置索引,与 talibMININDEX 相同

  • 例如:TS_ARGMIN(Factor('close'), 5) 返回过去 5 个交易日中收盘价的最小值的位置索引

TS_ARGMAX

TS_ARGMAX(X, n) 最近 n 期因子值中最大值的位置索引,与 talibMAXINDEX 相同

  • 例如:TS_ARGMAX(Factor('close'), 5) 返回过去 5 个交易日中收盘价的最大值的索引

CORR

CORR(A, B, n) 因子 AB 最近 n 期因子值的相关性,与 talibCORREL 相同

  • 例如:CORR(Factor('close'), Factor('open'), 66) 表示过去 66 个交易日收盘价与开盘价的相关系数

CORRELATION

CORRELATION(A, B, n) CORR 的别名

COVARIANCE

COVARIANCE(A, B, n) 因子 AB 最近 n 期因子值的协方差

COV

COV(A, B, n) COVARIANCE 的别名

  • 例如:COV(Factor('open'), Factor('close'), 66) 表示过去 66 个交易日收盘价与开盘价的协方差

COUNT

COUNT(X, n) 最近 n 期因子值中为 True 的数量

EVERY

EVERY(X, n) EQUAL(COUNT(X, n), n)

  • 例如:EVERY(Factor('close') > Factor('open'), 10) 表示若 10 个交易日内一直是阳线,则返回 True,否则返回 False

TS_RANK

TS_RANK(X, n) 最新值在最近 n 期中的排名百分位

  • 例如:如 N=5,今天的 X 排序为 3,则返回 0.6

TS_ZSCORE

TS_ZSCORE(X, n) 最新值在最近 n 期中的 zscore

  • 例如:TS_ZSCORE (Factor('close'), 10) 表示收盘价在过去 10 个交易日的取值作为样本,返回当前交易日收盘价对应的标准分数

TS_REGRESSION

TS_REGRESSION(Y, X, n) 对最新 n 期因子值,使用 Y作为因变量,X作为自变量进行回归,回归系数作为结果

  • 例如:TS_REGRESSION(Factor('close'),Factor('open'),60) 返回收盘价为因变量,开盘价为自变量在过去 60 个交易日的回归参数

TS_FILLNA

TS_FILLNA(X, nv, method='value') 缺失值填充 根据 method 的值,使用不同的方式对缺失值进行填充:

  • value: 将 NaN 替换为 nv
  • MA: 使用前 nv 期非NaN的因子均值填充
  • forward: 向前搜索直到找到非 NaN 的值,但不超过 nv 项,用找到的值填充