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

相关推荐
java_logo3 小时前
vllm-openai Docker 部署手册
运维·人工智能·docker·ai·容器
倔强青铜三3 小时前
苦练Python第67天:光速读取任意行,linecache模块解锁文件处理新姿势
人工智能·python·面试
算家计算3 小时前
重磅突破!全球首个真实物理环境机器人基准测试正式发布,具身智能迎来 “ImageNet 时刻”
人工智能·资讯
新智元3 小时前
苹果 M5「夜袭」高通英特尔!AI 算力狂飙 400%,Pro 三剑客火速上新
人工智能·openai
GoppViper3 小时前
什么是GEO生成式引擎优化?GEO科普:定义、原理与应用指南
人工智能·搜索引擎
新智元3 小时前
谷歌 × 耶鲁联手发布抗癌神器!AI 推理精准狙击「隐身」癌细胞
人工智能·openai
勤源科技3 小时前
运维知识图谱的构建与应用
运维·人工智能·知识图谱
我是华为OD~HR~栗栗呀4 小时前
华为od-21届考研-C++面经
java·c语言·c++·python·华为od·华为·面试
明月(Alioo)4 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习