Skip to content

Lisibia/funds_learn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

ETF投资策略回测系统小项目

readme.md和代码均由AI生成

这是一个用于回测ETF投资策略的Python程序,可以帮助投资者评估不同投资策略的绩效表现,支持中文显示和ETF中文名称映射。

功能特性

  • 策略回测:支持基于目标权重的调仓策略回测
  • 绩效分析:计算并比较策略组合与买入持有策略的绩效指标
  • 可视化展示
    • 投资组合价值对比图(策略组合 vs 买入持有策略)
    • ETF贡献组合价值图(展示各ETF对组合价值的贡献)
    • 交易点标记(买入点和卖出点)
  • 绩效指标计算
    • 总回报率
    • 年化回报率
    • 夏普比率
    • 最大回撤
    • 交易统计数据(总交易次数、买入/卖出次数、交易成本)
  • 中文支持
    • ETF代码自动映射为中文名称
    • 所有输出结果和图表均为中文显示
    • 交易记录显示中文ETF名称

类结构说明

1. Transaction类

表示一笔交易的记录,包含交易日期、ETF代码、交易类型、数量、价格、金额和手续费等信息。

2. Portfolio类

管理投资组合的核心类,负责处理持仓、交易和价值计算。

主要属性:

  • 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的权重

3. PerformanceAnalyzer类

用于分析和可视化回测结果的类。

主要方法:

  • calculate_metrics(): 计算策略和买入持有策略的绩效指标
  • print_results(): 打印中文回测结果摘要
  • plot_performance(): 绘制回测结果图表
    • 上半部分:投资组合价值对比图(策略组合 vs 买入持有策略)
    • 下半部分:ETF贡献组合价值图

4. ManualETFBacktest类

执行完整的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): 初始建仓

使用方法

  1. 准备环境

    • 确保已安装所需依赖
    • 设置tushare API密钥(用于获取ETF数据)
  2. 运行回测: 直接运行main.py文件:

    python main.py
  3. 配置策略: 在main.py文件中可以修改以下参数:

    • 初始资金:initial_cash
    • 目标权重:target_weights
    • 调仓阈值:rebalance_threshold
    • 交易佣金:commission
    • 回测时间范围:start_dateend_date
  4. 查看结果

    • 控制台会输出中文回测结果摘要,包括绩效指标和交易统计
    • 程序会生成两个图表:
      • 投资组合价值对比图(策略组合 vs 买入持有策略)
      • ETF贡献组合价值图
    • 交易记录会显示中文ETF名称

依赖项

  • pandas: 数据处理
  • numpy: 数值计算
  • matplotlib: 绘图
  • requests: 网络请求(用于获取数据)
  • tushare: 金融数据接口
  • mplfinance: 金融图表绘制

安装依赖

使用pip安装所需依赖:

pip install pandas numpy matplotlib requests tushare mplfinance

项目结构

D:\code\funds\
├── main.py          # 主程序文件
├── README.md        # 项目说明文档
├── 全天候组合V6.xlsx  # 策略配置文件
└── .venv/           # Python虚拟环境

注意事项

  1. 确保网络连接正常,以便获取最新的ETF数据
  2. 首次运行时可能需要设置tushare的API密钥
  3. 可根据需要调整策略参数,如目标权重、调仓频率等
  4. 建议使用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对组合价值的贡献变化,使用中文名称标记

扩展建议

  1. 添加更多的投资策略(如趋势跟踪、动量策略、价值投资等)
  2. 实现参数优化功能,自动寻找最佳策略参数
  3. 添加风险预警和止损功能
  4. 支持多市场、多资产类别的回测
  5. 导出详细的回测报告(PDF、Excel等格式)
  6. 添加回测结果的统计显著性检验
  7. 支持多策略组合和资产配置优化

如果您有任何问题或建议,欢迎随时交流和贡献代码!

About

资金学习类代码库

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages