DDI(方向标准离差指标)
DDI 指标,即方向标准离差指数,一般用于观察一段时间内股价相对于前一天向上波动和向下波动的比例,并对其进行移动平均分析。
计算方法:
1、TR=(最高价 - 昨日最高价)的绝对值与(最低价 - 昨日最低价)的绝对值两者之间较大者。
2、如果(最高价 + 最低价)<=(昨日最高价 + 昨日最低价),DMZ=0,
如果(最高价 + 最低价)>(昨日最高价 + 昨日最低价),DMZ=(最高价 - 昨日最高价)的绝对值与(最低价 - 昨日最低价)的绝对值中较大值。
3、如果(最高价 + 最低价)>=(昨日最高价 + 昨日最低价),DMF=0,
如果(最高价 + 最低价)<(昨日最高价 + 昨日最低价),DMZ=(最高价 - 昨日最高价)的绝对值与(最低价 - 昨日最低价)的绝对值中较大值。
4、DIZ=N 个周期 DMZ 的和 /(N 个周期 DMZ 的和 +N 个周期 DMF 的和)
5、DIF=N 个周期 DMF 的和 /(N 个周期 DMF 的和 +N 个周期 DMZ 的和)
6、DDI=DIZ-DIF
7、ADDI=DDI 在一定周期 N1 内的加权平均,权重为 M
8、AD=ADDI 在一定周期内 M1 的简单移动平均
通常参数 N=13,N1=26,M=1,M1=5
指标参数:
y1 |
DDI输出列 |
y2 |
ADDI输出列 |
y3 |
AD输出列 |
n1 |
周期 1,如 13 |
n2 |
周期 2,如 25 |
n3 |
周期 3,如 5 |
m |
权重,如 1 |
脚本代码:
A |
B |
|
1 |
func DDI(A,$y1,$y2,$y3,n1,n2,n3,m) |
=A.derive@o(:ddi_tr,:ddi_dmz,:ddi_dmf,:ddi_diz,:ddi_dif) |
2 |
=A.run(max(abs( 最高 - 最高 [-1]),abs(最低 - 最低 [-1])):ddi_tr, if((最高 + 最低)<=(最高 [-1]+ 最低 [-1]),0,max(abs( 最高 - 最高 [-1]),abs(最低 - 最低 [-1]))):ddi_dmz, if((最高 + 最低)>=(最高 [-1]+ 最低 [-1]),0,max(abs( 最高 - 最高 [-1]),abs(最低 - 最低 [-1]))):ddi_dmf) |
|
3 |
=A.run(sum(ddi_dmz[1-n1:0])/(sum(ddi_dmz[1-n1:0])+sum(ddi_dmf[1-n1:0])):ddi_diz, sum(ddi_dmf[1-n1:0])/(sum(ddi_dmf[1-n1:0])+sum(ddi_dmz[1-n1:0])):ddi_dif) |
|
4 |
=A.run(ddi_diz-ddi_dif:${y1}, (m*${y1}+(n2-m)*${y2}[-1])/n2:${y2}, avg(${y2}[1-n3:0]):${y3}) |
|
5 |
=A.alter(;ddi_tr,ddi_dmz,ddi_dmf,ddi_diz,ddi_dif) |
将函数保存在 indicator.splx 中。
例如,调用脚本计算浦发银行 2024 年的 DDI 指标,N 取 [13,26,1,5]。
A |
B |
|
… |
… |
… |
5 |
=call@f("indicator.splx") |
登记脚本中的函数 |
6 |
… |
计算出源数据 |
7 |
=A6.derive(:DDI,:ADDI,:AD) |
增加要返回的指标字段 |
8 |
=DDI(A7,DDI,ADDI,AD,13,26,5,1) |
调用函数计算指标 |
运行效果: