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积分可查看策略参数

相关推荐
reasonsummer12 小时前
【教学类-97-06】20251105“葡萄”橡皮泥黏贴(小班主题《苹果与橘子》)
python
chenzhiyuan201812 小时前
《十五五规划》下的AI边缘计算机遇:算力下沉与工业智能化
人工智能·边缘计算
whaosoft-14312 小时前
51c深度学习~合集11
人工智能
Tiandaren12 小时前
大模型应用03 || 函数调用 Function Calling || 概念、思想、流程
人工智能·算法·microsoft·数据分析
卖个几把萌12 小时前
【16】Selenium+Python 接管已打开谷歌浏览器
python·selenium·测试工具
像风一样的男人@13 小时前
python --两个文件夹文件名比对(yolo 图和label标注比对检查)
windows·python·yolo
领航猿1号13 小时前
Pytorch 内存布局优化:Contiguous Memory
人工智能·pytorch·深度学习·机器学习
lllsure13 小时前
【Python】Dict(字典)
开发语言·python
综合热讯13 小时前
宠智灵宠物识别AI:从犬猫到鸟鱼的全生态智能识别
人工智能·宠物
zskj_zhyl13 小时前
智慧康养新篇章:七彩喜如何重塑老年生活的温度与尊严
大数据·人工智能·科技·物联网·生活