天天看點

統計學分析公式 MA移動平均線

算術移動平均線

  所謂移動平均,首先是算術平均數,如1到10十個數字,其平均數便是5.5;而移動則意味着這十個數字的變動。假如第一組是1到10,第二組變動成2到11,第三組又變為3到12,那麼,這三組平均數各不相同。而這些不同的平均數的集合,便統稱為移動平均數   舉例說明:某股連續十個 交易 日收盤價分别為:(機關:元)   8.15、 8.07、 8.84、 8.10、 8.40、 9.10、 9.20、 9.10、 8.95、 8.70   以五天 短期均線 為例:   第五天均值=(8.15+8.07+8.84+8.10+8.40)/5=8.31   第六天均值=(8.07+8.84+8.10+8.40+9.10)/5=8.50   第七天均值=(8.84+8.10+8.40+9.10+9.20)/5=8.73   第八天均值=(8.10+8.40+9.10+9.20+9.10)/5=8.78   第九天均值=(8.40+9.10+9.20+9.10+8.95)/5=8.95   第十天均值=(9.10+9.20+9.10+8.95+8.70)/5=9.01

算法代碼實作

//統計學分析公式,算數移動平均線
        public decimal[] shuanshupingjunxian(decimal[] dec, int day)
        {
            if (day <= dec.Length)
            {
                decimal[] zs = new decimal[dec.Length - day + 1];
                if (dec.Length > 0)
                {
                    int d = 0;
                    int js = 0;
                    while (d < dec.Length - 1)
                    {
                        decimal he = 0;
                        for (int i = 0; i < day; i++)
                        {
                            if ((i + d) <= dec.Length - 1)
                            {
                                he += dec[i + d];
                            }

                        }
                        try
                        {
                            zs[js] = (he / (decimal)day);
                        }
                        catch (Exception e)
                        {
                            string ssd = e.ToString();
                        }
                        ++d;
                        js += 1;
                    }
                }
                return zs;
            }
            else
            {
                return null;
            }
                

        }
           

權重移動平均線

  權重的原因是基于移動平均線中,最近一日的收盤價對未來價格波動的影響最大,是以賦予它較大的權值。權重方式分為四種:   1.末日權重移動平均線:   計算公式: MA(N)=(C1+C2+……+Cn×2)/(n+1)   2.線性權重移動平均線:   計算公式: MA=(C1×1+C2×2+……+Cn×n)/(1+2+...+n)   3.梯型權重移動平均線:   計算方法(以5日為例):   [(第1日收盤價+第2日收盤價)×1+(第2日收盤價+第3日收盤價)×2+(第3日收盤價+第4日收盤價)×3+(第4日收盤價+第5日收盤價)×4]/(2×1+2×2+2×3+2×4)即為第五日的階梯權重移動平均線   4.平方系數權重移動平均線:   公式(以5日為例):   MA=[(第1日收盤價×1×1)+( 第2日收盤價×2×2)+( 第3日收盤價×3×3)+( 第4日收盤價×4×4)+( 第5日收盤價×5×5)]/(1×1+2×2+3×3+4×4+5×5)

算法實作

//統計學分析公式,權重移動平均線之平方系數
        public decimal[] jiaquanyidongpingjunxian(decimal[] dec, int day)
        {
            if (day <= dec.Length)
            {
                decimal[] zs = new decimal[dec.Length - day + 1];
                if (dec.Length > 0)
                {
                    int d = 0;
                    int js = 0;
                    while (d < dec.Length - 1)
                    {
                        decimal he = 0;
                        decimal chu = 0;
                        for (int i = 0; i < day; i++)
                        {
                            if ((i + d) <= dec.Length - 1)
                            {
                                he += dec[i + d]*(decimal)(i+1)*(decimal)(i+1);
                                chu += (decimal)(i + 1) * (decimal)(i + 1);
                            }

                        }
                        try
                        {
                            zs[js] = (he / chu);
                        }
                        catch (Exception e)
                        {
                            string ssd = e.ToString();
                        }
                        ++d;
                        js += 1;
                    }
                }
                return zs;
            }
            else
            {
                return null;
            }
                
        }
           

指數平滑移動平均線

  當指數平滑移動平均線起算基期不同時,起算基期較晚的計算結果會與起基期較早的數字有所差異。比如從10月30日起算5日指數平滑移動平均線的人,他所計算出的11月5日的數字一般和9和10日起算的人所到的11月5日的指數平滑移動平均線有所不同。這一差異經過稍長一段時間的平滑運算以後會趨于一緻,不會有 大的差異。是以,投資者在計算EMA時或運用EMA技巧的技術名額如RSI和KD線時,如計算與他人數字有出入,關非運算有錯誤。   根據上述現象,投資者不見得需要用算術移動平均線來運算EMA的第一個值,事實上第二日即可算出5日EMA或10日EMA。   從5日指數平滑移動平均線為例,計算方式是首先以算術移動平均線計算出第一移動平均線,第二個移動平均線為:(第6日收盤價×1/5)+(前一日移動平均線×4/5)   公式EMA=C6*1/5+EMA5*4/5

算法實作

//統計學分析公式,指數平滑移動平均線
        public decimal[] zhishupinghuayidongpingjunxian(decimal[] dec, int day)
        {
            if (day <= dec.Length)
            {
                decimal[] zs = new decimal[dec.Length ];
                if (dec.Length > 0)
                {
                    int d = 0;
                    int js = 0;
                    while (d < dec.Length )
                    {
                        decimal he = 0;
                        if (js == 0)
                        {
                            for (int i = 0; i < day; i++)
                            {
                                if ((i + d) <= dec.Length - 1)
                                {
                                    he += dec[i + d];
                                }

                            }
                            try
                            {
                                zs[js] = (he / (decimal)day);
                            }
                            catch (Exception e)
                            {
                                string ssd = e.ToString();
                            }
                        }
                        else
                        {
                            zs[js] = (dec[d] * 1.00M) / (decimal)day + (zs[js - 1] * ((decimal)day - 1)) / (decimal)day;
                        }
                        ++d;
                        js += 1;
                    }
                }
                return zs;
            }
            else
            {
                return null;
            }
        }