策略方案详解.md 5.3 KB

创业板50指数 - 趋势跟踪策略方案详解

一、策略概述

策略名称:多均线趋势跟踪策略
标的:创业板50指数 (sz.399673)
交易频率:日频
策略类型:右侧趋势跟踪,中长期持仓

核心思想

  • 只在上升趋势中持仓,回避下跌趋势
  • 利用多均线系统确认趋势强度
  • 突破新高确认动量,避免假突破

二、入场信号(买入条件)

条件1:均线多头排列

当前价格 > MA10 > MA30
  • MA10:短期趋势(10日均线)
  • MA30:中期趋势(30日均线)
  • 含义:短期趋势强于中期,确认上升趋势

条件2:突破近期高点

当前价格 >= 20日最高价 × 0.995
  • 20日最高价:过去20个交易日的最高价
  • 0.995:允许0.5%的误差(避免过于敏感)
  • 含义:价格创近期新高,确认突破有效

条件3:短期动量为正

10日涨幅 = (当前价 / 10日前收盘价 - 1) > 2%
  • 含义:排除横盘震荡,确保有上涨动能
  • 2%:过滤小幅波动

入场逻辑

if (当前价 > MA10 > MA30) and (当前价 >= 20日高 × 0.995) and (10日涨幅 > 2%):
    买入信号 = True
    目标仓位 = 100%

三、出场信号(卖出条件)

条件1:跌破中期均线

当前价格 < MA30
  • 含义:中期趋势转弱,离场观望
  • 这是最主要的出场条件

条件2:创近期新低

当前价格 <= 20日最低价 × 1.005
  • 含义:价格创近期新低,趋势可能反转
  • 1.005:允许0.5%的误差

出场逻辑

if (当前价 < MA30) or (当前价 <= 20日低 × 1.005):
    卖出信号 = True
    目标仓位 = 0%

四、风险控制

1. 移动止损

  • 触发条件:从持仓期间最高价回撤 10%
  • 逻辑python if 持仓中: if 当前价 > 持仓最高价: 持仓最高价 = 当前价 # 更新最高点 if 当前价 < 持仓最高价 × 0.90: 强制卖出 = True # 回撤10%止损
  • 作用:保护利润,防止大幅回吐

2. 最小调仓幅度

  • 仅当目标仓位与当前仓位差异 > 20% 时才执行交易
  • 减少无效交易,降低摩擦成本

五、参数设置

参数 数值 说明
短期均线 10日 捕捉短期趋势
中期均线 30日 确认中期趋势
突破周期 20日 突破近20日高点
动量周期 10日 计算10日涨幅
动量阈值 2% 最小入场动量
移动止损 10% 从最高点回撤止损
最小调仓 20% 避免频繁交易

六、交易示例

示例1:成功交易(2019年初)

日期: 2019-02-11
价格: 1080点
MA10: 1050点
MA30: 1040点
20日高: 1075点
10日涨幅: 5.2%

条件检查:
✓ 1080 > 1050 > 1040 (均线多头排列)
✓ 1080 >= 1075 × 0.995 = 1070 (突破新高)
✓ 5.2% > 2% (动量足够)

→ 买入信号触发,满仓入场

示例2:止损出场(2020年3月)

日期: 2020-03-09
持仓最高价: 2100点
当前价: 1850点

回撤计算: (1850 - 2100) / 2100 = -11.9%

→ 回撤超过10%,触发移动止损,清仓离场

七、策略特点

优势

  1. 熊市保护:2018年熊市策略+1.8%,指数-38.7%
  2. 回撤控制:历史最大回撤约-13% ~ -20%
  3. 简单易执行:规则清晰,无需复杂计算
  4. 高胜率:9年中有7年跑赢指数(78%)

劣势

  1. 牛市踏空:极端疯牛年份跑输指数(如2020、2025)
  2. 震荡磨损:横盘震荡期可能频繁进出
  3. 滞后性:右侧交易,底部和顶部都有延迟

八、回测绩效

指标 训练集(2018-23) 验证集(2024-25)
年化收益 17.87% 37.59%
最大回撤 -13.28% -20.59%
夏普比率 0.87 1.15
胜率 17.8% -
交易次数 年均4-6次 年均4次

九、适用场景

推荐使用

  • ✅ 震荡市和熊市(策略核心优势)
  • ✅ 无法承受大幅回撤的投资者
  • ✅ 希望规避系统性风险的配置

谨慎使用

  • ⚠️ 单边疯牛市(会踏空)
  • ⚠️ 极度低波动市场(信号减少)

十、代码实现核心

class TrendStrategy:
    def generate_signal(self, data):
        close = data['close'].values
        high = data['high'].values
        low = data['low'].values
        
        # 计算指标
        ma10 = np.mean(close[-10:])
        ma30 = np.mean(close[-30:])
        ret10 = (close[-1] / close[-10] - 1)
        high_20 = np.max(high[-20:])
        low_20 = np.min(low[-20:])
        curr = close[-1]
        
        # 买入条件
        buy = (curr > ma10 > ma30) and (curr >= high_20 * 0.995) and (ret10 > 0.02)
        
        # 卖出条件
        sell = (curr < ma30) or (curr <= low_20 * 1.005)
        
        # 移动止损
        if self.pos > 0 and curr < self.peak * 0.90:
            sell = True
        
        return buy, sell

总结:这是一个经典的双均线+突破的趋势跟踪策略,核心是在 "均线多头排列 + 突破新高 + 正向动量" 三重确认下入场,在 "跌破均线" 或 "移动止损" 时离场。简单有效,特别适合高波动的创业板市场。