股票K线图指标之MACD程序开发-C#源码示例

在进行C# K线图程序开发之前首先得熟悉下MACD算法:

MACD指标的计算方法

MACD在应用上,首先计算出快速移动平均线(即EMA1)和慢速移动平均线(即EMA2),以此两个数值,来作为测量两者(快慢速线)间的离差值(DIF)的依据,然后再求DIF的N周期的平滑移动平均线DEA(也叫MACD、DEM)线。
以EMA1的参数为12日,EMA2的参数为26日,DIF的参数为9日为例来看看MACD的计算过程

1、计算移动平均值(EMA)
12日EMA的算式为
EMA(12)=前一日EMA(12)×11/13+今日收盘价×2/13
26日EMA的算式为
EMA(26)=前一日EMA(26)×25/27+今日收盘价×2/27

2、计算离差值(DIF)
DIF=今日EMA(12)-今日EMA(26)

3、计算DIF的9日EMA
根据离差值计算其9日的EMA,即离差平均值,是所求的MACD值。为了不与指标原名相混淆,此值又名DEA或DEM。
今日DEA(MACD)=前一日DEA×8/10+今日DIF×2/10

MACD 通达信同花顺类软件的算法源码

DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG); 
DEA : EMA(DIFF,M); 
MACD : 2*(DIFF-DEA); 
Zero : 0;

 

MACD C#源码算法示例

/// <summary>  
        /// MACD算法  
        /// </summary>  
        /// <param name="n1">12</param>  
        /// <param name="n2">26</param>  
        /// <param name="n3">9</param>  
        /// <param name="day">K线数据</param>  
        /// <returns></returns>  
        public static List<KLinfo> ComputationMACD2(int SHORT, int LONG, int M, List<KLinfo> KLStocklist)  
        {  
            for (int i = 0; i < KLStocklist.Count;i++ )  
            {  
  
                if (KLStocklist[i].KID == 1)  
                {  
                    KLStocklist[i].Ema12Value = KLStocklist[i].ClosePrice;  
                    KLStocklist[i].Ema26Value = KLStocklist[i].ClosePrice;  
                    KLStocklist[i].DifValue = KLStocklist[i].Ema12Value - KLStocklist[i].Ema26Value;  
                    KLStocklist[i].DeaValue = KLStocklist[i].DifValue;  
                    KLStocklist[i].MacdValue = 2.0 * (KLStocklist[i].DifValue - KLStocklist[i].DeaValue);  
                }  
                else  
                {  
                    KLStocklist[i].Ema12Value = (2 * KLStocklist[i].ClosePrice + (SHORT - 1) * KLStocklist[KLStocklist[i].KID - 2].Ema12Value) / (SHORT + 1);  
                    KLStocklist[i].Ema26Value = (2 * KLStocklist[i].ClosePrice + (LONG - 1) * KLStocklist[KLStocklist[i].KID - 2].Ema26Value) / (LONG + 1);  
                    KLStocklist[i].DifValue = KLStocklist[i].Ema12Value - KLStocklist[i].Ema26Value;  
                    KLStocklist[i].DeaValue = (2 * KLStocklist[i].DifValue + (M - 1) * KLStocklist[KLStocklist[i].KID - 2].DeaValue) / (M + 1);  
                    KLStocklist[i].MacdValue = 2.0 * (KLStocklist[i].DifValue - KLStocklist[i].DeaValue);  
  
                }  
            }  
  
             return KLStocklist;  
        }

 

分享到:

评论已关闭