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课程 ,乾学院 也有更多学习资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值