Y=a*X+(1-a)*Y'
注:其中Y'表示上一周期Y值,a值在[0,1]
X为函数中的Exp表达式,a为函数中的衰减因子。
范例01:
//计算SH603260在20180827日收盘价的指数移动平均。
endt:=20180827T;
Setsysparam(pn_stock(),'SH603260');
setsysparam(pn_cycle(),cy_day());
Setsysparam(pn_date(),endt);
setsysparam(pn_rate(),1);
setsysparam(pn_rateday(),endt);
return DSMA_I(@close(),0.2);//不做缓存
//结果:59.5063949110518
范例02:
//取股票在一段时间内收盘价与开盘价的指数移动平均。
endt:=20180827T;
begt:=20180801T;
Setsysparam(pn_stock(),'SH603260');
setsysparam(pn_cycle(),cy_day());
Setsysparam(pn_date(),endt);
setsysparam(pn_rate(),1);
setsysparam(pn_rateday(),endt);
n:=tradedays(begt,endt);
//第三个参数:若需要缓存,请注意,缓存标志是用户自己定义的串,不同表达式缓//存字符串必须不一样,否则会计算错误
return nday(n,'date',sp_time(),'dma1',DSMA_I(@close(),0.2,'close'),'dma2',DSMA_I(@open(),0.2,'open'));
//结果:
date |
dma1 |
dma2 |
2018-08-01 |
69.73085 |
70.41399 |
2018-08-02 |
68.82668 |
69.69519 |
2018-08-03 |
67.66334 |
68.73215 |
2018-08-06 |
65.70867 |
67.44372 |
2018-08-07 |
64.40494 |
65.59498 |
2018-08-08 |
62.69995 |
64.13598 |
2018-08-09 |
61.83796 |
62.49279 |
2018-08-10 |
61.42637 |
61.67623 |
2018-08-13 |
61.30910 |
61.06298 |
2018-08-14 |
61.19128 |
60.99039 |
2018-08-15 |
61.16902 |
60.94831 |
2018-08-16 |
61.23522 |
60.65865 |
2018-08-17 |
60.49017 |
60.88292 |
2018-08-20 |
60.04814 |
60.10433 |
2018-08-21 |
59.83651 |
59.71947 |
2018-08-22 |
59.56921 |
59.55757 |
2018-08-23 |
59.56937 |
59.28006 |
2018-08-24 |
59.37549 |
59.30005 |
2018-08-27 |
59.50639 |
59.23004 |
范例03:
setsysparam(pn_stock(),'SZ002926');
setsysparam(pn_date(),20200113T);
setsysparam(pn_rate(),1);
setsysparam(pn_rateday(),20200113T);
a:=0.02;
AA:=@(2*CLOSE()+LOW()+HIGH())/4;
BB:=@stockzf3();
//第四个参数:只向历史推导100次->对于表达式算法较为复杂的可考虑此用法
t1:= DSMA_I(AA,a,'aa',100);
t2:= DSMA_I(AA,a,'aa2');
t3:=DSMA_I(BB,a,'bb');
return array(t1,t2,t3);
//返回:array(9.9581996332979,10.0810464635677);