重构后的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)!