自学内容网 自学内容网

重构后的deap因子挖掘,多股票截面因子轮动,直接优化年化收益率。(附python代码)

原创内容第773篇,专注量化投资、个人成长与财富自由。

上周我们通过“策略组合”完成风险平价系列的策略,年化接近20%,回撤控制在8%以内。

aitrader_v3.2代码发布:含波动率组合策略,年化19.3%(python代码+数据)

本周星球的核心工作给大家汇报一下:

1、deap遗传算法因子挖掘在多资产轮动策略里的应用代码。 

2、flask+mongo重构后端。 

3、ionic+react开发app:策略列表,策略详情,创建组合策略功能。 

如果有时间,看一下网格策略。

重构后的deap因子挖掘:

图片

直接回测得到收益率:

图片

代码本周五统一提交:AI量化实验室——2024量化投资的星辰大海

 

from deap import base, creator, gp

import numpy as np
from alpha.deap_patch import * # noqa
# 创建一个新类 FitnessMax,参数weights:(1.0,),就是最大化
from alpha import *

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
# creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax)

from deap import base, creator, tools

creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMax)

toolbox = base.Toolbox()
from alpha.init_pset import get_pset

pset = get_pset()
toolbox.register("expr", gp.genHalfAndHalf, pset=pset, min_=1, max_=5)
toolbox.register("individual", tools.initIterate, creator.Individual, toolbox.expr)
# print(toolbox.individual())
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

toolbox.register("evaluate", print) # 、,在map中一并做了

toolbox.register("select", tools.selTournament, tournsize=3) # 目标优化
# toolbox.register("select", tools.selNSGA2) # 多目标优化 FITNESS_WEIGHTS = (1.0, 1.0)
toolbox.register("mate", gp.cxOnePoint)
toolbox.register("expr_mut", gp.genFull, min_=0, max_=2)
toolbox.register("mutate", gp.mutUniform, expr=toolbox.expr_mut, pset=pset)

toolbox.register('map', backtester)

import operator

toolbox.decorate("mate", gp.staticLimit(key=operator.attrgetter("height"), max_value=17))
toolbox.decorate("mutate", gp.staticLimit(key=operator.attrgetter("height"), max_value=17))

pop = toolbox.population(10)

for p in pop:
print(stringify_for_sympy(p))

hof = tools.HallOfFame(10)
# 只统计一个指标更清晰
stats = tools.Statistics(lambda ind: ind.fitness.values)
# 打补丁后,名人堂可以用nan了,如果全nan会报警
stats.register("avg", np.nanmean, axis=0)
stats.register("std", np.nanstd, axis=0)
stats.register("min", np.nanmin, axis=0)
stats.register("max", np.nanmax, axis=0)

# 使用修改版的eaMuPlusLambda
population, logbook = eaMuPlusLambda(pop, toolbox,
# 选多少个做为下一代,每次生成多少新个体
mu=150, lambda_=100,
# 交叉率、变异率,代数
cxpb=0.5, mutpb=0.1, ngen=2,
# 名人堂参数
# alpha=0.05, beta=10, gamma=0.25, rho=0.9,
stats=stats, halloffame=hof, verbose=True,
# 早停
early_stopping_rounds=5)

print('=' * 60)
print(logbook)

后端选型:flask + flask-admin + mongo

由于我们使用了前后端分离的设计,那么django的优势就没有特别多了。首选是django-allauth这一套用户登录、注册,前后端分享用不上了,django-admin和ORM只支持sql,发挥不了no sql的优势。

因此,从这个角度,更轻量和灵活的flask及flask-admin就被启用。

mongo不需要预定义schema,很适合金融量化场景。

对一个已经存在的mongo表进行CURD的管理——不需要表结构,也不需要migrations维护字段。

当然如果想使用ORM,mongo的解决方案是mongoengine(ODM)。

# 定义自定义 ModelView
from flask_admin.contrib.pymongo import ModelView
from flask_admin.contrib.pymongo.filters import BooleanEqualFilter
from flask_admin.model import typefmt
from wtforms import form, fields, validators


# 自定义 ModelView
class ETFModelView(ModelView):
    column_list = ("_id", "name", "symbol","list_date")  # 定义要显示的字段
    column_sortable_list = ("name",)  # 定义可排序的字段
    column_filters = (BooleanEqualFilter(column="active", name="Active"),)  # 定义过滤器
    can_create = True
    can_edit = True
    can_delete = True

    # 定义表单字段
    class Form(form.Form):
        name = fields.StringField("Name", [validators.DataRequired()])
        email = fields.StringField("Email", [validators.DataRequired()])
        active = fields.BooleanField("Active")

    # 实现 scaffold_form 方法
    def scaffold_form(self):
        return self.Form

    # 实现 scaffold_list_columns 方法
    def scaffold_list_columns(self):
        return self.column_list

    # 实现 scaffold_sortable_columns 方法
    def scaffold_sortable_columns(self):
        return {"name": "name"}


def init_app(admin, db):
    admin.add_view(ETFModelView(db.basic_etf, name="ETF列表"))

图片

吾日三省吾身

一夜多梦。

回顾毕业这20年,想想,如果回到大学时代,回到大学毕业那个路口,遇到年轻时候的自己,你会尝试对那时的自己说什么呢?

做什么样的改变?积累和认知呢?

(不能带未来函数,尤其是金融属性,比如买彩票,股票,房子之类的)。

如果说读书,其实大学时代开始就有逛书店的习惯,计算机,人工智能,经管,金融都读。

甭管功利性阅读还是非功利性阅读,其实有在读书。

但当时确实没有建立被动收入,财富自由的概念。只是隐约觉得,如果能够有一个自己的小平台,可以有持续收入,那么就是自由的状态。也确实一直在为之努力。

——只有你本金到一定量级的时候,你才对钱和投资有了概念,才知道年化10%已经很厉害且非常有价值了。(七年翻一番,20年8倍,如果你本金是200万起步,20年后至少是1600万)

关于写作或者广义的内容创作,倒是一个点。但早年的web2.0时代,写过互联网日志,没有坚持下来,因为没有特别的反馈。

开发过不少软件,没有产品化,很少商业化。

其实都是一个积累,量变到质变的过程。

现在互联网的基础设施,用户支付习惯都已形成。

超级个体和一人企业才逐步成为可能。

代码与数据下载地址:AI量化实验室——2024量化投资的星辰大海

AI量化实验室 星球,已经运行三年多,1300+会员。

aitrader代码,含几十个策略源代码,因子表达式引擎、遗传算法(Deap)因子挖掘引等,支持vnpy,qlib,backtrader和bt引擎,名内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。

图片

扩展  •  历史文章   

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)

10年17倍:使用卡曼滤波过滤器优化动量和斜率策略(python代码策略下载)

年化16%,最大回撤7.5%,卡玛比率超过2的实盘策略(附python代)

aitrader_v3.2代码发布:含波动率组合策略,年化19.3%(python代码+数据)


原文地址:https://blog.csdn.net/weixin_38175458/article/details/145259068

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!