社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

七年实现财富自由 • 9 月前 • 233 次点击  
原创内容第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