代码重构

优化“特征表达式“

def expr_transform(df, expr):
# close/shift(close,5) -1
for col in df.columns:
expr = expr.replace(col, 'df["{}"]'.format(col))
return expr


def calc_expr(df: pd.DataFrame, expr: str):
if expr in list(df.columns):
return df[expr]

expr = expr_transform(df, expr)
se = eval(expr)
# shift(close,1) -> shift(df['close'],1)
return se

作为AI量化引擎,一个好的因子引擎非常重要

在qlib的表达式的基础上,我做了优化,我们的引擎可以引用计算好的字段。这个qlib是做不到的。

比如我先计算了max_5=5天的最高值,然后再向右shift1天。

df['max_5'] = calc_expr(df, 'max(close,5)')
df['max_5_1'] = calc_expr(df, 'shift(max_5,1)')
print(df)

准备好的功能,我们来复现qlib的alpha158,158个因子。

添加函数 greater, less:

def np_pair(func, series_left, series_right):
    return getattr(np, func)(series_left, series_right)


def greater(left, right):
    return np_pair('maximum', left, right)


def less(left, right):
    return np_pair('minimum', left, right)

重构了工程目录,加了使用说明,同时使用git来管理工程:

图片

examples/下有策略的案例:

图片

作为起步,动量20长期看还是yyds。

图片

今天重点是调了总体程序的结构,整理了代码。

因为我们是要长期升级与维护这份代码。

对portfolio进行了重写,之前我是直接调仓。没有考虑价格,直接使用的收益率,也没有考虑收续费。当前的代码借用了部分pybroker的核心逻辑,但没有使用做空的部分。后续如果要考虑期货或者加密货币时会引用,这里也留好的扩展。

核心代码补充了一些用例,具体还要再看下,如何让核心代码尽快稳定下来。

我们之所以要重写,一是要兼容机器学习一堆因子,这个pyBroker使用indicator的模式就不好维护了,另外也无法传入benchmark信息。这些我们都做好的扩展。

一些感悟:

最近最内的新闻,大事小事着实不少。

大家都不容易。

有点危机感是好的,当然不必过于忧虑,车到山前必有路。——都是体验。

量化无论怎么着,不需要依赖太多人的协作,说实话也依赖不了。

也不改太担心别人恶搞,因为没有人能与市场对抗。

重要的事情是你如何提升你的认知,与市场共舞。

机器学习的WFA算法,然后就是如何找到有效的因子,如何寻找最优参数,如何避免过拟合——机器学习最担心的就是过拟合。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/104115
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注