算術移動平均線
所謂移動平均,首先是算術平均數,如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;
}
}