Skip to content

kassichen/quant_time_stratergy

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

量化择时策略回测系统

基于广发证券《交易性择时策略研究之十五:125个经典技术指标择时分析》的量化策略实现

📊 项目概述

本项目实现了广发证券研报中的8个经典技术指标择时策略,支持双指数对比回测(沪深300 & 创业板指数)。

✅ 已实现策略

序号 策略名称 指标类型 状态
1 VWAP 量价指标 ✅ 已完成
2 DPO 趋势指标 ✅ 已完成
3 ER (Elder Ray) 动量指标 ✅ 已完成
4 TII 趋势强度指标 ✅ 已完成
5 PO 价格震荡指标 ✅ 已完成
6 MADisplaced 趋势指标 ✅ 已完成
7 MAAMT 量价指标 ✅ 已完成
8 SuperTrend 趋势跟踪指标 ✅ 已完成

🎯 核心特性

1. 双指数对比回测

  • 沪深300指数:主要回测标的(2005-2019)
  • 创业板指数:2025年至今对比回测
  • 同时展示两个指数的策略表现

2. 完整的回测框架

  • 数据获取:akshare免费数据源
  • 信号生成:严格按照广发研报逻辑
  • 收益计算:避免未来函数
  • 指标评估:20+项核心指标

3. 专业的可视化

  • 累计收益曲线对比图
  • 策略指标对比表格(3/4/5列动态布局)
  • 简洁专业的图表风格

📁 项目结构

公众号/
├── code/
│   ├── vwap_strategy.py          # VWAP择时策略
│   ├── dpo_strategy.py            # DPO择时策略
│   ├── er_strategy.py             # ER择时策略
│   ├── tii_strategy.py            # TII择时策略
│   ├── po_strategy.py             # PO择时策略
│   ├── madisplaced_strategy.py    # MADisplaced择时策略
│   ├── maamt_strategy.py          # MAAMT择时策略
│   ├── supertrend_strategy.py     # SuperTrend择时策略
│   ├── get_data.py                # 数据获取工具
│   └── requirements.txt           # Python依赖包
├── articles/                      # 研报资料
└── README.md                      # 项目说明

🚀 快速开始

环境准备

1. 安装依赖

cd code
pip install -r requirements.txt

2. 依赖说明

  • pandas: 数据处理
  • numpy: 数值计算
  • matplotlib: 可视化
  • akshare: A股数据获取(免费)

运行策略

运行单个策略

cd code
python vwap_strategy.py      # VWAP策略
python dpo_strategy.py        # DPO策略
python er_strategy.py         # ER策略
python tii_strategy.py        # TII策略
python po_strategy.py         # PO策略
python madisplaced_strategy.py # MADisplaced策略
python maamt_strategy.py      # MAAMT策略
python supertrend_strategy.py # SuperTrend策略

Python代码调用

from vwap_strategy import backtest_vwap_strategy

# 运行回测(包含2025年双指数对比)
df, metrics = backtest_vwap_strategy(
    start_date='20050408',
    end_date='20191223',
    period=20,
    include_2025=True  # 启用2025年双指数对比
)

📈 输出结果

1. 控制台输出

  • ✅ 详细的回测过程日志
  • ✅ 完整的策略评价指标
  • ✅ 与广发研报的对比
  • ✅ 2025年双指数回测结果

2. 可视化图表

文件名: {strategy}_backtest.png

布局(上下结构):

  • 上方:累计收益曲线对比图
    • 策略收益 vs 基准指数
    • 清晰的趋势展示
  • 下方:策略指标对比表格
    • 本次回测 vs 广发研报
    • 2025沪深300 vs 2025创业板指

3. 数据文件

每个策略生成3个CSV文件:

  • {strategy}_results.csv - 主回测详细数据
  • {strategy}_results_2025_hs300.csv - 2025沪深300回测
  • {strategy}_results_2025_cyb.csv - 2025创业板指回测

📊 策略详解

1. VWAP策略(成交量加权平均价格)

指标公式

Typical = (HIGH + LOW + CLOSE) / 3
MF = VOLUME × Typical
VWAP = SUM(MF, N) / SUM(VOLUME, N)

信号规则

  • 买入:收盘价上穿VWAP
  • 卖出:收盘价下穿VWAP

广发研报结果(2005-2019):

  • 累积收益率:1967.90%
  • 年化收益率:23.84%
  • 最大回撤:-34.11%
  • 胜率:27.53%
  • 盈亏比:4.99

2. DPO策略(去趋势价格震荡指标)

指标公式

DPO = CLOSE - REF(MA(CLOSE, N), N/2+1)

信号规则

  • 买入:DPO上穿0线
  • 卖出:DPO下穿0线

