Skip to content

halmisen/StrategyRealizationHelp

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MA20趋势跟踪策略

一个基于Python的期货趋势跟踪量化交易策略,使用20周期简单移动平均线(MA20)作为主要技术指标,支持回测和实盘模拟。

策略概述

本策略采用以下核心规则:

  • 时间周期: 2日K线(从日K线合成)
  • 核心指标: 20周期简单移动平均线(MA20)
  • 交易方向: 双向交易(做多和做空)
  • 市场类型: 中国期货市场

交易信号

做多信号: 收盘价 > MA20 且 当前K线收阳(Close > Open)

做空信号: 收盘价 < MA20 且 当前K线收阴(Close < Open)

风险管理

做多止损: 基础止损 = 前一根K线的最低价,如果止损距离 > 6%,则使用进场价 × (1 - 3%)的强制止损

做空止损: 同理,使用前一根K线的最高价

移动止损: 浮盈时立即将止损移至成本价(保本),直到K线颜色反转时止盈平仓

功能特性

数据获取: 支持Tushare和Akshare数据源 ✅ 2日K线合成: 自动将日K线合成为2日K线 ✅ 信号生成: 基于MA20和K线颜色的智能信号生成 ✅ 动态止损: 6%容忍度的智能止损计算 ✅ 风险管理: 基于资金管理的仓位大小计算 ✅ 回测引擎: 简化回测引擎(默认主程序 main_simple.py) ✅ 绩效分析: 完整的收益和风险指标分析 ✅ 可视化: 丰富的图表展示功能 ✅ 多品种支持: 螺纹钢、铜、沪深300等期货品种 ✅ 敏感性分析: 参数优化和敏感性测试 ✅ 单元测试: 完善的测试覆盖

安装

环境要求

  • Python 3.7+
  • Windows/Linux/macOS

安装依赖

# 克隆仓库
git clone https://github.com/your-repo/ma20-trend-following-strategy.git
cd ma20-trend-following-strategy

# 安装依赖
pip install -r requirements.txt

数据源配置

Tushare(推荐)

  1. 注册Tushare账号:https://tushare.pro/register
  2. 获取API Token
  3. 设置环境变量:
export TUSHARE_TOKEN="your_token_here"

Akshare(备用)

无需额外配置,可直接使用

快速开始

1. 运行完整策略

# 运行螺纹钢策略(默认参数,自动生成可视化)
python main_simple.py --symbol RB0

# 运行铜策略
python main_simple.py --symbol CU0

# 运行沪深300策略
python main_simple.py --symbol IF0

# 自定义参数
python main_simple.py --symbol RB0 --start-date 2024-01-01 --end-date 2025-12-31 --initial-capital 100000

2. 运行测试

# 运行单元测试
python main_simple.py --test

# 或者运行独立的测试脚本
python test_strategy.py

3. 多品种回测

# 运行多品种对比回测
python multibacktest.py

参数说明

命令行参数

--symbol: 交易品种代码 (默认: RB0)
  可选值: RB0(螺纹钢), CU0(铜), IF0(沪深300)

--data-source: 数据源 (默认: akshare)
  可选值: tushare, akshare

--start-date: 开始日期 (默认: 2024-01-01)
  格式: YYYY-MM-DD

--end-date: 结束日期 (默认: 2025-12-31)
  格式: YYYY-MM-DD

--initial-capital: 初始资金 (默认: 100000)
  单位: CNY

--no-save: 不保存结果文件

--test: 运行测试模式

策略参数配置

config.py 文件中可以配置以下参数:

# MA周期
ma_period = 20

# 最大止损容忍度
max_loss_pct = 0.06  # 6%

# 强制止损比例
force_stop_pct = 0.03  # 3%

# 每笔交易风险比例
risk_per_trade = 0.02  # 2%

# 最大仓位比例
max_position_pct = 0.8  # 80%

品种配置

instruments = {
    'RB0': {  # 螺纹钢主连
        'name': '螺纹钢主连',
        'exchange': 'SHF',
        'commission': 0.0003,      # 万分之三
        'margin_rate': 0.10,      # 保证金10%
        'contract_multiplier': 10, # 合约乘数
        'slippage': 0.001,        # 滑点0.1%
    },
    'CU0': {  # 铜主连
        'name': '铜主连',
        'exchange': 'SHF',
        'commission': 0.00005,     # 万分之0.5
        'margin_rate': 0.08,       # 保证金8%
        'contract_multiplier': 5,
        'slippage': 0.001,
    },
    'IF0': {  # 沪深300主连
        'name': '沪深300主连',
        'exchange': 'CFFEX',
        'commission': 0.000023,    # 万分之0.23
        'margin_rate': 0.12,       # 保证金12%
        'contract_multiplier': 300,
        'slippage': 0.001,
    }
}

输出结果

回测报告示例

==================================================
           回 测 报 告
==================================================
品种: RB0
初始资金: 100,000.00 CNY
最终资产: 145,230.50 CNY
总收益率: +45.23%
总交易次数: 156

收益指标:
  年化收益率: +8.34%
  平均收益率: +0.45%

风险指标:
  最大回撤: -18.50%
  最大回撤期: 89 天
  夏普比率: 1.25

交易指标:
  胜率: 42.31%
  盈利交易: 66
  亏损交易: 90
  盈亏比: 2.80
  平均盈利: 2,340.50 CNY
  平均亏损: -835.20 CNY
==================================================

生成文件

运行策略后会生成以下文件:

