Appearance
内置算子
在下文中,X
、A
、B
、C
表示因子或因子表达式,c
表示常数,n
表示正整数。
zscore:标准分数,通过一个数与平均数的差再除以标准差得到。
数学符号
支持因子与因子、因子与常数间的基础运算,运算逻辑与常规数学规则一致,具体如下:
符号 | 含义 |
---|---|
+ | 加法,两个因子或一个因子与一个常数相加 |
- | 减法,两个因子或一个因子与一个常数相减 |
* | 乘法,两个因子或一个因子与一个常数相乘 |
/ | 除法,两个因子或一个因子与一个常数相除 |
** | 幂,参考 np.power,可以为两个因子或一个因子及一个常数 |
// | 整除,两个因子或一个因子与一个常数整除 |
% | 取模,两个因子或一个因子与一个常数取模 |
> | 大于,两个因子或一个因子与一个常数比较 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
& | 与,两个因子或一个因子与一个常数做逻辑与 |
| | 或,两个因子或一个因子与一个常数做逻辑或 |
~ | 非,对因子取反 |
!= | 不等于,两个因子或一个因子与一个常数比较 |
简单算子
处理单因子或双因子的当期 / 基础时间序列逻辑,涵盖数值转换、条件判断、滞后计算等场景:
算子 | 含义 |
---|---|
ABS(X) | 取因子的绝对值 |
LOG(X) | 取因子的对数值 |
EXP(X) | e 的 x 次幂,x 指因子值。参考 np.exp |
LOG(X) | 取因子的自然对数 |
EQUAL(A, B) | 比较两个因子或一个因子与一个常数 |
SIGN(X) | 取因子值的符号,参考 np.sign |
SIGNEDPOWER(X, c) | 计算因子值的 c 次方,保持符号不变;c 为常数 |
MIN(A, B) | 对A 、B 两个因子,取其中较小的值 |
FMIN(A, B) | 与 MIN 类似,但当其中一个值为 NaN 时,FMIN 返回另一个值,MIN 则相反 |
MAX(A, B) | 对A 、B 两个因子,取其中较大的值 |
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)
对于序列a
、b
,DMA
变换的结果为:
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)
简单移动平均,与talib
中MA
相同
EMA
EMA_CN(X, n)
指数平滑移动平均,相当于DMA(X, 2 / (N + 1))
EMA(X, n)
指数平滑移动平均,返回收盘价 n 个交易日的指数平滑移动平均
WMA
WMA(X, n)
与talib
中WMA
相同DECAY_LINEAR(X, n)
WMA
的别名
横截面算子
RANK
RANK(X, method='average', ascending=True)
对股票池中股票的因子值排序,返回归一化排名(名次 / 总数量)。对于 NaN
值,返回 NaN
。
- method: 排名方式,可选 average, min, max, first, dense,其意义与
pandas.DataFrame.rank
中method
字段相同; - 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
期因子值的标准差,与 talib
中 STDDEV
相同
- 例如:
STD(Factor('close'), 10)
表示收盘价 10 个交易日的标准差
STDDEV
STDDEV(X, n)
STD
的别名
VAR
VAR(X, n)
X
最近 n
期因子值的方差,与 talib
中 VAR
相同
- 例如:
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
期因子值的线性回归斜率,与 talib
中 LINEARREG_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
期因子值的最小值,与 talib
中 MIN
相同
- 例如:
TS_MIN(Factor('close'), 5)
返回过去 5 个交易日中收盘价的最小值
TS_MAX
TS_MAX(X, n)
最近 n
期因子值的最大值,与 talib
中 MAX
相同
- 例如:
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
期因子值中最小值的位置索引,与 talib
中 MININDEX
相同
- 例如:
TS_ARGMIN(Factor('close'), 5)
返回过去 5 个交易日中收盘价的最小值的位置索引
TS_ARGMAX
TS_ARGMAX(X, n)
最近 n
期因子值中最大值的位置索引,与 talib
中 MAXINDEX
相同
- 例如:
TS_ARGMAX(Factor('close'), 5)
返回过去 5 个交易日中收盘价的最大值的索引
CORR
CORR(A, B, n)
因子 A
及 B
最近 n
期因子值的相关性,与 talib
中 CORREL
相同
- 例如:
CORR(Factor('close'), Factor('open'), 66)
表示过去 66 个交易日收盘价与开盘价的相关系数
CORRELATION
CORRELATION(A, B, n)
CORR
的别名
COVARIANCE
COVARIANCE(A, B, n)
因子 A
及 B
最近 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
项,用找到的值填充