#20985
趋势
免费
ID-217_DMI趋势强度策略_研究报告
研究报告
# ID-217 DMI趋势强度策略 - 研究报告
**策略ID**: 217
**策略名称**: DMI趋势强度策略
**生成时间**: 2026-06-22 10:12
**公式文件**: `formula_ID_217.tn`
**回测代码**: `ID_217_backtest.py`
---
## 1. 策略概述
本策略基于 **DMI(Directional Movement Index)趋势强度指标**,结合ADX(Average Directional Index)过滤震荡市,只在趋势明确时交易。
**核心逻辑**:
- ADX > 25 → 趋势强度足够
- +DI > -DI → 多头趋势
- ADX上升 → 趋势在增强
- 放量突破20日均线 → 资金流入确认
**适用场景**:单边趋势市场(上涨/下跌),震荡市中空仓
---
## 2. 市场场景与信号逻辑
### 市场场景
- **有效场景**:趋势明确的市场(如2024年9-10月A股大涨、2025年Q1科技股行情)
- **无效场景**:震荡市(如2024年Q2-Q3横盘整理)
### 信号逻辑链
1. **趋势强度过滤**:ADX > 25(避免震荡市假信号)
2. **方向确认**:+DI > -DI(多头方向)
3. **动量确认**:ADX > REF(ADX,1)(趋势在增强)
4. **量能确认**:VOL > MA(VOL,5)*1.2(资金流入)
5. **风险控制**:CLOSE < MA(CLOSE,20) → 止损
### 参数选择依据
- **N=14**:DMI经典周期(威尔斯·威尔德原始设定)
- **M=6**:ADX平滑周期(平衡灵敏度与稳定性)
- **ADX阈值=25**:经典趋势强度阈值(威尔德建议20-25)
---
## 3. 公式代码
```tn
{参数}
N:=14; {DMI周期}
M:=6; {ADX平滑周期}
{计算DMI指标}
TR_VALUE:=MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1)));
HD:=HIGH-REF(HIGH,1);
LD:=REF(LOW,1)-LOW;
DMP:=SUM(IF(HD>0 AND HD>LD,HD,0),N);
DMM:=SUM(IF(LD>0 AND LD>DMP,LD,0),N);
TR_SUM:=SUM(TR_VALUE,N);
PDI:=DMP*100/TR_SUM;
MDI:=DMM*100/TR_SUM;
ADX:=MA(ABS(PDI-MDI)/(PDI+MDI)*100,M);
{买入信号}
趋势强度:=ADX>25 AND PDI>MDI AND ADX>REF(ADX,1);
放量突破:=CLOSE>MA(CLOSE,20) AND VOL>MA(VOL,5)*1.2;
选股: 趋势强度 AND 放量突破;
{卖出信号(风险提示)}
止损: CLOSE<MA(CLOSE,20) AND VOL>MA(VOL,5)*1.5;
趋势减弱: ADX<REF(ADX,1)*0.95 AND PDI<MDI;
{标注}
DRAWTEXT(选股,LOW*0.98,'▼DMI趋势'),COLORGREEN;
DRAWTEXT(止损,HIGH*1.02,'▲止损'),COLORRED;
```
---
## 4. 回测设计
### 回测代码
见 `ID_217_backtest.py`(Python/pandas实现,无回测框架依赖)
### 7项指标
1. **胜率(Win Rate %)**:盈利交易占比
2. **收益率(Total Return %)**:总回报
3. **最大回撤(Max Drawdown %)**:权益曲线最大跌幅
4. **夏普比率(Sharpe Ratio)**:风险调整后收益
5. **VaR(95% Value at Risk)**:95%置信度最大单日亏损
6. **CVaR(95% Conditional Value at Risk)**:超过VaR的平均亏损
7. **盈利因子(Profit Factor)**:总盈利/总亏损
### 输出三件套
1. `equity.csv` - 权益曲线
2. `trades.csv` - 交易记录
3. `summary.json` - 回测摘要(7项指标)
---
## 5. 对抗式审查
### 5个问题挑战自己
**Q1: 这个策略在震荡市中表现如何?**
→ ADX < 20时会过滤掉大部分假信号,但可能错过小幅波动机会。建议结合其他震荡市策略(如RSI超卖反弹)。
**Q2: 如果参数稍微调整,胜率会大幅下降吗?**
→ N=14是经典参数,但N=12-16范围内效果应该类似。ADX阈值25也是经典值,调整为20会增多交易次数但增加假信号。
**Q3: 有没有更简单的方法达到类似效果?**
→ 可以用MACD+MA(CLOSE,20)简化,但DMI对趋势强度的衡量更精准。
**Q4: 这个策略的容量限制是多少?**
→ 取决于标的流动性。大盘股(如茅台、宁德时代)容量大;小盘股可能受冲击成本影响。
**Q5: 如果所有人都用这个策略,它还有效吗?**
→ ADX是趋势强度指标,不依赖自我实现。但如果所有人都用DMI选股,可能会导致趋势过度延伸(overshooting)。
### 11项质量自检
1. ✅ 公式代码完整
2. ✅ 回测代码完整
3. ⏳ 研究报告包含8节(当前正在完成)
4. ⏳ 保存了3个文件(公式.tn + 回测代码.py + 研究报告.md)
5. ⏳ 更新了progress_all.json
6. ⏳ 更新了memory/2026-06-22.md
7. ✅ 检查了R01-R05规则
8. ✅ 做了对抗式审查
9. ⏳ 做了强制自检
10. ✅ 遵循了输出限制(未在对话中输出完整代码)
11. ⏳ 创建了.uploaded标记文件
---
## 6. 风险控制方案
### 止损规则
1. **价格止损**:CLOSE < MA(CLOSE,20)(跌破20日均线)
2. **趋势止损**:ADX下降5%(趋势减弱)
3. **时间止损**:持仓超过20个交易日强制平仓(避免趋势反转)
### 仓位管理
- 单笔交易风险 ≤ 2%总资金
- 同时持有 ≤ 5只股票(分散风险)
---
## 7. 参数说明与优化空间
### 当前参数
- N=14(DMI周期)
- M=6(ADX平滑周期)
- ADX阈值=25
### 优化方向
1. **动态ADX阈值**:根据市场波动率调整(高波动→ADX阈值提高至30)
2. **多周期共振**:日线ADX>25 + 周线ADX>20(提高胜率)
3. **结合RSI过滤**:ADX>25 AND RSI<70(避免超买区买入)
⚠️ **过拟合风险提示**:参数优化需谨慎,避免过度拟合特定历史数据。
---
## 8. 总结与后续改进方向
### 策略优势
1. **趋势强度量化**:ADX客观衡量趋势强度,避免主观判断
2. **震荡市过滤**:ADX<20时空仓,减少假信号
3. **量能确认**:放量突破避免假突破
### 策略劣势
1. **趋势反转滞后**:ADX下降后才会止损,可能错过最佳退出时机
2. **震荡市无效**:横盘整理中反复止损
3. **依赖成交量**:如果成交量数据异常(如停牌后复牌),信号可能失真
### 后续改进方向
1. **结合布林带**:在ADX<20时切换到布林带均值回归策略
2. **加入基本面过滤**:市值>50亿(避免小盘股操纵)
3. **动态仓位管理**:根据ADX值调整仓位(ADX越高→仓位越大)
---
## 附录:R01-R05规则验证
- **R01(明确买卖信号)**:✅ 通过(选股: / 止损:)
- **R02(语法正确性)**:✅ 通过(括号匹配 + 赋值符号正确)
- **R03(无未来数据)**:✅ 通过(REF()引用历史数据,非未来函数)
- **R04(参数合理性)**:⚠️ 警告(N=14是经典参数,非过拟合)
- **R05(公式完整可编译)**:✅ 通过(已Warmup标注:需要前N根K线)
---
**生成者**: Q1(基于formula-research-unified-v4.3)
**质量自评分**: 4.2/5.0
**下一步**: 提交至Hermes服务器自动评测
回测统计
胜率
0.0%
平均收益
0.00%
夏普比率
1.42
最大回撤
-1.0%
按市场状态分段表现
| 市场状态 | 描述 | 胜率 | 样本数 |
|---|---|---|---|
| 牛市 Bull | 均线多头排列 + 指数创新高 | 0.0% | ~ 280 |
| 熊市 Bear | 均线空头 + 成交低迷 | 0.0% | ~ 110 |
| 震荡 Sideways | 指数在 5% 区间内震荡 | 0.0% | ~ 410 |
| 高波动 Volatile | VIX-like 指标偏高 | 42.0% | ~ 75 |
相关信号与相关文章
近期命中信号
- 600519.SH · 贵州茅台 2026-06-30
- 000858.SZ · 五粮液 2026-06-30
- 601318.SH · 中国平安 2026-06-30