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] * cDMA(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项,用找到的值填充