统计学分析公式 MA移动平均线

来源:互联网 发布:信达软件下载 编辑:程序博客网 时间:2024/05/16 19:10

算术移动平均线

  所谓移动平均,首先是算术平均数,如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;            }        }


原创粉丝点击