天软金融分析.NET函数大全 > 金融函数 > 技术分析 > 均线指标 > 计算公式

DSMA_I    

简述
求表达式X的指数移动平均, 与系统参数(证券、时间、周期、复权方式等)相关
定义
DSMA_I(Exp:TExpression ;a: Real;cF:String;dataN:Integer): Real
参数
名称类型说明
ExpTExpression TExpression型表达式,指标表达式
a Real实数,衰减因子值,取值[0,1]
cFString字符串,缓存标志,区别X表达式,若为nil则不进行缓存
特别说明:由于表达式无法区别,当调用DSMA_I求不同表达式的移动平均时,
若要缓存,需要用该标识来区别不同的表达式,以避免缓存误用
dataNInteger整型,向历史推移长度(一般>=100),若为nil或<=0,则默认推至上市日
若有效率要求,可设置该长度限制。
返回 Real实数
  • 算法

    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);
相关