您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

JAVA计算股票MACD,代码分享

时间:2022-01-20 11:40:32  来源:  作者:吴彬的分享

和软件的macD的值进行对比过,数值是一样的,不过我这个版本小数点后面更精确,软件的是四舍五入的。这个版本支持增量更新,更加方便。

使用需要单例模式,如果多并发请自行修改代码。默认是12,26,9

特别注意,网站上的和软件的MACD有时候并不一致,本文的计算结果以软件为准!!!

废话不多说,直接开干!

import JAVA.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Component;

@Component("macdUtils")
public class MacdUtils {

	static int fastSet = 12;
	static int slowSet = 26;
	static int deaSet = 9;

	static int emaFastFast = fastSet - 1;
	static int emaFastSlow = 2;
	static int emaFastBase = fastSet + 1;
	static int emaSlowFast = slowSet - 1;
	static int emaSlowSlow = 2;
	static int emaSlowBase = slowSet + 1;
	static int deaFast = deaSet - 1;
	static int deaSlow = 2;
	static int deaBase = deaSet + 1;

	public void init(int fastSetNum, int slowSetNum, int deaSetNum) {
		fastSet = fastSetNum;
		slowSet = slowSetNum;
		deaSet = deaSetNum;
		emaFastFast = fastSet - 1;
		emaFastSlow = 2;
		emaFastBase = fastSet + 1;
		emaSlowFast = slowSet - 1;
		emaSlowSlow = 2;
		emaSlowBase = slowSet + 1;
		deaFast = deaSet - 1;
		deaSlow = 2;
		deaBase = deaSet + 1;
	}

	public Map<String, BigDecimal> firstMACD(BigDecimal yestodayClose, BigDecimal nowClose) {
		Map<String, BigDecimal> macdInfoMap = new HashMap<>();
		BigDecimal EMA12Fast = yestodayClose.multiply(BigDecimal.valueOf(emaFastFast)).divide(BigDecimal.valueOf(emaFastBase), 6, RoundingMode.DOWN);
		BigDecimal EMA12Slow = nowClose.multiply(BigDecimal.valueOf(emaFastSlow)).divide(BigDecimal.valueOf(emaFastBase), 6, RoundingMode.DOWN);
		BigDecimal EMA12 = EMA12Fast.add(EMA12Slow);
		BigDecimal EMA26Fast = yestodayClose.multiply(BigDecimal.valueOf(emaSlowFast)).divide(BigDecimal.valueOf(emaSlowBase), 6, RoundingMode.DOWN);
		BigDecimal EMA26Slow = nowClose.multiply(BigDecimal.valueOf(emaSlowSlow)).divide(BigDecimal.valueOf(emaSlowBase), 6, RoundingMode.DOWN);
		BigDecimal EMA26 = EMA26Fast.add(EMA26Slow);
		BigDecimal DIF = EMA12.subtract(EMA26);
		BigDecimal DEA = BigDecimal.ZERO.multiply(BigDecimal.valueOf(deaFast)).divide(BigDecimal.valueOf(deaBase), 6, RoundingMode.DOWN)
				.add(DIF.multiply(BigDecimal.valueOf(2)).divide(BigDecimal.valueOf(deaBase), 6, RoundingMode.DOWN));
		BigDecimal MACD = DIF.subtract(DEA);
		macdInfoMap.put("EMA12", EMA12);
		macdInfoMap.put("EMA26", EMA26);
		macdInfoMap.put("DIF", DIF);
		macdInfoMap.put("DEA", DEA);
		macdInfoMap.put("MACD", MACD);
		return macdInfoMap;
	}

	public Map<String, BigDecimal> makeMACD(BigDecimal yesterdayEMA12, BigDecimal yesterdayEMA26, BigDecimal yesterdayDEA, BigDecimal nowClose) {
		Map<String, BigDecimal> macdInfoMap = new HashMap<>();
		BigDecimal EMA12Fast = yesterdayEMA12.multiply(BigDecimal.valueOf(emaFastFast)).divide(BigDecimal.valueOf(emaFastBase), 6, RoundingMode.DOWN);
		BigDecimal EMA12Slow = nowClose.multiply(BigDecimal.valueOf(emaFastSlow)).divide(BigDecimal.valueOf(emaFastBase), 6, RoundingMode.DOWN);
		BigDecimal EMA12 = EMA12Fast.add(EMA12Slow);
		BigDecimal EMA26Fast = yesterdayEMA26.multiply(BigDecimal.valueOf(emaSlowFast)).divide(BigDecimal.valueOf(emaSlowBase), 6, RoundingMode.DOWN);
		BigDecimal EMA26Slow = nowClose.multiply(BigDecimal.valueOf(emaSlowSlow)).divide(BigDecimal.valueOf(emaSlowBase), 6, RoundingMode.DOWN);
		BigDecimal EMA26 = EMA26Fast.add(EMA26Slow);
		BigDecimal DIF = EMA12.subtract(EMA26);
		BigDecimal DEA = yesterdayDEA.multiply(BigDecimal.valueOf(deaFast)).divide(BigDecimal.valueOf(deaBase), 6, RoundingMode.DOWN)
				.add(DIF.multiply(BigDecimal.valueOf(2)).divide(BigDecimal.valueOf(deaBase), 6, RoundingMode.DOWN));
		BigDecimal MACD = DIF.subtract(DEA);
		macdInfoMap.put("EMA12", EMA12);
		macdInfoMap.put("EMA26", EMA26);
		macdInfoMap.put("DIF", DIF);
		macdInfoMap.put("DEA", DEA);
		macdInfoMap.put("MACD", MACD);
		return macdInfoMap;
	}

}


