单因子年化23.7%,基于deap的因子挖掘,我改进了fitness和metrics方案(附python代码和数据)

原创文章第626篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。

我们目前投入使用的因子挖掘,基于两个框架,deap和gplearn,deap做一点点改动,就可以完美应用于多标的截面因子挖掘。而gplearn如果要支持三维数据,则需要很多改动,但gplearn的优点是代码读起来很顺畅。

——也许我会考虑把gplearn应用于单标的,比如CTA的时序因子挖掘

从结果来看,传统研报里说的IC分析,其实不科学。IC就是因子与收益率的平均相关系数。这个相关系数只能说,可能说能解释一部分,有一定的关系,但关系是什么?如果你把时间分成两段来看,有可能前半段正相关,后半段负相关,然后一平均,看起来这个值还可以。

数据说话,我用全球大类资产,使用咱们quantlab的deap框架挖掘出来的。

直接使用单因子回测来挖掘因子——metrics为年化收益和卡玛比率

图片

直接回测看收益表现:

图片

这个因子是:'sqrt(log(ts_delta(volume, 20)))'

再来一个因子:rank(sqrt(volume))——成交额的截面排序因子

图片

这部分代码在:

图片

更新后的回测函数:

def backtester(self,evaluate, inds):
    names, features = [], []
    for i, expr in enumerate(inds):
        names.append(f'GP_{i:04d}')
        features.append(stringify_for_sympy(expr))

    features = [f.lower() for f in features]
    df = CSVDataloader.calc_expr(self.df.copy(deep=True), fields=features, names=names)
    # df.set_index([df['symbol'], df.index], inplace=True)

    import bt
    from bt_algos_extend import SelectTopK
    close = CSVDataloader.get_col_df(df, 'close')
    all = []

    for f in names:
        if f in df.columns:
            signal = CSVDataloader.get_col_df(df, f)

            for K in [1]:
                s = bt.Strategy('{}'.format(f), [
                    bt.algos.RunWeekly(),
                    SelectTopK(signal, K),
                    bt.algos.WeighEqually(),
                    bt.algos.Rebalance()])
                all.append(s)

    stras = [bt.Backtest(s, close) for s in all]
    res = bt.run(*stras)
    stats = res.stats
    print(stats.loc['cagr'])

    results = []
    for name in names:
        if name not in df.columns:
            results.append((0,0))
        else:
            results.append((stats.loc['cagr'][name],stats.loc['calmar'][name]))
    return results

后续我们再扩展更多算子,talib的函数来提升因子挖掘效果。

图片

吾日三省吾身

人生是旷野,而不是轨道。

时间一路向前,但人生并不是一条既定的轨道——你永远有的选。

这是上次我同一个创业的朋友说起的话题。

我的建议是,如果你是因为看好这个事情,那就坚持,但如果是因为没有选择,那就需要重新思考。人生永远有的选,至少你可以提前开始准备。

我们当下的状态,位置,是三年前或者五年前的认知、行动所决定的。

你不可能迅速改变它。

但你可以让三年、五年后的生活,如你所愿。

也许你要问,如此不确定的当下,计划都赶不上变化,大家又都说选择大于努力,那要做什么呢?

未来是一个开阔的旷野,你不必执着于某一个目标。

这里分享一个“人生设计课”里的“奥德赛计划”(《奥德赛》是古希腊诗人荷马的代表作,讲述了奥德修斯海上漂流的故事,作者借此隐喻人生如一场探险。)。

图片

制定自己的三个五年计划,每个计划提出2-3个问题。

比如,当前的工作状态,继续往前走,这是一个最常规的计划(需要考虑如果环境有一些变动,如何应对,比如新的方向人工智能大模型——让AI发挥价值)。

比如计划2,你还可以加入量化私募公司,成为职业投资者(让AI在投资里发挥价值,当然不只是AI)。

计划3:成为自由作家(金融,财经,科技,成长),讲书人,独立研究者?——不是所谓自媒体那种,而是作品驱动,比如通过海量阅读,观察,思考,产出有价值的系列作品。

这就是旷野的逻辑,比如计划1里方向还可以有特别多,但这就算一种计划。

也许都不容易,但你会让自己感觉永远有的选,而且看起来差异很大,人就是这么有弹性,你能做的事情,比你想象中要多得多。

早上有同学问,关于续期的事情(提前90天有福利):

图片

历史文章:

自研“因子流水线”之遗传算法的交叉与变异的python代码实现

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

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
脑电情绪识别是一种利用脑电图信号来判断人类情绪状态的方法。基于deap数据集的脑电情绪识别可以通过构建生成对抗网络(GAN)和条件GAN(CGAN)模型来实现。 首先,我们需要使用python编程语言,使用PyTorch等深度学习框架来构建模型。我们可以使用deap数据集,该数据集包含大量被试者的脑电信号和相应的情绪标签。可以通过加载数据集并预处理数据来准备训练和测试集。 接下来,我们可以构建GAN模型。GAN模型由生成器和判别器组成。生成器负责生成合成脑电图信号,以模拟真实的情绪状态。判别器则负责判断输入的脑电图信号是真实的还是合成的。通过对抗训练的方式,生成器和判别器相互竞争,最终生成器可以生成接近真实情绪状态的脑电图信号。 在构建CGAN模型时,我们可以使用情绪标签作为条件输入。这样生成器和判别器可以在生成和判别时考虑情绪标签的信息,提高情绪识别的性能。在训练过程中,我们可以将情绪标签与脑电图信号一起输入网络,使模型能够更好地学习情绪和脑电图信号之间的关系。 最后,我们可以使用训练好的模型进行情绪识别。通过将待识别的脑电图信号输入到已经训练好的生成器或判别器中,模型可以预测出对应的情绪状态。可以根据模型输出的情绪标签进行进一步的分析和应用,比如情绪监测、情感识别等。 总之,基于deap数据集的脑电情绪识别可以通过构建GAN和CGAN模型实现。这些模型可以帮助我们理解脑电信号与情绪之间的关系,并为情绪识别和相关领域的研究提供支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI量化投资实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值