readme.md和代码均由AI生成
这是一个用于回测ETF投资策略的Python程序,可以帮助投资者评估不同投资策略的绩效表现,支持中文显示和ETF中文名称映射。
- 策略回测:支持基于目标权重的调仓策略回测
- 绩效分析:计算并比较策略组合与买入持有策略的绩效指标
- 可视化展示:
- 投资组合价值对比图(策略组合 vs 买入持有策略)
- ETF贡献组合价值图(展示各ETF对组合价值的贡献)
- 交易点标记(买入点和卖出点)
- 绩效指标计算:
- 总回报率
- 年化回报率
- 夏普比率
- 最大回撤
- 交易统计数据(总交易次数、买入/卖出次数、交易成本)
- 中文支持:
- ETF代码自动映射为中文名称
- 所有输出结果和图表均为中文显示
- 交易记录显示中文ETF名称
表示一笔交易的记录,包含交易日期、ETF代码、交易类型、数量、价格、金额和手续费等信息。
管理投资组合的核心类,负责处理持仓、交易和价值计算。
主要属性:
cash: 可用现金holdings: 当前持仓(各ETF的持有数量)holdings_history: 每日持仓历史记录price_history: 每日价格历史记录transactions: 交易记录values: 组合价值历史dates: 日期历史target_weights: 目标权重
主要方法:
add_transaction(transaction): 添加交易记录calculate_total_value(prices): 计算当前组合总价值record_value(date, value): 记录每日组合价值record_daily_history(date, prices): 记录每日持仓和价格历史get_current_weights(prices): 获取当前各ETF的权重
用于分析和可视化回测结果的类。
主要方法:
calculate_metrics(): 计算策略和买入持有策略的绩效指标print_results(): 打印中文回测结果摘要plot_performance(): 绘制回测结果图表- 上半部分:投资组合价值对比图(策略组合 vs 买入持有策略)
- 下半部分:ETF贡献组合价值图
执行完整的ETF回测流程的类。
主要方法:
run_backtest(start_date, end_date): 执行回测calculate_performance(): 计算绩效指标plot_performance(): 绘制回测结果图表_needs_rebalancing(portfolio, current_prices): 检查是否需要调仓_execute_rebalancing(date, total_value, current_prices, portfolio): 执行调仓操作_initial_purchase(date, data_df, strategy_portfolio, buy_hold_portfolio): 初始建仓
-
准备环境:
- 确保已安装所需依赖
- 设置tushare API密钥(用于获取ETF数据)
-
运行回测: 直接运行main.py文件:
python main.py
-
配置策略: 在main.py文件中可以修改以下参数:
- 初始资金:
initial_cash - 目标权重:
target_weights - 调仓阈值:
rebalance_threshold - 交易佣金:
commission - 回测时间范围:
start_date和end_date
- 初始资金:
-
查看结果:
- 控制台会输出中文回测结果摘要,包括绩效指标和交易统计
- 程序会生成两个图表:
- 投资组合价值对比图(策略组合 vs 买入持有策略)
- ETF贡献组合价值图
- 交易记录会显示中文ETF名称
pandas: 数据处理numpy: 数值计算matplotlib: 绘图requests: 网络请求(用于获取数据)tushare: 金融数据接口mplfinance: 金融图表绘制
使用pip安装所需依赖:
pip install pandas numpy matplotlib requests tushare mplfinanceD:\code\funds\
├── main.py # 主程序文件
├── README.md # 项目说明文档
├── 全天候组合V6.xlsx # 策略配置文件
└── .venv/ # Python虚拟环境
- 确保网络连接正常,以便获取最新的ETF数据
- 首次运行时可能需要设置tushare的API密钥
- 可根据需要调整策略参数,如目标权重、调仓频率等
- 建议使用Python虚拟环境隔离项目依赖
初始投资组合建仓日期: 2020-01-02
Buy 沪深300ETF: 27100 shares @ 0.92, cost: 24932.00
Buy 黄金ETF: 47500 shares @ 0.53, cost: 25175.00
Buy 油气LOF: 24900 shares @ 1.00, cost: 24900.00
Buy 标普500ETF: 22200 shares @ 1.12, cost: 24864.00
2020-02-03: Rebalancing triggered, deviations: {'510310.SH': 0.0689946282197975, '518850.SH': 0.048386869520978675, '161119.SZ': 0.010479955922422015, '161125.SZ': 0.00013685476169601855}
Sell 沪深300ETF: 2600 shares @ 0.81, income: 2106.00
Sell 黄金ETF: 2400 shares @ 0.56, income: 1344.00
Buy 标普500ETF: 2900 shares @ 1.18, cost: 3422.00
======================================================================
回测结果汇总
======================================================================
回测期间: 2020-01-02 至 2023-12-29
初始资金: 100,000.00
最终资金: 110,375.15
总收益率: 10.38%
年化收益率: 34.47%
夏普比率: 2.48
最大回撤: 3.43%
总交易次数: 12 (买入: 6, 卖出: 6)
总交易成本: 110.38
买入持有策略结果
----------------------------------------------------------------------
最终资金: 108,452.33
总收益率: 8.45%
年化收益率: 28.67%
夏普比率: 2.15
最大回撤: 4.56%
======================================================================
交易记录 (共 12 条):
1. 2020-01-02 买入 沪深300ETF 27100股 @ 0.92
2. 2020-01-02 买入 黄金ETF 47500股 @ 0.53
3. 2020-01-02 买入 油气LOF 24900股 @ 1.00
4. 2020-01-02 买入 标普500ETF 22200股 @ 1.12
5. 2020-02-03 卖出 沪深300ETF 2600股 @ 0.81
6. 2020-02-03 卖出 黄金ETF 2400股 @ 0.56
7. 2020-02-03 买入 标普500ETF 2900股 @ 1.18
...
- 投资组合价值对比图:展示再平衡策略和买入持有策略的价值增长曲线,标记了买入和卖出交易点
- ETF贡献组合价值图:展示各个ETF对组合价值的贡献变化,使用中文名称标记
- 添加更多的投资策略(如趋势跟踪、动量策略、价值投资等)
- 实现参数优化功能,自动寻找最佳策略参数
- 添加风险预警和止损功能
- 支持多市场、多资产类别的回测
- 导出详细的回测报告(PDF、Excel等格式)
- 添加回测结果的统计显著性检验
- 支持多策略组合和资产配置优化
如果您有任何问题或建议,欢迎随时交流和贡献代码!