动态动量指标
业务意义
DMIDX 是根据市场波动性自动调整时间周期的 RSI 变体,在高低波动市场中都能保持有效性,解决了传统 RSI 参数固定的局限性。
核心使用场景
1. 波动市场适应性
高波动市场:DMIDX 自动缩短周期,提高灵敏度
低波动市场:DMIDX 自动延长周期,减少虚假信号
波动转换期:自动调整以适应市场状态变化
2. 多时间框架动量分析
通过动态周期的变化,自动实现多时间框架分析:
当前动态周期 <10: 市场波动较高,转向更短视角
当前动态周期位于 10-20 之间:市场波动稳定
当前动态周期 >20: 市场波动较低,转向更长视角
使用要点总结
1. 核心优势:
自动适应市场波动性变化
减少参数优化的人工干预
在高波动和低波动市场中均有效
2. 参数设置建议:
基准周期:14(与标准 RSI 一致)
最小周期:5(保持基本灵敏度)
最大周期:30(避免过度滞后)
波动率测量:ATR(14) 效果最佳
3. 信号确认:
结合动态周期长度判断信号强度
短周期信号需要价格行为确认
长周期信号可靠性更高
4. 风险控制:
在周期快速变化时谨慎交易
结合趋势指标过滤逆势信号
设置基于波动率的动态止损
DMIDX 通过动态调整分析周期,解决了传统振荡器在变化市场环境中的适应性问题,是量化交易中的重要改进工具。
计算公式
第一步:计算真实波幅 (True Range)
TR = max((最高 - 最低),abs(最高 - 收盘 [-1]),abs(最低 - 收盘 [-1]))
第二步:波动率调整系数
波动率调整系数 = TR[1-n1:0].avg()/ 收盘 [1-n1:0].avg()
第三步:动态周期计算 (n2 最短周期,缺省 5;n3 最长周期,缺省 30)
动态周期 = min(max(n1*(1 + 波动率调整系数) ,n2),n3)
第四步:涨跌幅度
上涨幅度 =max(收盘 - 收盘 [-1],0)
下跌幅度 =max(收盘 [-1]- 收盘,0)
平均上涨幅度 = 上涨幅度 [1- 动态周期:0].avg()
平均下跌幅度 = 下跌幅度 [1- 动态周期:0].avg()
第五步
DMIDX = 100-(100/(1+( 平均上涨幅度 / 平均下跌幅度)))
实现代码
指标参数:
y |
输出列名 |
n1 |
基准周期 |
n2 |
最短周期 |
n3 |
最长周期 |
函数代码:
A |
B |
|
1 |
func DMIDX (A,$y,n1,n2,n3) |
=A.derive@o(max((最高 - 最低 ),abs( 最高 - 收盘 [-1]),abs(最低 - 收盘 [-1])):TR, max(收盘 - 收盘 [-1],0): 上涨幅度, max( 收盘 [-1]- 收盘,0): 下跌幅度,: 波动率调整系数,: 动态周期,: 平均上涨幅度,: 平均下跌幅度) |
=A.run(TR[1-n1:0].avg()/收盘 [1-n1:0].avg(): 波动率调整系数, min(max(n1*(1 + 波动率调整系数) ,n2),n3): 动态周期, 上涨幅度 [1- 动态周期:0].avg(): 平均上涨幅度, 下跌幅度 [1- 动态周期:0].avg(): 平均下跌幅度, 100-(100/(1+( 平均上涨幅度 / 平均下跌幅度))):${y}) |
||
=A.alter(;TR,上涨幅度, 下跌幅度, 波动率调整系数, 动态周期, 平均上涨幅度, 平均下跌幅度 ) |
举例:
调用脚本计算浦发银行 2024 年的动态动量指标
A |
||
1 |
… |
/计算出源数据 |
2 |
=A1.derive(:DMIDX) |
/增加要返回的指标字段 |
3 |
= DMIDX (A2, DMIDX ,14,5,30) |
/调用函数计算指标 |
运行效果:

