DeepAlpha通用因子挖掘:支持GPlearn遗传算法和深度强化学习挖掘因子(代码+数据下载)

今天的几项工作:

1、策略模板统一化,统一的json,部分策略模板。

2、创业板择时策略,本地回测。 

3、网页策略回测。 

4、网页策略保存。 

5、Django-Apscheduler,调度策略运行,结果入mongo。 

6、代码发布。

图片

代码已经发布至星球,请大家请往下载更新:

AI量化实验室——2024量化投资的星辰大海

策略配置统一化后的代码:

 几点改进,统一一个模板,可以配置所有策略。

数据加载统一走“universe”文件夹,不区分etf,股票,指数还是期货。

class Task:
    name: str = '策略名称'
    desc: str = '策略描述'

    # 标的池
    symbols: list[str] = field(default_factory=list)

    algo_period: str = 'RunDaily'
    algo_period_days: int = 20  # 仅当RunDays时需要

    # 规则选标的:当rules_buyrules_sell至少有一条规则时,添加SelectBySignal算子, 在SelectAll之后
    rules_buy: list[str] = field(default_factory=list)  # roc(close,20)>0.08
    at_least_buy: int = 1
    rules_sell: list[str] = field(default_factory=list)  # roc(close,20)<0
    at_least_sell: int = 1

    # 排序算子:当order_by不为空时,在选股之后,添加SelectTopK算子
    order_by: str = ''  # 比如roc(close,20),或者 roc(close,20)+ slope(close,20)
    topK: int = 1
    dropN: int = 0
    b_ascending: bool = False  # 默认降序

    # 仓位分配,默认等权
    algo_weight: str = 'WeightEqually'
    algo_weight_fix: list = field(default_factory=list)  # WeightFix时需要

    feature_names: list = field(default_factory=list)  # roc(close,20)
    features: list = field(default_factory=list)  # roc_20


    def load_datas(self):
        logger.info('开始加载数据...')  #
        loader = CSVDataloader(DATA_DIR.joinpath('universe'), self.symbols, start_date=self.start_date,
                               end_date=self.end_date)
        df = loader.load(fields=self.features, names=self.feature_names)
        df['date'] = df.index
        df.dropna(inplace=True)
        return df

        return None

    def get_algos(self):
        algos = []
        algos.append(self._parse_period())
        algos.append(SelectAll())
        if len(self.rules_buy) or len(self.rules_sell):
            algos.append(SelectBySignal(rules_buy=self.rules_buy,
                                        buy_at_least_count=self.at_least_buy,
                                        rules_sell=self.rules_sell,
                                        sell_at_least_count=self.at_least_sell
                                        ))

        if len(self.order_by):
            algos.append(SelectTopK(factor_name=self.order_by, K=self.topK, drop_top_n=self.dropN,
                                    b_ascending=self.b_ascending))

        algos.append(self._parse_weights())
        return algos

在新模板下,实现“创业板择时策略”——是不是更加简洁了?

from engine.engine import Engine
from engine.task import Task

t = Task()
t.name = '创业板动量择时'
t.symbols = ['159915.SZ']  # 创业板指数
t.features = ['roc(close,20)']
t.feature_names = ['roc_20']

t.rules_buy = ['roc_20>0.08']
t.rules_sell = ['roc_20<0']

图片

图片

年化20%, 回撤18.8%,还不错的——动量策略,永远的神。

代码在这里:

图片

3、我们在网页系统里测试一下看看效果:

在咱们网站上回测结果一样:

图片

4、策略发布到网站后台:

5、Django-APScheduler自动调度策略。

历史文章:

AI量化策略平台化:Django-Allauth会员管理(代码+数据)

DeepAlpha通用因子挖掘:支持GPlearn遗传算法和深度强化学习挖掘因子(代码+数据下载)

AI量化实验室——2024量化投资的星辰大海

原创文章第462篇,专注“AI量化投资、个人成长与财富自由”。

按惯性每周五咱们会迭代版本,今天也不例外。

年前咱们更新到quantlab3.6:

Quantlab3.6:后续产品化的思考

Quantlab3.5代码发布:因子表达式及Alpha158因子库实现 | 超参数优化(代码+数据)

本周的重点是gplearn在因子挖掘上的应用,重点是CTA场景。

gplearn遗传算法应用于CTA因子挖掘:手把手教程(代码+数据下载)

gplearn系列:使用因子rank ic评估因子性能(代码+数据)

大家知道,原生的GPLearn并不适合挖掘因子,主要存在以下几个问题:

1、gplearn只支持单标的,在CTA策略单标的可以,但单标的下挖掘的因子,很容易过拟合。

2、内置的函数不适合金融量化因子,需要自己扩展。而且原生的扩展,不支持常数项,比如SMA(10),这个10就是常数。

3、原生的fitness是ic和Rank IC,不支持夏普比或者卡玛比率这种。

4、而且网上能用的代码有限,版本鱼龙混杂,不成体系,或者文档不全。

5、传统的因子挖掘方法大多基于遗传规划(Genetic Programming)方法,这类方法具有收敛速度慢、超参数难以调优等局限;

网上的代码都是“暴改”之后的,且没有文档,demo未必能跑通。

我给大家跑通了一份,但是基于qlib的,与DeepAlpha同构,后续以这份代码为蓝本了。

大家直接pip install -r requirements.txt即可(python 3.8)

图片

图片

基于A股的qlib数据也会打包给大家,置于~/.qlib/qlib_data/cn_data_rolling目录下:

图片

图片

代码已经发布至星球:AI量化实验室——2024量化投资的星辰大海

1、支持GPLearn, DSO以及强化学习的版本。

2、数据目前的A股全量数据,qlib格式。

3、支持多支股票同时挖掘。

4、支持多因子联合评测。

图片

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

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

相关推荐

发表回复

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