• EMA指标和MACD指标的JAVA语言实现


    转:http://blog.csdn.net/byronm/article/details/8062307

    最近做的项目需要实现EMA和MACD,但苦于网上没有具体的实现算法。所以自己尝试着编写了一套。

    已经和通达信等主流股票分析软件核对过结果,并将其开源放在GitHub上,含Junit 测试用例。

    GitHub地址:https://github.com/wizardbyron/finance-indicators

    1.       /** 
    2.  * Calculate EMA, 
    3.  *  
    4.  * @param list 
    5.  *            :Price list to calculate,the first at head, the last at tail. 
    6.  * @return 
    7.  */  
    8. public static final Double getEXPMA(final List<Double> list, final int number) {  
    9.     // 开始计算EMA值,  
    10.     Double k = 2.0 / (number + 1.0);// 计算出序数  
    11.     Double ema = list.get(0);// 第一天ema等于当天收盘价  
    12.     for (int i = 1; i < list.size(); i++) {  
    13.         // 第二天以后,当天收盘 收盘价乘以系数再加上昨天EMA乘以系数-1  
    14.         ema = list.get(i) * k + ema * (1 - k);  
    15.     }  
    16.     return ema;  
    17. }  
    18.   
    19. /** 
    20.  * calculate MACD values 
    21.  *  
    22.  * @param list 
    23.  *            :Price list to calculate,the first at head, the last at tail. 
    24.  * @param shortPeriod 
    25.  *            :the short period value. 
    26.  * @param longPeriod 
    27.  *            :the long period value. 
    28.  * @param midPeriod 
    29.  *            :the mid period value. 
    30.  * @return 
    31.  */  
    32. public static final HashMap<String, Double> getMACD(final List<Double> list, final int shortPeriod, final int longPeriod, int midPeriod) {  
    33.     HashMap<String, Double> macdData = new HashMap<String, Double>();  
    34.     List<Double> diffList = new ArrayList<Double>();  
    35.     Double shortEMA = 0.0;  
    36.     Double longEMA = 0.0;  
    37.     Double dif = 0.0;  
    38.     Double dea = 0.0;  
    39.   
    40.     for (int i = list.size() - 1; i >= 0; i--) {  
    41.         List<Double> sublist = list.subList(0, list.size() - i);  
    42.         shortEMA = Indicators.getEXPMA(sublist, shortPeriod);  
    43.         longEMA = Indicators.getEXPMA(sublist, longPeriod);  
    44.         dif = shortEMA - longEMA;  
    45.         diffList.add(dif);  
    46.     }  
    47.     dea = Indicators.getEXPMA(diffList, midPeriod);  
    48.     macdData.put("DIF", dif);  
    49.     macdData.put("DEA", dea);  
    50.     macdData.put("MACD", (dif - dea) * 2);  
    51.     return macdData;  
    52. }  
  • 相关阅读:
    [NOIP2011提高组]聪明的质监员
    NOIP 2010 关押罪犯
    题目:埃及分数
    用scanf输入long long 型的数
    poj 1014 Dividing
    Cactus
    SQLite数据库的增删改查代码
    UltraGrid常用方法属性代码
    维护数据表常用SQL语句
    C#备份收藏夹代码
  • 原文地址:https://www.cnblogs.com/xhqgogogo/p/3386426.html
Copyright © 2020-2023  润新知