当前位置: 首页 > ops >正文

SPL做量化---DMI(动向指标)

DMI 指标又叫动向指标或趋向指标,其全称叫“Directional Movement Index,简称 DMI”,也是由美国技术分析大师威尔斯·威尔德(Wells Wilder)所创造的,是一种中长期股市技术分析(Technical Analysis)方法。

DMI 指标是通过分析股票价格在涨跌过程中买卖双方力量均衡点的变化情况,即多空双方的力量的变化受价格波动的影响而发生由均衡到失衡的循环过程,从而提供对趋势判断依据的一种技术指标。

计算方法:

DMI 的计算方法比较复杂,需要计算 DI1(上升指标),DI2(下降指标),ADX(平均动向指数)和 ADXR 四个指标,计算过程中还要涉及到一些中间指标比如 TR,DMP,DMM 等
以日 DMI 为例,计算过程如下:

1. 计算每日真实波幅 TR,并对 N1 日的真实波幅求和,记作 TR_sum
真实波幅等于当日股价振幅、最高与昨收差价、最低与昨收差价中的最大值。

2. 计算上升动向值 DMP 和下降动向值 DMM
上升动向值 DMP,其数值等于当日的最高价减去前一日的最高价,如果 <=0 则 DMP=0。
下降动向值 DMM,其数值等于前一日的最低价减去当日的最低价,如果 <=0 则 DMM=0
再比较 DMP 和 DMM,较大的那个数字保持,较小的数字归 0

3. 分别对 N1 日 DMP 和 DMM 求和,记作 DMP_sum 和 DMM_sum

4. 上升指标 DI1=DMP_sum*100/TR_sum

5. 下降指标 DI2=DMM_sum*100/TR_sum

6. 计算 N2 日内的平均动向指数 ADX=MA(DX,N2)其中,动向指数 DX 等于 DI1 和 DI2 间的差的绝对值除以总和的百分比

7. 计算评估数值 ADXR=(当日的 ADX+ 前 N2 日的 ADX)/2

例如计算浦发银行 2024 年 DMI 指标,N1、N2 分别取 14 和 6。

代码示例:

A
1600000
22024-01-01
32024-12-31
4=call("adjustprice.splx", "", call("loadkday.splx", A1, A2,A3) )
514
66
7=A4.new(code,tdate,max(( high - low),abs(high - close[-1]),abs(low - close[-1])):TR, high - high [-1]:HD, low [-1]- low:LD)
8=A7.derive(sum(TR[1-A5:0]):TR_sum, if(HD>0 && HD>LD,HD,0):DMP, if(LD>0 && LD>HD,LD,0):DMM, sum(DMP[1-A5:0]):DMP_sum, sum(DMM[1-A5:0]):DMM_sum)
9=A8.derive(DMP_sum*100/TR_sum:DI1, DMM_sum*100/TR_sum:DI2, abs(DI1-DI2)/(DI1+DI2)*100:DX, avg(DX[1-A6:0]):ADX, (ADX+ADX[-A6])/2:ADXR)
10=A9.new(code,tdate,DI1,DI2,ADX,ADXR)

A1-A4 读取股票数据

A5-A6 输入 N1,N2

A7 计算 TR

A8 计算 TR_sum,DMP,DMM,DMP_sum,DMM_sum

A9 计算上升指标 DI1,下降指标 DI2,动向指数 DX,平均动向指数 ADX,评估数值 ADXR。

A10 返回需要的指标值。

..

也可以封装成脚本 dmi.splx,使用时直接调用。

脚本代码:

A
1=data.new(tdate,max((high - low),abs(high - close[-1]),abs(low - close[-1])):TR, high - high[-1]:HD, low[-1]- low:LD)
2=A1.derive(sum(TR[1-N(1):0]):TR_sum, if(HD>0 && HD>LD,HD,0):DMP, if(LD>0 && LD>HD,LD,0):DMM, sum(DMP[1-N(1):0]):DMP_sum, sum(DMM[1-N(1):0]):DMM_sum)
3=A2.derive(DMP_sum*100/TR_sum:DI1, DMM_sum*100/TR_sum:DI2, abs(DI1-DI2)/(DI1+DI2)*100:DX, avg(DX[1-N(2):0]):ADX, (ADX+ADX[-N(2)])/2:ADXR)
4=A3.new(tdate,DI1,DI2,ADX,ADXR)

参数:

data序表,某支股票的日线数据
NNx 日序列,如[14,6]

返回数据集结构:

code股票代码
tdate日期
DI1上升指标
DI2下降指标
ADX平均动向指数
ADXR评估数值

例如,调用脚本计算浦发银行 2024 年收 DMI 指标,Nx 取 [14,6] 。

AB
读取股票数据
5=call("dmi.splx",A4,[14,6])调用脚本计算 DMI

运行效果:

..

 SPL 可以在这里下载:免费下载。使用免费的桌面版就可以了,直接安装即可使用。专业程序员也可以使用这里的开源版,但需要自行配置部署。

SPL 配有系统的教程,这里有面向新手的课程(含视频):SPL程序设计语言 · 乾学院VIP课程 ,乾学院 也有更多学习资料。

http://www.xdnf.cn/news/6459.html

相关文章:

  • jq安装与使用
  • 麒麟系统进入bios的方法
  • 4.6/Q1,GBD数据库最新文章解读
  • 基于YOLOv5的葡萄病害智能识别系统开发实践
  • 从单线程到多线程:项目实战web Worker线程使用总结
  • idea常用插件
  • 通义灵码 2.5.4 版【**编程智能体**】初体验
  • worldquant rank函数
  • PH热榜 | 2025-05-15
  • # 基于Python的多摄像头监控与OCR识别系统
  • 修改一个表的相关操作语句
  • “DiT和Flux”与“Stable Diffusion”两种不同的生成模型范式
  • Vue中的自定义指令适用于哪些场景
  • 如何在 Windows 命令提示符中创建多个文件夹和多个文件
  • Python3 简易DNS服务器实现
  • redis持久化方式
  • buildroot使用外部编译链编译bluez蓝牙工具
  • 沃伦森智能无功补偿系统解决电力电容器频繁投切的隐患
  • 前端代码生成博客封面图片
  • Spring-messaging-MessageChannel的子接口PollableChannel
  • 软考软件评测师——计算机组成与体系结构
  • 学习日志07 java
  • 登录接口中图片验证码Tesseract-OCR识别Java脚本
  • 全息美AISEO引领AIGEO新趋势
  • centos7部署mysql5.7
  • C++ 函数声明,定义与命名空间的关系
  • 投影仪基础知识及选购方向小记②
  • Media Controller API 1. Introduction 翻译
  • 某某查响应数据解密逆向分析-js逆向
  • 边缘计算平台