和软件的MACD的值进行对比过,数值是一样的,不过我这个版本小数点后面更精确,软件的是四舍五入的。这个版本支持增量更新,更加方便。 使用需要单例模式,如果多并发请自行修改代码。默认是12,26,9 特别注意,网站上的和软件的MACD有时候并不一致,本文的计算结果以软件为准!!! 废话不多说,直接开干!importjava。math。BigDimportjava。math。RoundingMimportjava。util。HashMimportjava。util。Mimportorg。springframework。stereotype。CComponent(macdUtils)publicclassMacdUtils{staticintfastSet12;staticintslowSet26;staticintdeaSet9;staticintemaFastFastfastSet1;staticintemaFastSlow2;staticintemaFastBasefastSet1;staticintemaSlowFastslowSet1;staticintemaSlowSlow2;staticintemaSlowBaseslowSet1;staticintdeaFastdeaSet1;staticintdeaSlow2;staticintdeaBasedeaSet1;publicvoidinit(intfastSetNum,intslowSetNum,intdeaSetNum){fastSetfastSetNslowSetslowSetNdeaSetdeaSetNemaFastFastfastSet1;emaFastSlow2;emaFastBasefastSet1;emaSlowFastslowSet1;emaSlowSlow2;emaSlowBaseslowSet1;deaFastdeaSet1;deaSlow2;deaBasedeaSet1;}publicMapString,BigDecimalfirstMACD(BigDecimalyestodayClose,BigDecimalnowClose){MapString,BigDecimalmacdInfoMapnewHashMap();BigDecimalEMA12FastyestodayClose。multiply(BigDecimal。valueOf(emaFastFast))。pide(BigDecimal。valueOf(emaFastBase),6,RoundingMode。DOWN);BigDecimalEMA12SlownowClose。multiply(BigDecimal。valueOf(emaFastSlow))。pide(BigDecimal。valueOf(emaFastBase),6,RoundingMode。DOWN);BigDecimalEMA12EMA12Fast。add(EMA12Slow);BigDecimalEMA26FastyestodayClose。multiply(BigDecimal。valueOf(emaSlowFast))。pide(BigDecimal。valueOf(emaSlowBase),6,RoundingMode。DOWN);BigDecimalEMA26SlownowClose。multiply(BigDecimal。valueOf(emaSlowSlow))。pide(BigDecimal。valueOf(emaSlowBase),6,RoundingMode。DOWN);BigDecimalEMA26EMA26Fast。add(EMA26Slow);BigDecimalDIFEMA12。subtract(EMA26);BigDecimalDEABigDecimal。ZERO。multiply(BigDecimal。valueOf(deaFast))。pide(BigDecimal。valueOf(deaBase),6,RoundingMode。DOWN)。add(DIF。multiply(BigDecimal。valueOf(2))。pide(BigDecimal。valueOf(deaBase),6,RoundingMode。DOWN));BigDecimalMACDDIF。subtract(DEA);macdInfoMap。put(EMA12,EMA12);macdInfoMap。put(EMA26,EMA26);macdInfoMap。put(DIF,DIF);macdInfoMap。put(DEA,DEA);macdInfoMap。put(MACD,MACD);returnmacdInfoM}publicMapString,BigDecimalmakeMACD(BigDecimalyesterdayEMA12,BigDecimalyesterdayEMA26,BigDecimalyesterdayDEA,BigDecimalnowClose){MapString,BigDecimalmacdInfoMapnewHashMap();BigDecimalEMA12FastyesterdayEMA12。multiply(BigDecimal。valueOf(emaFastFast))。pide(BigDecimal。valueOf(emaFastBase),6,RoundingMode。DOWN);BigDecimalEMA12SlownowClose。multiply(BigDecimal。valueOf(emaFastSlow))。pide(BigDecimal。valueOf(emaFastBase),6,RoundingMode。DOWN);BigDecimalEMA12EMA12Fast。add(EMA12Slow);BigDecimalEMA26FastyesterdayEMA26。multiply(BigDecimal。valueOf(emaSlowFast))。pide(BigDecimal。valueOf(emaSlowBase),6,RoundingMode。DOWN);BigDecimalEMA26SlownowClose。multiply(BigDecimal。valueOf(emaSlowSlow))。pide(BigDecimal。valueOf(emaSlowBase),6,RoundingMode。DOWN);BigDecimalEMA26EMA26Fast。add(EMA26Slow);BigDecimalDIFEMA12。subtract(EMA26);BigDecimalDEAyesterdayDEA。multiply(BigDecimal。valueOf(deaFast))。pide(BigDecimal。valueOf(deaBase),6,RoundingMode。DOWN)。add(DIF。multiply(BigDecimal。valueOf(2))。pide(BigDecimal。valueOf(deaBase),6,RoundingMode。DOWN));BigDecimalMACDDIF。subtract(DEA);macdInfoMap。put(EMA12,EMA12);macdInfoMap。put(EMA26,EMA26);macdInfoMap。put(DIF,DIF);macdInfoMap。put(DEA,DEA);macdInfoMap。put(MACD,MACD);returnmacdInfoM}}