java 实现macd算法_java尝试编写macd,试验顶背离底背离
MACD是查拉尔·阿佩尔(Geral Appel)于1979年提出的,由一快及一慢指数移动平均(EMA)之间的差计算出来。“快”指短时期的EMA,而“慢”则指长时期的EMA,最常用的是12及26日EMA;
一般MACD的值是12日的平均值与26日平均值的差;SIGNAL是MACD9日平均值;HISTOGRAM是MACD与SIGNAL的差。
公式如下:
MACD:EMA(C,12)-EMA(C,26);
Signal:EMA(MACD,9);
Histogram:MACD-Signal;
顶背离和底背离的概念:
MACD指标的背离就是指MACD指标的图形的走势正好和K线图的走势方向正好相反。MACD指标的背离有顶背离和底背离两种。
(1)顶背离
当股价K线图上的股票走势一峰比一峰高,股价一直在向上涨,而MACD指标图形上的由红柱构成的图形的走势是一峰比一峰低,即当股价的高点比前一次的高点高、而MACD指标的高点比指标的前一次高点低,这叫顶背离现象。顶背离现象一般是股价在高位即将反转转势的信号,表明股价短期内即将下跌,是卖出股票的信号。
(2)底背离
底背离一般出现在股价的低位区。当股价K线图上的股票走势,股价还在下跌,而MACD指标图形上的由绿柱构成的图形的走势是一底比一底高,即当股价的低点比前一次低点底,而指标的低点却比前一次的低点高,这叫底背离现象。底背离现象一般是预示股价在低位可能反转向上的信号,表明股价短期内可能反弹向上,是短期买入股票的信号。
在这里,我们忽略MACD指标的具体计算过程,直接谈一谈本次实验,小编给出策略思想并贴出两种策略分别的回溯效果。
实验采取的两种策略:
1.快线向上突破慢线时,表明股市处于一种强势之中,股价将再次上涨,我们选择买进股票,反之,当慢线向上突破快线时,表明股市处于可能跌入弱市的状态,我们选择卖出股票;
2.底背离买进,顶背离卖出。
第一种策略
代码如下:
class MyStrategy extends Strategy {
private double prevDelta = 0;
String stock1 = "sha-601318";
MACDFactor fMacd = new MACDFactor(12, 26, 9);
public void init(BackTestContext context) {
universe.add(stock1);
}
public void prepare(BackTestContext context) {
}
public void handleData(BackTestContext context, BarData data) throws Exception {
double macdOut = fMacd.get(stock1, MACDFactor.RET_MACD);
double macdSignal = fMacd.get(stock1, MACDFactor.RET_MACD_SIGNAL);
double delta = macdOut - macdSignal;
record("macd", macdOut);
record("macd_signal", macdSignal);
record("macd_hist",delta);
if (prevDelta > 0 && delta < 0) {
log.info("Sell at "+""+context.now+delta);
orderTargetPercent(stock1, 0, "Sell all.");
} else if (prevDelta < 0 && delta > 0) {
log.info("Buy at "+context.now+delta);
orderPercent(stock1, 80, "Buy in.");
}
prevDelta = delta;
}
}
回溯效果:
第二种策略
代码如下:
class MyStrategy extends Strategy {
private double prevDelta = 0;
private double prevClose = 0;
private double countA = 0;
private double countB = 0;
String stock1 = "sha-601318";
MACDFactor fMacd = new MACDFactor(12, 26, 9);
public void init(BackTestContext context) {
universe.add(stock1);
}
public void prepare(BackTestContext context) {
}
public void handleData(BackTestContext context, BarData data) throws Exception {
log.info("time: "+context.now);
double delta = fMacd.get(stock1, MACDFactor.RET_MACD_HIST);
record("macd_hist", delta);
if (delta < prevDelta && data.get(stock1).close > prevClose) {
countB = 0;
if(countA%5 == 0 && countA != 0 ){
log.info("Sell at "+context.now+" "+delta);
orderTargetPercent(stock1, 0, "Sell all.");
}
else{
countA += 1;
}
}else if (delta > prevDelta && data.get(stock1).close < prevClose){
countA = 0;
if(countB%5 == 0 && countB != 0 ){
log.info("Buy at "+context.now+" "+delta);
orderPercent(stock1, 80, "Buy in.");
}else{
countB += 1;
}
}
prevDelta = delta;
prevClose = data.get(stock1).close;
}
}
回溯效果:
相比之下MACD底背离、顶背离,这个逻辑还是蛮狠的。回撤也挺小。
java 实现macd算法_java尝试编写macd,试验顶背离底背离相关推荐
- 聚宽macd底背离_老股民技巧一招鲜:MACD顶、底背离图解及近期实战应用,字字斗金...
macd指标参数最佳设置. 1. MACD指标参数如何设置 对于MACD指标参数,大多数分析软件会将其参数设置为12,26,9,即快速EMA参数设为12.慢速EMV指标设为26.DIF参数设为9. 从 ...
- java尝试编写macd,试验顶背离底背离
MACD是查拉尔·阿佩尔(Geral Appel)于1979年提出的,由一快及一慢指数移动平均(EMA)之间的差计算出来."快"指短时期的EMA,而"慢"则指长 ...
- java hilbert空间算法_Java中空间填充Hilbert曲线的递推算法
我正在学习用 Java编写代码,我已经学习了java编程的递归部分.我理解了递归方法的基础知识,并且我正在尝试编写填充希尔伯特曲线(和Levy C曲线)的空间,到目前为止,一切都顺利进行,直到实际的递 ...
- java 求交集 算法_Java计算交集,差集,并集的方法示例
Java计算交集,差集,并集的方法示例 发布时间:2020-10-07 10:37:46 来源:脚本之家 阅读:106 作者:benbenkui 本文实例讲述了Java计算交集,差集,并集的方法.分享 ...
- java密码学原型算法_java密码学原型算法实现——双线性对.pdf
java密码学原型算法实现--双线性对 Java 密码学原型算法实现--双线性对 1.背景介绍 如何使用jPBC 库进行双线性群初始化,包括: (1)质数阶双线性群(Prime-Order Bilin ...
- java快速查找算法_Java实现的快速查找算法示例
本文实例讲述了Java实现的快速查找算法.分享给大家供大家参考,具体如下: 快速查找算法,可以根据想要找的是第几个大的数,每次循环都能固定下来一个数在数组完整排完序之后的位置,每次循环都能定一个数的位 ...
- java常见的算法_Java常用算法总结(转)
交换排序 冒泡排序 将最后一个元素与倒数第二个元素对比,如果最后一个元素比倒数第二个小,则交换两个元素的位置,再用倒数第二个元素与倒数第三个元数对比,直到比到第一个元素,这样经过第一趟排序后得到第一个 ...
- java统计词频算法_java实现的统计字符算法示例
本文实例讲述了java实现的统计字符算法.分享给大家供大家参考,具体如下: 统计字符: 概述:给定字符串,将它们进行分类,分别的去统计它们的个数及其字符 分类的有:字母 数字 中文 空格 等等 算法思 ...
- java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例
所谓有权图,就是图中的每一条边上都会有相应的一个或一组值.通常情况下,这个值只是一个数字 如:在交通运输网中,边上的权值可能表示的是路程,也可能表示的是运输费用(显然二者都是数字).不过,边上的权值也 ...
最新文章
- AVR开发 Arduino方法(附四) 参考文献与网址
- Ambari在离线环境中安装Hadoop集群
- 2.Spring初学
- 高动态范围图像-单图
- js:封装获取当前元素的所有的哥哥元素节点
- gcp devops_将GCP AI平台笔记本用作可重现的数据科学环境
- C# WinForm 中Label自动换行 解决方法
- PostgreSQL查看版本信息
- UE4 iOS游戏开发
- NYOJ1 - A+B Problem
- 5.4(将英里转化位千米)
- 操作系统原理(七)文件系统
- 发生内部错误。请与 microsoft 支持部门联系。_设计变更、工程签证、确认单、工程洽商、联系单、会签的区别,一文搞懂...
- DWM1000模块简介
- 小米8se怎么解屏幕锁_黔隆科技刷机教程小米5SPLUS忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
- Java实现 蓝桥杯VIP 算法训练 调和数列
- Ubuntu下的onnxruntime(c++)编译
- 2022年自考专业(工商企业管理)生产与作业管理练习题
- 使用BS4爬取智联招聘
- CAD、3dmax等Autodesk系列软件安装报错1603解决办法
热门文章
- [MyBatis] 通过代码配置+XML文件构建SqlSessionFactory
- 【OpenCV】01-OpenCV的数据类型
- 学生选课系统---数据库课程设计SQL Server
- wpsppt插入html,WPS的做好的一个PPT 怎么插入到另一个PPT?
- Storm学习(一)Storm介绍
- 时空复杂度之珠心算测验
- 邓迪大学信息无障碍典型文献技术剖析
- 不间断电源 (UPS)全国产化电子元件推荐方案
- java命令行打包war_命令行打包 war文件
- 【转】在win10接双显示器(扩展模式)怎么把鼠标游标切换到第二台显示器上?