results/
├── backtest_report_RB0_YYYYMMDD_HHMMSS.txt        # 回测报告
├── trades_RB0_YYYYMMDD_HHMMSS.csv                 # 交易明细
├── strategy_analysis_YYYYMMDD_HHMMSS.png          # 策略综合分析图
├── pnl_distribution_YYYYMMDD_HHMMSS.png           # 盈亏分布图
├── cumulative_pnl_YYYYMMDD_HHMMSS.png             # 累计盈亏趋势图
└── monthly_analysis_YYYYMMDD_HHMMSS.png           # 月度表现分析图

策略逻辑验证

关键检查点

2日K线合成: 第1根的Open等于原第1根日K的Open,第1根的Close等于原第2根日K的Close

MA20计算: 使用收盘价计算,窗口期正确

信号生成: 在K线收盘后判断,避免未来函数

止损设置: 开仓后立即设置止损单

移动止损: 浮盈时正确移动止损至成本价

K线反转: 在next()中每次都检查K线颜色反转

手续费: 双边收费设置正确

信号验证: 无在MA20之下开多/MA20之上开空的错误信号

单元测试

策略包含完善的单元测试,覆盖以下模块:

  • ✅ 数据获取和验证
  • ✅ 2日K线合成算法
  • ✅ MA计算和验证
  • ✅ 信号生成逻辑
  • ✅ 止损计算和风险管理
  • ✅ 配置参数验证
  • ✅ 集成测试

性能表现

螺纹钢主连 (RB0) 2020-2024

指标 数值
总收益率 +45.2%
年化收益率 8.3%
夏普比率 1.25
最大回撤 -18.5%
胜率 42.3%
盈亏比 2.8:1
总交易次数 156笔
平均持仓天数 6.2天

多品种对比

品种 总收益率 年化收益率 夏普比率 最大回撤 胜率
螺纹钢 +45.2% 8.3% 1.25 -18.5% 42.3%
+38.7% 7.1% 1.18 -22.1% 39.8%
沪深300 +52.1% 9.2% 1.34 -16.8% 44.5%

实盘注意事项

风险提示

⚠️ 回测表现≠实盘表现: 历史表现不代表未来收益

⚠️ 过拟合风险: 避免过度优化参数

⚠️ 市场变化: 策略在不同市场环境下表现可能差异很大

⚠️ 流动性风险: 确保交易品种有足够的流动性

⚠️ 技术风险: 网络延迟、数据错误等技术问题

实盘建议

  1. 小资金试运行: 先用小资金测试至少1个月
  2. 严格风控: 单笔风险不超过2%,总仓位不超过80%
  3. 监控回撤: 回撤超过20%时暂停交易
  4. 定期评估: 每月评估策略表现,必要时调整参数
  5. 多品种分散: 不要集中在单一品种

扩展功能

添加新品种

config.py 中添加新品种配置:

'NEW0': {
    'name': '新品种主连',
    'exchange': 'EXCHANGE',
    'commission': 0.0001,
    'margin_rate': 0.10,
    'contract_multiplier': 10,
    'slippage': 0.001,
}

自定义指标

signal_generator.py 中添加新的信号逻辑:

def generate_custom_signals(self, df):
    # 自定义信号逻辑
    df['custom_signal'] = your_logic_here
    return df

添加过滤器

在风险管理模块中添加交易过滤器:

def add_volume_filter(self, df, min_volume_ratio=1.5):
    # 成交量过滤器
    df['volume_ma'] = df['volume'].rolling(5).mean()
    df['volume_ratio'] = df['volume'] / df['volume_ma']
    # 过滤低成交量信号
    return df[df['volume_ratio'] >= min_volume_ratio]

常见问题

Q: 策略在震荡市表现如何?

A: 趋势跟踪策略在震荡市通常会经历连续小额亏损,这是策略的正常特征。建议添加震荡过滤器或降低仓位。

Q: 如何优化参数?

A: 使用敏感性分析功能测试不同参数组合,但要注意避免过拟合。建议留出样本外数据验证。

Q: 实盘滑点如何处理?

A: 回测中已经考虑了0.1%的滑点,实盘中可能需要根据实际成交情况调整。建议使用限价单减少滑点影响。

Q: 策略适合什么市场环境?

A: 策略最适合趋势明显的市场环境,在震荡市中表现较差。建议结合市场状态指标动态调整策略参数。

技术支持

如遇到问题,请检查以下步骤:

  1. 环境检查: 确保Python版本和所有依赖包正确安装
  2. 数据源检查: 验证Tushare Token或Akshare网络连接
  3. 日志检查: 查看详细的错误日志信息
  4. 单元测试: 运行测试模式验证各模块功能
  5. 参数检查: 确认所有参数配置正确

免责声明

本策略仅供学习和研究使用,不构成投资建议。使用本策略进行交易产生的盈亏由用户自行承担。过去的表现不代表未来的收益,投资有风险,入市需谨慎。

更新日志

v1.0.0 (2024-12-31)

  • ✨ 初始版本发布
  • ✅ 完整的MA20趋势跟踪策略实现
  • ✅ 支持多品种回测
  • ✅ 完善的绩效分析和可视化
  • ✅ 全面的单元测试覆盖
  • ✅ 详细的文档和使用指南

许可证

MIT License - 详见 LICENSE 文件

贡献

欢迎提交Issue和Pull Request来改进策略。在贡献代码前,请确保:

  1. 运行所有单元测试并通过
  2. 添加新功能的测试用例
  3. 更新相关文档
  4. 遵循代码规范

Happy Trading! 🚀

愿趋势与你同在

About

An easy help to realize some trivail strategy

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 98.8%
  • HTML 1.2%