15年122倍,年化43.58%,回撤才20%,Optuna机器学习多目标调参backtrader,附python代码

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

今天咱们继续策略优化:年化提升至35.31%,回撤30%,卡玛比1.17,通过趋势评分、动量及成交量变化的复合因子,附python代码

使用optuna机器学习调参来优化策略表现。

在Backtrader中使用Optuna进行多参数优化,可以更高效地找到最佳参数组合。

复制代码
import optuna
from backtrader_engine import Task, Engine

def objective(trial):    # 建议参数范围    P1 = trial.suggest_int('P1',10, 32, step=1)    P2 = trial.suggest_int('P2', 10, 32, step=1)    P3 = trial.suggest_int('P3', 10, 32, step=1)    P4 = trial.suggest_int('P4', 10, 32, step=1)

    t = Task()    t.name = '多资产轮动-趋势评分'    # 排序    t.period = 'RunDaily'    t.weight = 'WeighEqually'    # 添加风险控制

    t.order_by_signal = f'trend_score(close,{P1})+roc(close,{P2})*0.03+ma(volume,{P3})/ma(volume,{P4})*0.1'
    t.symbols = [        '518880.SH',  # 黄金ETF        '513100.SH',  # 纳指100        '159915.SZ',  # 创业板        '510300.SH',  # 沪深300        # 新增        # '512690.SH',  # 酒ETF - 消费轮动        # '515000.SH',  # 科技ETF - 科技主线        # '512880.SH',  # 券商ETF - 市场情绪        # '510500.SH',  # 中证500 - 中盘成长        # '159980.SZ',  # 有色ETF - 周期品    ]    t.benchmark = '510300.SH'    e = Engine(path='quotes')
    # t.order_by_signal = 'trend_score(close,$P)'.replace('$P', str(p))    strategy_results = e.run(t)[0]    # 获取分析结果
    sharpe_ratio = strategy_results.analyzers.sharpe.get_analysis()    drawdown = strategy_results.analyzers.drawdown.get_analysis()    returns = strategy_results.analyzers.returns.get_analysis()
    # 计算目标值(综合考量夏普比率和回撤)    sharpe_value = sharpe_ratio.get('sharperatio', 0)    max_drawdown = drawdown.get('max', {'drawdown': 100}).get('drawdown', 100)
    # 避免除零错误    if max_drawdown == 0:        max_drawdown = 0.1
    # 综合评分:夏普比率越高越好,回撤越小越好    composite_score = sharpe_value * (1 - max_drawdown / 100)
    # 设置试验属性以便后续分析    trial.set_user_attr('final_value', e.cerebro.broker.getvalue())    trial.set_user_attr('max_drawdown', max_drawdown)    trial.set_user_attr('sharpe_ratio', sharpe_value)
    return composite_score

if __name__ == '__main__':    # 创建研究    study = optuna.create_study(        direction='maximize',  # 最大化综合评分        sampler=optuna.samplers.TPESampler(seed=42)    )
    # 开始优化    study.optimize(objective, n_trials=100)
    # 输出最佳结果    print("\n=== 优化结果 ===")    print(f'最佳试验: {study.best_trial.number}')    print(f'最佳参数:')    for key, value in study.best_trial.params.items():        print(f'  {key}: {value}')    print(f'最佳目标值: {study.best_trial.value:.4f}')    print(f'最终资产: {study.best_trial.user_attrs["final_value"]:.2f}')    print(f'夏普比率: {study.best_trial.user_attrs["sharpe_ratio"]:.4f}')    print(f'最大回撤: {study.best_trial.user_attrs["max_drawdown"]:.2f}%')

如果需要同时优化多个目标(如同时最大化收益和最小化回撤),可以使用Optuna的多目标优化功能:

复制代码
# 多目标优化示例def multi_objective(trial):    # ... 参数定义和回测代码与前面相同 ...
    return final_value, -max_drawdown  # 同时返回多个目标
# 创建多目标研究study = optuna.create_study(    directions=['maximize', 'minimize']  # 最大化最终价值,最小化回撤)

参数优化技巧

  1. 动态参数范围:根据参数关系调整搜索空间

  2. 早停机制:使用Optuna的剪枝功能避免无效试验

  3. 并行优化 :利用n_jobs参数加速优化过程

注意事项

  1. 过拟合风险:避免在过多参数上进行过度优化

  2. 前视偏差:确保优化数据与验证数据分离

  3. 交易成本:在回测中考虑佣金和滑点的影响

这个框架可以灵活地扩展到更复杂的策略和更多的参数。你可以根据需要调整目标函数、参数范围以及评估指标,以获得符合你风险偏好的最佳参数组合。

每天"不管"一点点,每天就变强一天天。

代码和数据下载:AI量化实验室------2025量化投资的星辰大海

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

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

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

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

相关推荐
老刘说AI1 分钟前
Coze:从入门到精通
人工智能·低代码·语言模型·开放原子·知识图谱·持续部署
qq_白羊座3 分钟前
Langchain、Cursor、python的关系
开发语言·python·langchain
小陈的进阶之路3 分钟前
接口Mock测试
python·mock
kiku18186 分钟前
Python网络编程
开发语言·网络·python
IT观测8 分钟前
选高低温环境试验箱,品牌、生产商、厂家哪个维度更可靠?
大数据·人工智能
isNotNullX9 分钟前
BI如何落地?BI平台如何搭建?
大数据·数据库·人工智能
新新学长搞科研10 分钟前
【多所权威高校支持】第五届新能源系统与电力工程国际学术会议(NESP 2026)
运维·网络·人工智能·自动化·能源·信号处理·新能源
zncxCOS11 分钟前
【ETestDEV5教程30】ICD操作之信号组操作
python·测试工具·测试用例·集成测试
枫叶林FYL11 分钟前
第八章 长上下文建模与位置编码优化 (Long Context Modeling) 8.1 位置编码外推技术
人工智能
砍材农夫11 分钟前
spring-ai 第八模型介绍-图像模型
java·人工智能·spring