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

DSMA_II    

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

    Y=a*X+(1-a)*Y'  
    注:其中Y'表示上一周期Y值,a值在[0,1]
    X为函数中的Exp表达式,a为函数中的Expa衰减因子表达式。
    范例

    范例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_II(@close(),@stockhsl3()/100); //不做缓存

    //结果:64.7879157815069
    范例02:
    //取股票在一段时间内收盘价的动态移动平均。
    begt:=20180801T;
    endt:=20180827T;
    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(),'dma',DSMA_II(@close(),@stockhsl3()/100,'close&stockhsl3')); //缓存

    //结果:
    date dma
    2018-08-01 71.389605
    2018-08-02 71.036233
    2018-08-03 70.791032
    2018-08-06 69.995466
    2018-08-07 69.286921
    2018-08-08 68.635414
    2018-08-09 68.112177
    2018-08-10 67.714617
    2018-08-13 67.430301
    2018-08-14 67.222879
    2018-08-15 66.991303
    2018-08-16 66.754820
    2018-08-17 66.086628
    2018-08-20 65.782006
    2018-08-21 65.530975
    2018-08-22 65.322343
    2018-08-23 65.124006
    2018-08-24 64.955957
    2018-08-27 64.787916

    范例03:
    setsysparam(pn_stock(),'SZ002926');//SZ002926
      setsysparam(pn_date(),20200113T); //20180312T
      setsysparam(pn_rate(),1);
      setsysparam(pn_rateday(),20200113T);
      N:=30;
      AA:=@(2*CLOSE()+LOW()+HIGH())/4;
      BB:=@MA(CLOSE(),N);
      CC:=@(ABS(eval(AA)-eval(BB))/eval(BB));
      DD:=@stockzf3()/100;
    //第三个参数:若需要缓存,请注意,缓存标志是用户自己定义的串,不同表达式(表达式一,表达式二有任何不一致时)缓存字符串必须不一样,否则会计算错误
    //第四个参数:只向历史推导100次->对于表达式算法较为复杂的可考虑此用法
      t1:= DSMA_II(AA,CC,'aa');
      t2:= DSMA_II(AA,CC,'cc',100);
      t3:= DSMA_II(AA,DD,'dd',100);
      return array(t1,t2,t3);
    //结果:array(10.65002510798311,10.6416859095779,9.390332085877599)
相关