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