策略名称:多均线趋势跟踪策略
标的:创业板50指数 (sz.399673)
交易频率:日频
策略类型:右侧趋势跟踪,中长期持仓
核心思想:
当前价格 > MA10 > MA30
当前价格 >= 20日最高价 × 0.995
10日涨幅 = (当前价 / 10日前收盘价 - 1) > 2%
if (当前价 > MA10 > MA30) and (当前价 >= 20日高 × 0.995) and (10日涨幅 > 2%):
买入信号 = True
目标仓位 = 100%
当前价格 < MA30
当前价格 <= 20日最低价 × 1.005
if (当前价 < MA30) or (当前价 <= 20日低 × 1.005):
卖出信号 = True
目标仓位 = 0%
python
if 持仓中:
if 当前价 > 持仓最高价:
持仓最高价 = 当前价 # 更新最高点
if 当前价 < 持仓最高价 × 0.90:
强制卖出 = True # 回撤10%止损
| 参数 | 数值 | 说明 |
|---|---|---|
| 短期均线 | 10日 | 捕捉短期趋势 |
| 中期均线 | 30日 | 确认中期趋势 |
| 突破周期 | 20日 | 突破近20日高点 |
| 动量周期 | 10日 | 计算10日涨幅 |
| 动量阈值 | 2% | 最小入场动量 |
| 移动止损 | 10% | 从最高点回撤止损 |
| 最小调仓 | 20% | 避免频繁交易 |
日期: 2019-02-11
价格: 1080点
MA10: 1050点
MA30: 1040点
20日高: 1075点
10日涨幅: 5.2%
条件检查:
✓ 1080 > 1050 > 1040 (均线多头排列)
✓ 1080 >= 1075 × 0.995 = 1070 (突破新高)
✓ 5.2% > 2% (动量足够)
→ 买入信号触发,满仓入场
日期: 2020-03-09
持仓最高价: 2100点
当前价: 1850点
回撤计算: (1850 - 2100) / 2100 = -11.9%
→ 回撤超过10%,触发移动止损,清仓离场
| 指标 | 训练集(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
总结:这是一个经典的双均线+突破的趋势跟踪策略,核心是在 "均线多头排列 + 突破新高 + 正向动量" 三重确认下入场,在 "跌破均线" 或 "移动止损" 时离场。简单有效,特别适合高波动的创业板市场。