分享

DeepAlphaGen:强化学习的因子组合挖掘:框架代码+数据下载

 AI量化实验室 2023-10-25 发布于北京

原创文章第364篇,专注“个人成长与财富自由、世界运作的逻辑与投资"。

2018年,看到机会,但没有知行合一,2020左右完成建仓。

2023年,我看到的是机会,这次争取知行合一。

今天开始深度学习挖因子。

前面的文章开了个头:DeepAlphaGen:强化学习的因子组合挖掘

主流的公、私募量化,多因子模型是重中之重和热点方向。容量大,可以与前沿技术相结合。

东方证券的一张图:多因子选股体系

多因子选股体系主要包括 Alpha 模型、风险模型、交易成本模型和组合优化四个模块。Alpha 模型负责对股票收益或 Alpha 的预测,对组合收益的影响相对更大,是量化研究的重中之 重。传统的 Alpha 模型一般分为 Alpha 因子库构建和 Alpha 因子加权两个核心步骤。

其中:在 Alpha 因子构建中,可以引入的常见机器学习模型主要有两大类:遗传规划和神经网络

先挖掘因子,再合成,忽略了因子之间的相互作用。

今天开始要代码实现的:一种新的因子组合挖掘框架,直接使用因子组合的表现来优化一个强化 学习因子生成器,最终生成的是一组公式因子集合,这些因子协同使用具有较高的选股效力。这 样做既能保留遗传规划算法公式化的优势,也能提升模型泛化能力,适应多种股票池,还能大幅 提升运算效率。

论文上周已经在星球里分享,代码后续会跟上。

【优惠券】知识星球与开源项目:万物之中,希望至美

我对这篇论文感兴趣的核心在于,它具备一定程度上的通用性,集传统遗传规划的优点,可以显示生成表达式,结果了深度学习的泛化能力和端到端的能力。另外,原作者是提供代码的,不过它使用qlib的数据库,我进行了拆分,与咱们的开源项目,数据模块整合起来,让这个模块更加通用。

核心代码在Quantlab工程的如下位置:alphagen。

代码环境,需要:pytorch框架上的强化学习包:

stable_baselines3==2.0.0
sb3_contrib==2.0.0

核心的调用代码如下:

json
os
datetime datetime
typing Optional

numpy np
sb3_contrib MaskablePPO
stable_baselines3.common.callbacks BaseCallback

alphagen.data.calculator AlphaCalculator
alphagen.models.alpha_pool AlphaPoolAlphaPoolBase
alphagen.rl.env.core AlphaEnvCore
alphagen.rl.env.wrapper AlphaEnv
torch

alphagen.rl.policy LSTMSharedNet
alphagen.utils reseed_everything
alphagen.caculator.duckdb_caculator DuckdbCalculator
(seed: = pool_capacity: = steps: = instruments: = ):
    calculator_train = DuckdbCalculator(=instruments==)
    calculator_valid = DuckdbCalculator(=instruments==)
    calculator_test = DuckdbCalculator(=instruments==)

    pool = AlphaPool(
        =pool_capacity=calculator_train==)

    reseed_everything(seed)

    device = torch.device()
    env = AlphaEnv(=pool=device=)

    name_prefix = instrumentspool_capacityseedtimestamp = datetime.now().strftime()

    checkpoint_callback = CustomCallback(
        ====calculator_valid=calculator_test=name_prefix=timestamp=)

    model = MaskablePPO(
        env=(
            =LSTMSharedNet=(
                ====device))=====device=)
    model.learn(
        =steps=checkpoint_callback=name_prefixtimestamp)

其中DuckdbCaculator是我们实现的。

就是根据表达式计算因子,IC值等等。

使用了sb3的强化学习扩展包里的MaskablePPO算法

明天继续。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多