AI量化实验室

 找回密码
 立即注册
查看: 271|回复: 4

因子表达式使用帮助

[复制链接]

61

主题

135

帖子

531

积分

管理员

积分
531
发表于 2024-8-9 16:58:33 | 显示全部楼层 |阅读模式
因子是一个策略的核心,无论是传统规则策略,还是机器学习策略,都需要计算因子。
在传统规则策略里,比如“20日动量大于0.08”,这里的”20日动量“,就是一个因子。

在咱们的表达式引擎里,支持内置函数roc,用于计算动量,roc(close,20)就是20日动量,假定我们命名这个因子为roc_20。

在传统规则策略,一个进场信号可以是“roc_20>0.08”即可。
所以,大家只需要了解quantlab内置的函数,就可以构造出自己的因子,当然你也可以扩展自己的函数。
所有的函数都在这里定义的,



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

×

0

主题

9

帖子

44

积分

量化新人

积分
44
发表于 2024-8-27 16:34:34 | 显示全部楼层
本帖最后由 遇见 于 2024-8-27 16:39 编辑

看的一头雾水,因子表达式相关的内置函数,有没有一个列表(带函数使用说明)
当然,最好有个因子表达式教程,能够学习自定义内置函数,更方便使用表达式,是最好的了

0

主题

9

帖子

44

积分

量化新人

积分
44
发表于 2024-8-27 16:54:58 | 显示全部楼层
遇见 发表于 2024-8-27 16:34
看的一头雾水,因子表达式相关的内置函数,有没有一个列表(带函数使用说明)
当然,最好有个因子表达式教 ...

因子表达式相关内置函数

calc_by_date(func)
calc_by_symbol(func)

abs(se)
sqrt(se)
log(se: pd.Series)
inv(x: pd.Series)
rank(se: pd.Series)

ts_argmax(se: pd.Series, periods=5)
ts_argmaxmin(X, d)
ts_rank(se: pd.Series, periods=9)

cross_up(left, right)
cross_down(left, right)

ts_corr(left: pd.Series, right: pd.Series, periods=20)
ts_cov(left: pd.Series, right: pd.Series, periods=10)

ts_dema(X, d)
ts_ema(X, d)
bbands_up(close, timeperiod=20, nbdevup=2, nbdevdn=2)
bbands_down(close, timeperiod=20, nbdevup=2, nbdevdn=2)
ta_atr(high, low, close, period=14)
_obv(close, volume)
ta_obv(close, volume)



sign(se: pd.Series)
scale(x, a=1)
slope_pair(se_left, se_right, N=18)
decay_linear(series, window)
zscore(se: pd.Series, N)
shift(se: pd.Series, N)
roc(se: pd.Series, N)

0

主题

9

帖子

44

积分

量化新人

积分
44
发表于 2024-8-28 15:04:18 | 显示全部楼层
因子表达式相关内置函数  (路径:datafeed/expr_functions/)

calc_by_date(func)装饰器,按照日期分组并应用函数。
calc_by_symbol(func)装饰器,按照股票代码分组并应用函数。


abs(se)                          numpy库中的abs函数,对传入的参数se进行绝对值运算。
sqrt(se)                         np.sqrt(se)表示对se中的每一个元素求平方根。
log(se: pd.Series)          np.log(se)表示计算se中每个元素的自然对数,并返回一个新的numpy数组。
inv(x: pd.Series)            当遇到除以零或者无效的数值操作时,忽略这些错误,而不是抛出异常。
rank(se: pd.Series)        使用pandas的rank方法对传入的Series进行排名

ts_delay(se: pd.Series, periods=5):  # 滞后N天的序列
ts_delta(se: pd.Series, periods=20):  # 当前序列与滞后N天之差
ts_mean(se: pd.Series, d)                 滚动平均值,滚动窗口值=d
ts_median(se: pd.Series, d)              滚动中位数
ts_pct_change(se: pd.Series, N)       每个元素相对于其向前移动N个位置的元素的百分比变化率。
ts_max(se: pd.Series, periods=5)     滚动最大值
ts_min(se: pd.Series, periods=5)      滚动最小值
ts_maxmin(X, d)                             数据X在给定的时间窗口d内的最大值和最小值之间的归一化值
ts_sum(se: pd.Series, N)                 计算滚动窗口内元素的总和
ts_std(se, periods=5)                     滚动标准差
ts_skew(X, d)                                 数据的偏度(skewness)
ts_kurt(X, d)                                  计算滚动窗口内的峰度(Kurtosis)
ts_argmin(se: pd.Series, periods=5)滚动窗口内最小值的索引
ts_argmax(se: pd.Series, periods=5)滚动窗口内最大值的索引   
ts_argmaxmin(X, d)                        计算并返回一个时间序列中最大值和最小值的位置之差。
ts_rank(se: pd.Series, periods=9)    计算给定Series中每个元素的滚动排名。

cross_up(left, right)        金叉
cross_down(left, right)   死叉

ts_corr(left: pd.Series, right: pd.Series, periods=20)   计算两个时间序列(pd.Series类型)之间的滚动相关性。
ts_cov(left: pd.Series, right: pd.Series, periods=10)    计算两个时间序列的协方差

ts_dema(X, d)                                   计算时间序列数据的指数移动平均线(DEMA)
ts_ema(X, d)                                     计算时间序列数据的指数移动平均(Exponential Moving Average,简称EMA)
bbands_up(close, timeperiod=20, nbdevup=2, nbdevdn=2)
                                                       计算股票价格的布林带上轨
bbands_down(close, timeperiod=20, nbdevup=2, nbdevdn=2)
                                                       计算股票价格的布林带下轨
ta_atr(high, low, close, period=14)   计算平均真实波动幅度(ATR)
_obv(close, volume)                         计算股票的"On Balance Volume"(OBV)
ta_obv(close, volume)                       计算股票的成交量加权平均价格


sign(se: pd.Series)                              函数的功能是返回一个新的Series,其中每个元素都是原Series对应元素的符号。
scale(x, a=1)                                      将输入的数组x进行缩放,使得其绝对值之和等于给定的目标值a。
slope_pair(se_left, se_right, N=18)      计算两个序列之间的斜率对,并返回一个包含斜率值的pandas Series对象。
decay_linear(series, window)              对输入的时间序列进行线性衰减。
zscore(se: pd.Series, N)                      计算输入序列的滚动Z分数(滚动均值的标准差)。
shift(se: pd.Series, N)                         对传入的pandas序列se进行移位操作
roc(se: pd.Series, N)                           计算ROC(Rate of Change)值。


def roc(se: pd.Series, N):
    return se / shift(se, N) - 1
具体来说,函数内部执行了以下操作:
调用shift函数,将se序列向下移动N个位置。这是通过shift(se, N)实现的。
将移动后的序列与原始序列se相除,得到一个新的序列。
从新的序列中减去1。
返回最终计算出的结果。

0

主题

9

帖子

44

积分

量化新人

积分
44
发表于 2024-8-28 15:07:02 | 显示全部楼层
遇见 发表于 2024-8-28 15:04
因子表达式相关内置函数  (路径:datafeed/expr_functions/)

calc_by_date(func)装饰器,按照日期分组并应 ...


自力更生,靠讯飞代码解释,把内置函数都注明出来了


具体用在哪里,还有待进一步学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

AI量化实验室 ( 京ICP备16049031号-2 )

GMT+8, 2024-9-20 07:49 , Processed in 0.064953 second(s), 19 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表