Tags:JAVA   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
日志是发现错误和调试代码的便捷工具。除了日志的功能方面,从 Java 安全的角度来看,日志也很重要, 当发生安全漏洞时,你的日志文件是寻找所发生事件线索的第一个位置。 日志的质...【详细内容】
2022-01-26  Tags: JAVA  点击:(2)  评论:(0)  加入收藏
和软件的MACD的值进行对比过,数值是一样的,不过我这个版本小数点后面更精确,软件的是四舍五入的。这个版本支持增量更新,更加方便。使用需要单例模式,如果多并发请自行修改代码。...【详细内容】
2022-01-20  Tags: JAVA  点击:(9)  评论:(0)  加入收藏
1、阿里云DNS的SDK依赖<dependency> <groupId>com.aliyun</groupId> <artifactId>tea-openapi</artifactId> <version>0.0.19</version></dependency><dependency> <groupId...【详细内容】
2022-01-19  Tags: JAVA  点击:(9)  评论:(0)  加入收藏
闰年闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天(1月~12月分别为31天、29天、31天、...【详细内容】
2022-01-11  Tags: JAVA  点击:(15)  评论:(0)  加入收藏
正如我们所知,区块链的设计是不可变的。在这里,我们将设计一个简单的区块链,它将帮助您理解散列如何使区块链不可变,只需几行Java代码。注:这只是一个演示区块链,真正的区块链涉及...【详细内容】
2022-01-07  Tags: JAVA  点击:(17)  评论:(0)  加入收藏
预加载图片是提高用户体验的一个很好方法。图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度。这对图片画廊及图片占据很大比例的网站来说十...【详细内容】
2022-01-04  Tags: JAVA  点击:(21)  评论:(0)  加入收藏
说明面向对象的三个基本特征是:封装、继承、多态。call函数:预定义的JavaScript方法,用来调用所有者对象作为参数的方法。上节内容:面向对象,类、对象、属性、方法,静态属性和方法...【详细内容】
2022-01-04  Tags: JAVA  点击:(22)  评论:(0)  加入收藏
目录4、TCP网络传输的基本流程二、网络编程套接字(socket)5、cookie和session的用法6、基本实现http协议的代码四、传输层协议TCP和UDP4、TCP和UDP之间的对比六、数据链路层和...【详细内容】
2022-01-04  Tags: JAVA  点击:(21)  评论:(0)  加入收藏
JavaScript 的故事很长。在今天,JavaScript 的运行从移动设备到服务器端,无论您是计划在 2022 年学习或使用 JavaScript ,还是目前正在使用JavaScript进行开发,还是已经熟练掌握...【详细内容】
2021-12-30  Tags: JAVA  点击:(22)  评论:(0)  加入收藏
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  Tags: JAVA  点击:(22)  评论:(0)  加入收藏
▌简易百科推荐
日志是发现错误和调试代码的便捷工具。除了日志的功能方面,从 Java 安全的角度来看,日志也很重要, 当发生安全漏洞时,你的日志文件是寻找所发生事件线索的第一个位置。 日志的质...【详细内容】
2022-01-26  粤嵌教育    Tags:Java 日志   点击:(2)  评论:(0)  加入收藏
和软件的MACD的值进行对比过,数值是一样的,不过我这个版本小数点后面更精确,软件的是四舍五入的。这个版本支持增量更新,更加方便。使用需要单例模式,如果多并发请自行修改代码。...【详细内容】
2022-01-20  吴彬的分享    Tags:JAVA   点击:(9)  评论:(0)  加入收藏
1、阿里云DNS的SDK依赖<dependency> <groupId>com.aliyun</groupId> <artifactId>tea-openapi</artifactId> <version>0.0.19</version></dependency><dependency> <groupId...【详细内容】
2022-01-19  顶顶架构师    Tags:阿里云DNS   点击:(9)  评论:(0)  加入收藏
Maven是Java的项目配置管理工具,用来管理依赖,具体的用途就不展开说了。大部分项目,配置一个镜像仓库地址就可以了(单个mirror)。但是有的网上下载的项目需要从多个仓库查找对应...【详细内容】
2022-01-14  阿福ChrisYuan    Tags:Maven配置   点击:(15)  评论:(0)  加入收藏
闰年闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天(1月~12月分别为31天、29天、31天、...【详细内容】
2022-01-11  3班的黄同学    Tags:   点击:(15)  评论:(0)  加入收藏
目录4、TCP网络传输的基本流程二、网络编程套接字(socket)5、cookie和session的用法6、基本实现http协议的代码四、传输层协议TCP和UDP4、TCP和UDP之间的对比六、数据链路层和...【详细内容】
2022-01-04  顶顶架构师    Tags:JAVA   点击:(21)  评论:(0)  加入收藏
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(22)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(43)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(34)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(33)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条