ADTM(动态买卖人气指标)

动态买卖人气指标(ADTM)是用开盘价的向上波动幅度和向下波动幅度的距离差值来描述人气高低的指标。ADTM 指标在 +1 到 -1 之间波动。低于 -0.5 时为低风险区, 高于 +0.5 时为高风险区,需注意风险。

计算方法:
1. 如果开盘价≤昨日开盘价,DTM=0
如果开盘价 > 昨日开盘价,DTM=(最高价 - 开盘价) 和 (开盘价 - 昨日开盘价) 的较大值
2. 如果开盘价≥昨日开盘价,DBM=0
如果开盘价 < 昨日开盘价,DBM=(开盘价 - 最低价) 和 (开盘价 - 昨日开盘价) 的较大值
3.STM=DTM 在 N 日内的和
4.SBM=DBM 在 N 日内的和
5. 如果 STM>SBM,ADTM=(STM-SBM)/STM
如果 STM<SBM,ADTM=(STM-SBM)/SBM
如果 STM=SBM,ADTM=0
6.MAADTM=ADTM 的 M 日简单移动平均
7. 参数 N 设置为 23 日,参数 M 设置为 8 日

指标参数:

y1

ADTM输出列

y2

MAADTM输出列

n

数字,时间周期 N,如 23

m

数字,时间周期 M,如 8


函数代码:


A

B

1

func ADTM(A,$y1,$y2,n,m)

=A.derive@o(:adtm_dtm,:adtm_dbm,adtm_stm,:adtm_sbm)

2


=A.run(if( 开盘 <= 开盘 [-1],0,max((最高 - 开盘),(开盘 - 开盘 [-1]))):adtm_dtm,if(开盘 >= 开盘 [-1],0,max((开盘 - 最低),(开盘 - 开盘 [-1]))):adtm_dbm)

3


=A.run(sum(adtm_dtm[1-n:0]):adtm_stm,sum(adtm_dbm[1-n:0]):adtm_sbm)

4


=A.run(if(adtm_stm>adtm_sbm,(adtm_stm-adtm_sbm)/adtm_stm,if(adtm_stm==adtm_sbm,0,(adtm_stm-adtm_sbm)/adtm_sbm)):${y1},avg(${y1}[1-m:0]):${y2})

5


=A.alter(;adtm_dtm,adtm_dbm,adtm_stm,adtm_sbm)

将函数保存在 indicator.splx 中。

举例:

调用函数计算浦发银行 2024 年的 SDTM,n、m 分别取 23 和 8。


A

B


5

=call@f("indicator.splx")

登记脚本中的函数

6

计算出源数据

7

=A6.derive(:ADTM,:MAADTM)

增加要返回的指标字段

8

=ADTM(A7,ADTM,MAADTM,23,8)

调用函数计算指标

运行效果:

..