Py学习  »  Python

季度优选策略:年化145%,夏普2.58,回撤21%,5积分可查看策略参数 | deap因子挖掘系统python代码发布

七年实现财富自由 • 2 月前 • 130 次点击  
原创内容第1014篇,专注AGI+,AI量化投资、个人成长与财富自由。

明月几时有?把酒问青天。

不知天上宫阙,今夕是何年。

我欲乘风归去,又恐琼楼玉宇,高处不胜寒。

起舞弄清影,何似在人间。


转朱阁,低绮户,照无眠。

不应有恨,何事长向别时圆?

人有悲欢离合,月有阴晴圆缺,此事古难全。

但愿人长久,千里共婵娟。

《水调歌头·明月几时有》· 苏轼
西北望乡何处是,东南见月几回圆。
昨风一吹无人会,今夜清光似往年。
季度优选策略:年化145%,夏普2.58,回撤21%
策略地址:

http://www.ailabx.com/strategy/68d5020cd023d4225f509b81

继续deap因子挖掘框架的优化。

回测roc(low-2030)回测ts_argmax(ts_argmax(shift(ts_min(close*525), 5), 5), 20)回测ts_argmax(high+ts_argmin(high, 40)*4025)回测roc(close*high-2530)回测ts_argmax(ts_max(low, 5), 30)回测ts_argmax(open*4030)回测roc(ts_argmax(shift(ts_min(ts_argmin(high+open5), 25), 5), 5), 20)回测low/40回测ts_argmax(open*4025)回测ts_argmax(low*4025)回测ts_argmax(open*3025)回测ts_argmax(ts_argmin(open+205)*4025)回测ts_argmax(high+open*2025)100%|██████████| 42/42 [00:57<00:00,  1.36s/it][(np.float64(0.10995394170666328),), (np.float64(0.16062468319023337),), (np.float64(0.1294917159107123),), (np.float64(0.15599733116392978),), (np.float64(0.097866507140137),), (np.float64(0.08739382549965424),), (np.float64(0.1149561323071675),), (np.float64(0.10976038324229487),), (np.float64(0.11726512324352023),), (np.float64(0.12002225121233767),), (np.float64(0.14983263913601497),), (np.float64(0.07814158484872391),), (np.float64(0.1149561323071675),), (np.float64(0.06282097525146346),), (np.float64(0.05872432771887004),), (np.float64(0.05270703830191481),), (np.float64(0.15105884232813205),), (np.float64(0.14983263913601497),), (np.float64(0.0802239797162283),), (np.float64(0.06002950981921851),), (np.float64(0.06398200094792994),), (np.float64(0.11073416959713422),), (np.float64(0.10834546278044943),), (np.float64(0.16062468319023337),), (np.float64(0.10596689556202388),), (np.float64(0.04176307455015538),), (np.float64(0.08700065115521194),), (np.float64(0.12752585523697268),), (np.float64(0.08700065115521194),), (np.float64(0


    
.0948777025189329),), (np.float64(0.07011668572046625),), (np.float64(0.12287256988527973),), (np.float64(0.07014610594097404),), (np.float64(0.10678697725540909),), (np.float64(0.09598350460895055),), (np.float64(0.10271075698807741),), (np.float64(0.0802239797162283),), (np.float64(0.08700065115521194),), (np.float64(0.097866507140137),), (np.float64(0.08700065115521194),), (np.float64(0.1337976299550776),), (np.float64(0.10298669067168698),)]{'ts_argmax(low, 30)': np.float64(0.2645635973140159), 'ts_argmax(high+open*30, 25)': np.float64(0.2645635973140159), 'ts_argmax(high+open*40, 25)': np.float64(0.2645635973140159), 'ts_argmax(low/high+open, 25)': np.float64(0.2645635973140159), 'roc(open*high-20, 120)': np.float64(0.26283162629674517), 'ts_argmin(open+20, 5)-30': np.float64(0.25377965361984667), 'ts_argmax(open/close, 20)/ts_argmin(high+open, 40)': np.float64(0.22108661379291172), 'ts_argmax(low, 25)': np.float64(0.19523061072765335), 'low/20': np.float64(0.18693295297448653), 'roc(ts_argmax(shift(ts_min(close*5, 25), 5), 5), 20)': np.float64(0.16987331593202004), 'ts_argmax(close*5*40, 25)': np.float64(0.16707295447190162), 'sum(stddev(ts_min(sum(close, 40), 40), 120), 120)': np.float64(0.16062468319023337), 'ts_argmax(open*25, 25)': np.float64(0.1541661744279661), 'ts_argmax(open*40, 25)': np.float64(0.1541661744279661), 'ts_argmax(ts_min(close*5, 10)*40, 25)': np.float64(0.15105884232813205), 'ts_argmax(open/close, 20)/ts_argmin(high+open, 5)': np.float64(0.1473819159492742), 'ts_argmax(ts_argmin(open+20, 5)*40, 25)': np.float64(0.12752585523697268), 'sum(low, 120)': np.float64(0.10995394170666328), 'ts_argmax(high+open*10, 25)': np.float64(0.10976038324229487), 'ts_argmax(high+open*40, 40)': np.float64(0.0802239797162283)}{'avg': array([0.22980368]), 'std': array([0.04809951]), 'min': array([0.08022398]), 'max': array([0.2645636])}
from deap import base, creator, gp

creator.create("FitnessMax", base.Fitness, weights=(1.0,))def init_tool_box():
        # 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 deap_factor.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)
        from deap_factor.backtest import backtester        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))        return toolbox
if __name__ == '__main__':    from deap_factor import utils    from deap import tools    import numpy as np    my_tool_box = init_tool_box()    # 这里定义初始化的因子数,可以得行修改    print('开始生成因子...')    pop = my_tool_box.population(10)    for p in pop:            print(utils.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)    #print(stats)    from deap_factor.deap_patch import *  # noqa    population, logbook = eaMuPlusLambda(pop, my_tool_box,                                         # 选多少个做为下一代,每次生成多少新个体                                         mu=150, lambda_=100,                                         # 交叉率、变异率,代数                                         cxpb=0.5, mutpb=0.1, ngen=3,                                         # 名人堂参数                                         # alpha=0.05, beta=10, gamma=0.25, rho=0.9,                                         stats=stats, halloffame=hof, verbose=True,                                         # 早停                                         early_stopping_rounds=5)

代码已经发布至星球:

代码下载地址:

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

标普红利ETF?

首先,我们需要明确分析对象:

  • 底层指数: 标普中国A股红利机会指数(S&P China A-Share Dividend Opportunities Index)。

  • 核心策略: 它不是简单地选择股息率最高的股票,而是设有一套更严谨的规则:

  1. 流动性筛选: 确保成分股有足够的交易量。

  2. 盈利要求: 公司过去12个月的净利润必须为正,确保分红的可持续性。

  3. 股息增长: 要求公司过去3年的股息支付率不能为0,鼓励稳定或增长的分红。

  4. 高股息筛选: 从符合上述条件的公司中,挑选出股息率最高的100只股票。

  5. 行业与权重限制: 对单个行业和个股设置权重上限(分别为33%和3%),以分散风险,避免过度集中在某个板块。

吾日三省吾身
暂定一个目标,日更到3000篇,差不多是6年。
加上前面日更的3年,基本做到连续9-10年做一件事情,挺有意思。
写作可以帮助思考与沉淀。
“如果你现在财务自由了,你会不上班么?”
站在今天的视角,这个问题还真不太好回答。
客观讲,偶尔有一些不爽的事情,不过基本上还是在做自己喜欢的事情。
技术方面,技术管理,前沿技术的探索。
技术决策的空间。
反过来想,早早退休,做什么呢?我估计还是找个地方写代码,或者看代码?会么?也许会减少写代码本身,但关注技术前沿,整合落地应用,本身一直是很感兴趣的事情。
尤其是现在AGI的进展。
所以,财务自由,本身只是“当你不想工作的时候,可以不工作”。而不是“一定不工作”。
每天“不管”一点点,每天就变强一天天。
代码和数据下载:AI量化实验室——2025量化投资的星辰大海

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

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


点击 “查看原文”,直接访问策略集合

扩展  •  历史文章   


年化390%,回撤7%,夏普6.32 | A股量化策略配置

年化30.24%,最大回撤19%,综合动量多因子评分策略再升级(python代码+数据)

年化429%,夏普5.51 | 全A股市场回测引擎构建

年化443%,回撤才7%,夏普5.53,3积分可查看策略参数

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/187474