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
以代码 600000 的股票数据为例,计算其 2024 年的 DDI,N=13,N1=26,M=1,M1=5。
代码示例:
A |
|
1 |
600000 |
2 |
2024-01-01 |
3 |
2024-12-31 |
4 |
=call("adjustprice.splx", "", call("loadkday.splx", A1, A2,A3) ) |
5 |
13 |
6 |
26 |
7 |
1 |
8 |
5 |
9 |
=A4.new(code,tdate,max(abs( high - high [-1]),abs(low - low [-1])):TR, if((high + low)<=(high [-1]+ low [-1]),0,max(abs( high - high [-1]),abs(low - low [-1]))):DMZ, if((high + low)>=(high [-1]+ low [-1]),0,max(abs( high - high [-1]),abs(low - low [-1]))):DMF) |
10 |
=A9.derive(sum(DMZ[1-A5:0])/(sum(DMZ[1-A5:0])+sum(DMF[1-A5:0])):DIZ, sum(DMF[1-A5:0])/(sum(DMF[1-A5:0])+sum(DMZ[1-A5:0])):DIF) |
11 |
=A10.new(code,tdate,DIZ-DIF:DDI1, (A7*DDI1+(A6-A7)*ADDI[-1])/A6:ADDI, avg(ADDI[1-A8:0]):AD1) |
A1-A4 读取股票数据
A5-A8 输入时间周期
A9 计算 TR, DMZ 和 DMF
A10 计算 DIZ 和 DIF
A11 计算 DDI1, ADDI 和 AD1
为了使用方便,可以用封装成脚本供调用,脚本保存为 ddi.splx。
脚本代码:
A |
|
1 |
=data.new(tdate,max(abs(high-high[-1]),abs(low-low[-1])):TR,if((high+low)<=(high[-1]+low[-1]),0,max(abs(high-high[-1]),abs(low-low[-1]))):DMZ,if((high+low)>=(high[-1]+low[-1]),0,max(abs(high-high[-1]),abs(low-low[-1]))):DMF) |
2 |
=A1.derive(sum(DMZ[1-N(1):0])/(sum(DMZ[1-N(1):0])+sum(DMF[1-N(1):0])):DIZ, sum(DMF[1-N(1):0])/(sum(DMF[1-N(1):0])+sum(DMZ[1-N(1):0])):DIF) |
3 |
=A2.new(tdate,DIZ-DIF:DDI1, (N(3)*DDI1+(N(2)-N(3))*ADDI[-1])/N(2):ADDI, avg(ADDI[1-N(4):0]):AD1) |
此代码比较短,和前面章节的 MA 一样,可以用 func 的形式保存在 index.splx 中。
参数:
data |
序表,某支股票的日线数据 |
N |
序列,时间周期,如 [13,26,1,5] |
返回数据集结构:
code |
股票代码 |
tdate |
日期 |
DDI1 |
方向标准离差指数 |
ADDI |
DDI 在一定周期内的加权平均 |
AD1 |
ADDI 在一定周期内的简单移动平均 |
例如,调用脚本计算浦发银行 2024 年的 DDI 指标,N 取 [13,26,1,5]。
A |
B |
|
… |
… |
计算出源数据 |
5 |
=call("ddi.splx",A4,[13,26,1,5]) |
调用脚本 |
运行效果: