请求达人看看这个macd计算的问题

Discussion in 'Julia / MATLAB / SAS' started by lu2902, Aug 8, 2009.

  1. %macro ema(n1=);

    data t.index_m;

    do readit=2 to totobs ;
    set t.index_m2 point=readit nobs=totobs;
    leam1=lag(ema1_&n1);

    ema1_&n1=(2*point+%eval(&n1-1)*leam1)/%eval(&n1+1);

    output;
    drop leam1 leam2;
    end;


    stop;
    run;
    %mend;

    %ema(n1=12)

    请求达人帮我看看这段代码的问题。
    计算说明:

    t.index_m2 数据集中已有变量date,ema1_12,point ,已按时间顺序排好序,要求从该数据集的第二个观测起重新计算ema12
    计算规则:
    今日ema12=前一日ema12*(12-1)/(12+1) +2/(12+1)*point
    我写了上面的代码却发现计算结果不对,请求高人指点,不胜感激!!
     
  2. 初值计算不对。n=12, 第一个值应该在12这个点,前11个点没有值。ema 跟简单平均的区别只是权重,n=12简单平均的第一值在哪一个点。 第一个值得计算公式是独立的,我都提到简单平均了,你对比一下,改变权重,就是了。另外这个问题,作为一个细节,不是很简单的,我思考了10分钟,呵呵