1
0
Files
leopard-analysis/openspec/changes/archive/2026-01-28-add-macd-strategy/specs/macd-trading/spec.md
2026-01-28 00:10:43 +08:00

5.1 KiB
Raw Blame History

ADDED Requirements

Requirement: MACD趋势跟踪策略

系统应提供基于MACD指标的趋势跟踪交易策略包括MACD计算、EMA200趋势过滤、以及基于金叉/死叉的交易信号生成。

Scenario: 策略文件加载

  • WHEN 用户在命令行指定--strategy-file strategies/macd_strategy.py
  • THEN backtest.py成功加载策略文件并执行回测
  • AND 策略类正确注册所有技术指标到backtesting框架
  • AND 策略逻辑根据MACD金叉/死叉和EMA200位置生成交易信号

Scenario: MACD指标计算

  • WHEN 调用calculate_indicators(data)函数,传入包含[Open, High, Low, Close, Volume, factor]的DataFrame
  • THEN 函数使用ta-lib计算以下指标并添加到DataFrame
    • MACD线DIF: 10日EMA - 20日EMA
    • MACD信号线DEA: 9日EMA的MACD
    • MACD柱状图Histogram: MACD线 - 信号线
    • EMA200: 200日指数移动平均线
  • AND 返回包含原始数据和所有新增指标的DataFrame
  • AND 指标名称使用ta-lib返回的默认列名macd、macdsignal、macdhist

Scenario: 策略初始化

  • WHEN backtesting框架初始化MacdTrendStrategy策略类
  • THEN 调用init()方法
  • ANDinit()中通过self.I()注册以下指标到backtesting框架
    • MACD线self.data.MACD_10_20_9
    • MACD信号线self.data.MACDs_10_20_9
    • EMA200self.data.EMA_200
  • AND 所有参数fast_period=10、slow_period=20、signal_period=9在策略类中定义为类变量
  • AND 注册的指标可直接在next()方法中访问

Scenario: MACD金叉买入信号

  • WHEN 策略检测到MACD线上穿信号线金叉
  • AND 当前价格高于EMA200趋势线确认上升趋势
  • AND 当前无持仓或持仓方向与买入信号相反
  • THEN 策略平掉现有仓位(如有)
  • AND 策略开多仓(self.buy()
  • AND 在趋势市场下捕捉上涨机会

Scenario: EMA200跌破卖出信号

  • WHEN 策略检测到当前价格跌破EMA200趋势线
  • AND 当前持有多仓
  • THEN 策略平掉多仓(self.position.close()
  • AND 不开空仓(仅平仓,避免逆势交易)
  • AND 在趋势转向时及时止损保护利润

Scenario: MACD死叉卖出信号

  • WHEN 策略检测到MACD线下穿信号线死叉
  • AND 当前持有多仓
  • THEN 策略平掉多仓(self.position.close()
  • AND 不开空仓
  • AND 在动量减弱时退出持仓

Scenario: EMA200下方不开仓

  • WHEN 当前价格低于EMA200趋势线
  • AND 检测到MACD金叉信号
  • THEN 策略不执行买入操作
  • AND 避免在下跌趋势中逆势交易
  • AND 等待价格回到EMA200上方再考虑入场

Scenario: 空仓状态处理

  • WHEN 策略当前无持仓
  • AND 检测到卖出信号MACD死叉或EMA200跌破
  • THEN 策略跳过卖出信号
  • AND 避免重复平仓导致错误

Scenario: 震荡市场过滤

  • WHEN 市场处于震荡状态价格围绕EMA200波动
  • AND MACD产生频繁的假金叉/死叉信号
  • THEN EMA200趋势过滤减少交易频率
  • AND 避免在无明确趋势时频繁交易
  • AND 等待趋势明确后再入场

Scenario: 趋势市场顺势交易

  • WHEN 市场处于明确上升趋势价格持续在EMA200上方
  • AND MACD金叉确认动量增强
  • THEN 策略及时入场捕捉上涨机会
  • AND 顺势交易提高胜率
  • AND EMA200确保不在下跌趋势中买入

Scenario: 参数配置

  • WHEN 用户查看策略代码
  • THEN 策略参数清晰定义为类变量:
    • fast_period = 10MACD快线周期
    • slow_period = 20MACD慢线周期
    • signal_period = 9MACD信号线周期
  • AND 参数无需通过命令行传递
  • AND 参数可直接在代码中修改以适配不同市场环境

Scenario: 依赖管理

  • WHEN 安装项目依赖
  • THEN ta-lib库已被正确安装手动安装
  • AND uv run python -c "import talib"成功执行
  • AND 策略文件可正常运行
  • AND 如ta-lib未安装给出明确错误提示

Scenario: 回测兼容性

  • WHEN 使用现有backtest.py框架
  • THEN 框架通过load_strategy()函数成功加载macd_strategy.py
  • AND 调用calculate_indicators()预处理数据
  • AND 初始化策略类并执行回测
  • AND 回测流程与SMA策略完全一致

Scenario: 指标数据完整性

  • WHEN backtesting调用calculate_indicators(data)
  • THEN 返回的DataFrame包含所有必需列
    • 原始列:[Open, High, Low, Close, Volume, factor]
    • MACD指标列[MACD_10_20_9, MACDh_10_20_9, MACDs_10_20_9]
    • EMA趋势线列[EMA_200]
  • AND 无NaN值除预热期外
  • AND 指标数据可用于策略决策和图表展示

Scenario: 预热期处理

  • WHEN 数据长度不足以计算完整指标前200天
  • THEN 指标值为NaN
  • AND backtesting框架会自动跳过预热期
  • AND 策略逻辑在有足够数据后才执行
  • AND 避免因数据不足导致的错误信号