广发研报结果(2005-2019):

  • 累积收益率:2143.12%
  • 年化收益率:24.37%

3. ER策略(Elder Ray Index)

指标公式

BullPower = HIGH - EMA(CLOSE, N)
BearPower = LOW - EMA(CLOSE, N)

信号规则

  • 买入:BullPower > 0 且 BearPower > 前值
  • 卖出:BearPower < 0 且 BullPower < 前值

4. TII策略(Trend Intensity Index)

趋势强度指标,衡量价格趋势的强度。

5. PO策略(Price Oscillator)

价格震荡指标,通过两条EMA的差值判断趋势。

6. MADisplaced策略

移动平均位移指标,提前预判趋势变化。

7. MAAMT策略

基于成交金额的移动平均策略。

8. SuperTrend策略

基于ATR的趋势跟踪指标,动态止损。

📋 评价指标说明

指标 说明
交易次数 买入+卖出信号总数
完整交易对数 买卖配对后的交易对数
盈利交易对数 盈利的交易对数
判断正确率 盈利对数 / 总对数
盈亏比 平均盈利 / 平均亏损
累积收益率 期间总收益(复利)
年化收益率 年化后的收益率
最大回撤 最大跌幅
波动率 收益率的年化标准差
信息比 超额收益质量

🔧 技术实现

核心逻辑

  1. 数据获取

    • 使用akshare获取沪深300/创业板指数数据
    • 支持自定义时间区间
  2. 指标计算

    • 严格按照广发研报公式实现
    • 滚动窗口计算
  3. 信号生成

    • 识别上穿/下穿动作
    • 避免未来函数
  4. 收益计算

    • 使用shift(1)避免前视偏差
    • 复利计算累计收益
  5. 指标评估

    • 计算20+项核心指标
    • 与广发研报对比

关键代码片段

# 信号生成(以VWAP为例)
for i in range(1, len(df)):
    # 上穿:前一日≤VWAP,今日>VWAP
    if df['close'].iloc[i-1] <= df['vwap'].iloc[i-1] and \
       df['close'].iloc[i] > df['vwap'].iloc[i]:
        df.loc[df.index[i], 'signal'] = 1  # 买入
    
    # 下穿:前一日≥VWAP,今日<VWAP
    elif df['close'].iloc[i-1] >= df['vwap'].iloc[i-1] and \
         df['close'].iloc[i] < df['vwap'].iloc[i]:
        df.loc[df.index[i], 'signal'] = -1  # 卖出

# 收益计算(避免未来函数)
df['strategy_returns'] = df['returns'] * df['position'].shift(1)

⚠️ 注意事项

数据来源

  • 使用akshare(新浪财经)免费数据
  • 与广发研报数据源可能有差异
  • 结果略有不同属于正常

回测局限性

  1. 不考虑交易成本和滑点
  2. 不考虑停牌和涨跌停限制
  3. 使用收盘价成交假设
  4. 历史回测≠未来收益

风险提示

⚠️ 重要

  • 本项目仅供学习研究
  • 不构成任何投资建议
  • 实盘交易请谨慎
  • 注意风险控制

🔍 常见问题

Q1: 如何修改回测参数?

修改策略文件中的main()函数参数。

Q2: 支持哪些指数?

  • 沪深300:sh000300
  • 创业板指:sz399006
  • 上证指数:sh000001
  • 深证成指:sz399001

Q3: 数据获取失败怎么办?

  1. 检查网络连接
  2. 更新akshare:pip install --upgrade akshare
  3. 稍后重试

Q4: 为什么结果与研报有差异?

  • 数据源不同
  • 除权除息处理方式不同
  • 计算精度差异
  • ±10%的差异属于正常范围

📝 更新日志

2025-10-10 v3.0 🎉 重大更新

  • ✅ 新增7个策略(DPO, ER, TII, PO, MADisplaced, MAAMT, SuperTrend)
  • ✅ 支持双指数对比(沪深300 & 创业板指)
  • ✅ 修复VWAP策略缩进错误
  • ✅ 优化可视化表格布局(3/4/5列动态显示)
  • ✅ 统一代码风格和注释
  • ✅ 作者信息更新为kevin

2025-10-10 v2.9 - 布局优化

  • 改为上下布局
  • 表格字体和行高优化

2025-10-10 v2.3 - 关键修正

  • 修正信号生成逻辑(上穿/下穿)
  • 修正收益计算(避免未来函数)

2025-10-10 v1.0 - 初始版本

  • 完成VWAP策略实现

📚 参考资料

👨‍💻 作者

Kevin

如有问题或建议,欢迎提Issue!

📄 许可说明

本项目仅供学习研究使用,不构成任何投资建议。


⭐ 如果这个项目对您有帮助,欢迎Star支持!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 100.0%