计算macd、jdk、rsi
package stock.simulator.trader.web.indicatrixinterface;public interface Indicatrix {/*** 计算MACD指标数据* * @param closePrice--收盘价要从第一天开始* @param fastPeriod--日快线移动平均,标准为12* @param slowPeriod--日慢线移动平均,标准为26* @param signalPeriod--日移动平均,标准为9* @param macd--顺序记录macd指标* new double[]* @param dea--顺序记录dea指标* new double[]* @param diff--顺序记录diff指标* new double[]*/void MACD(double[] closePrice, int fastPeriod, int slowPeriod, int signalPeriod, double[] macd, double[] dea,double[] diff);/*** 计算KDJ指标数据* * @param maxPrice--最高价要从第一天开始* @param minPrice--最低价要从第一天开始* @param closePrice--收盘价要从第一天开始* @param fastK_Period--标准值:9* @param slowK_Period--标准值:3* @param slowD_Period--标准值:3* @param K--顺序记录K指标* new double[]* @param D--顺序记录D指标* new double[]* @param J--顺序记录J指标* new double[]*/void KDJ(double[] maxPrice, double[] minPrice, double[] closePrice, int fastK_Period, int slowK_Period,int slowD_Period, double[] K, double[] D, double[] J);/*** 计算RSI指标数据* * @param closePrice--收盘价要从第一天开始* @param rsi1_n--计算rsi1指标,标准为:6* @param rsi2_n--计算rsi2指标,标准为:12* @param rsi3_n--计算rsi3指标,标准为:24* @param rsi1--顺序记录rsi1指标* new double[]* @param rsi2--顺序记录rsi2指标* new double[]* @param rsi3--顺序记录rsi3指标* new double[]*/void RSI(double[] closePrice, int rsi1_n, int rsi2_n, int rsi3_n, double[] rsi1, double[] rsi2, double[] rsi3);}
package stock.simulator.trader.web.indicatrixinterfaceimpl;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;import stock.simulator.trader.web.data.StockHistoryData;
import stock.simulator.trader.web.indicatrixinterface.Indicatrix;
import util.DateUtil;
import util.Define;
import util.MathCaclateUtil;@Service("indicatrix")
public class IndicatrixImpl implements Indicatrix {@Overridepublic void MACD(double[] closePrice, int fast, int slow, int signal, double[] macd, double[] dea, double[] diff) {double preEma_12 = 0;double preEma_26 = 0;double preDEA = 0;double ema_12 = 0;double ema_26 = 0;double fastPeriod = Double.valueOf(new Integer(fast));// 日快线移动平均,标准为12,按照标准即可double slowPeriod = Double.valueOf(new Integer(slow));// 日慢线移动平均,标准为26,可理解为天数double signalPeriod = Double.valueOf(new Integer(signal));// 日移动平均,标准为9,按照标准即可double DEA = 0;double DIFF = 0;double MACD = 0;for (int i = 0; i < closePrice.length; i++) {ema_12 = i == 0 ? closePrice[i]: MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(preEma_12, fastPeriod - 1, BigDecimal.ROUND_HALF_UP),fastPeriod + 1, BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(MathCaclateUtil.multiply(closePrice[i], 2D, BigDecimal.ROUND_HALF_UP),fastPeriod + 1, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// ema_12=preEma_12*(fastPeriod-1)/(fastPeriod+1)+closePrice*2/(fastPeriod+1)ema_26 = i == 0 ? closePrice[i]: MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(preEma_26, slowPeriod - 1, BigDecimal.ROUND_HALF_UP),slowPeriod + 1, BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(MathCaclateUtil.multiply(closePrice[i], 2D, BigDecimal.ROUND_HALF_UP),slowPeriod + 1, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// ema_26=preEma_26*(slowPeriod-1)/(slowPeriod+1)+closePrice*2/(slowPeriod+1)DIFF = i == 0 ? 0 : MathCaclateUtil.subtract(ema_12, ema_26, BigDecimal.ROUND_HALF_UP);// Diff=ema_12-ema_26DEA = i == 0 ? 0: MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(preDEA, signalPeriod - 1, BigDecimal.ROUND_HALF_UP),signalPeriod + 1, BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(MathCaclateUtil.multiply(DIFF, 2D, BigDecimal.ROUND_HALF_UP),signalPeriod + 1, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// DEA=preDEA*(signalPeriod-1)/(signalPeriod+1)+Diff*2/(signalPeriod+1)MACD = i == 0 ? 0: MathCaclateUtil.multiply(2D, MathCaclateUtil.subtract(DIFF, DEA, BigDecimal.ROUND_HALF_UP),BigDecimal.ROUND_HALF_UP);// MACD=2×(Diff-DEA)preEma_12 = ema_12;preEma_26 = ema_26;preDEA = DEA;macd[i] = MACD;dea[i] = DEA;diff[i] = DIFF;}}@Overridepublic void KDJ(double[] maxPrice, double[] minPrice, double[] closePrice, int fastK, int slowK, int slowD,double[] K_R, double[] D_R, double[] J_R) {List<Double> highestPriceList = new ArrayList<>();List<Double> lowestPriceList = new ArrayList<>();List<Double> highestPriceList_temp = new ArrayList<>();List<Double> lowestPriceList_temp = new ArrayList<>();double RSV = 0;double fastK_Period = fastK;// 标准值为9double slowK_Period = Double.valueOf(new Integer(slowK));// 标准值为3double slowD_Period = Double.valueOf(new Integer(slowD));// 标准值为3double preK = 0;double preD = 0;double K = 0;double D = 0;double J = 0;for (int i = 0; i < closePrice.length; i++) {if (highestPriceList.size() == fastK_Period) {highestPriceList.remove(0);lowestPriceList.remove(0);} else if (highestPriceList.size() == 0) {highestPriceList.add(maxPrice[i]);lowestPriceList.add(minPrice[i]);}highestPriceList.add(maxPrice[i]);lowestPriceList.add(minPrice[i]);highestPriceList_temp = new ArrayList<>();lowestPriceList_temp = new ArrayList<>();highestPriceList_temp.addAll(highestPriceList);lowestPriceList_temp.addAll(lowestPriceList);highestPriceList_temp = MathCaclateUtil.sortList(highestPriceList_temp);lowestPriceList_temp = MathCaclateUtil.sortList(lowestPriceList_temp);RSV = MathCaclateUtil.multiply(MathCaclateUtil.divide(MathCaclateUtil.subtract(closePrice[i], lowestPriceList_temp.get(0), BigDecimal.ROUND_HALF_UP),MathCaclateUtil.subtract(highestPriceList_temp.get(highestPriceList_temp.size() - 1),lowestPriceList_temp.get(0), BigDecimal.ROUND_HALF_UP),BigDecimal.ROUND_UNNECESSARY), 100D, BigDecimal.ROUND_HALF_UP);// (今日收盘价-9日内最低价)÷(9日内最高价-9日内最低价)×100// 如果无前一日的K、D值K = MathCaclateUtil.divide(MathCaclateUtil.add(RSV,MathCaclateUtil.multiply(2D, preK, BigDecimal.ROUND_HALF_UP), BigDecimal.ROUND_HALF_UP),slowK_Period, BigDecimal.ROUND_UNNECESSARY);// (当日RSV值+2×前一日K值)÷3D = MathCaclateUtil.divide(MathCaclateUtil.add(K,MathCaclateUtil.multiply(2D, preD, BigDecimal.ROUND_HALF_UP), BigDecimal.ROUND_HALF_UP),slowD_Period, BigDecimal.ROUND_UNNECESSARY);// (当日K值+2×前一日D值)÷3J = MathCaclateUtil.subtract(MathCaclateUtil.multiply(3D, K, BigDecimal.ROUND_HALF_UP),MathCaclateUtil.multiply(2D, D, BigDecimal.ROUND_HALF_UP), BigDecimal.ROUND_HALF_UP);// 3K-2DpreK = K;preD = D;K_R[i] = K;D_R[i] = D;J_R[i] = J;}}@Overridepublic void RSI(double[] closePrice, int rsi1_n, int rsi2_n, int rsi3_n, double[] rsi1, double[] rsi2,double[] rsi3) {double pp_6;// 用于计算rsi数据double np_6;double pp_12;double np_12;double pp_24;double np_24;double prepp_6 = 0;// 用于计算rsi数据double prenp_6 = 0;double prepp_12 = 0;double prenp_12 = 0;double prepp_24 = 0;double prenp_24 = 0;double upsanddowns;double n1 = Double.valueOf(new Integer(rsi1_n));// 标准值为6double n2 = Double.valueOf(new Integer(rsi2_n));// 标准值为12double n3 = Double.valueOf(new Integer(rsi3_n));// 标准值为24double num_100 = 100D;double RSI1 = 0;double RSI2 = 0;double RSI3 = 0;for (int i = 0; i < closePrice.length; i++) {if (i == 0) {continue;}upsanddowns = closePrice[i] - closePrice[i - 1];pp_6 = MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(prepp_6, n1 - 1, BigDecimal.ROUND_HALF_UP), n1,BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(upsanddowns >= 0 ? upsanddowns : 0, n1, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// prepp_6*(6-1)/6+(upsanddowns>=0?upsanddowns:0)/6np_6 = MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(prenp_6, n1 - 1, BigDecimal.ROUND_HALF_UP), n1,BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(upsanddowns >= 0 ? 0 : upsanddowns, n1, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// prenp_6*(6-1)/6+(upsanddowns>=0?0:upsanddowns)/6RSI1 = MathCaclateUtil.divide(MathCaclateUtil.multiply(num_100, pp_6, BigDecimal.ROUND_HALF_UP),MathCaclateUtil.add(pp_6, -np_6, BigDecimal.ROUND_HALF_UP), BigDecimal.ROUND_UNNECESSARY);// 100*pp_6/(pp_6-np_6)rsi1[i] = RSI1;prepp_6 = pp_6;prenp_6 = np_6;pp_12 = MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(prepp_12, n2 - 1, BigDecimal.ROUND_HALF_UP), n2,BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(upsanddowns >= 0 ? upsanddowns : 0, n2, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// prepp_12*(12-1)/12+(upsanddowns>=0?upsanddowns:0)/12;np_12 = MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(prenp_12, n2 - 1, BigDecimal.ROUND_HALF_UP), n2,BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(upsanddowns >= 0 ? 0 : upsanddowns, n2, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// prenp_12*(12-1)/12+(upsanddowns>=0?0:upsanddowns)/12;RSI2 = MathCaclateUtil.divide(MathCaclateUtil.multiply(num_100, pp_12, BigDecimal.ROUND_HALF_UP),MathCaclateUtil.add(pp_12, -np_12, BigDecimal.ROUND_HALF_UP), BigDecimal.ROUND_UNNECESSARY);// 100*pp_12/(pp_12-np_12);rsi2[i] = RSI2;prepp_12 = pp_12;prenp_12 = np_12;pp_24 = MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(prepp_24, n3 - 1, BigDecimal.ROUND_HALF_UP), n3,BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(upsanddowns >= 0 ? upsanddowns : 0, n3, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// prepp_24*(24-1)/24+(upsanddowns>=0?upsanddowns:0)/24;np_24 = MathCaclateUtil.add(MathCaclateUtil.divide(MathCaclateUtil.multiply(prenp_24, n3 - 1, BigDecimal.ROUND_HALF_UP), n3,BigDecimal.ROUND_UNNECESSARY),MathCaclateUtil.divide(upsanddowns >= 0 ? 0 : upsanddowns, n3, BigDecimal.ROUND_UNNECESSARY),BigDecimal.ROUND_HALF_UP);// prenp_24*(24-1)/24+(upsanddowns>=0?0:upsanddowns)/24;RSI3 = MathCaclateUtil.divide(MathCaclateUtil.multiply(num_100, pp_24, BigDecimal.ROUND_HALF_UP),MathCaclateUtil.add(pp_24, -np_24, BigDecimal.ROUND_HALF_UP), BigDecimal.ROUND_UNNECESSARY);// 100*pp_24/(pp_24-np_24);rsi3[i] = RSI3;prepp_24 = pp_24;prenp_24 = np_24;}}}
计算macd、jdk、rsi相关推荐
- python股票技术指标计算_通达信指标python都实现,python计算macd等技术指标,有什么包吗...
Q1:python计算macd等技术指标,有什么包吗 有的,包的链接如下: https://github.com/lovelylain/pyctp/tree/master/example/ctp/ta ...
- matlab计算macd_matlab计算MACD指标
matlab计算MACD指标 2018-11-25 %by yupengfang %利用matlab计算MACD指标,并作图. clc clear close all data=xlsread(&qu ...
- excel计算式自动计算_计算macd 分解步骤一步一步详细计算macd 用excel计算macd
看很多人都不会计算macd指标, 今天就教大家如何一步一步的计算macd指标. 只要会复制粘贴按照我这个步骤都可以会计算macd. 需要用excel软件 下面的计算数据是上证指数前90天.数据(数据获 ...
- python股票技术指标计算_使用 Ta-lib 计算 MACD 等技术指标
最近很多朋友使用老虎的开放API时, 都会咨询我们获取 MACD.KDJ 等技术指标的方法. 开放API没有提供计算好的技术指标数据, 因为这类指标的计算方法比较简单. 这里做一个简单的示例,供大家参 ...
- 关于利用talib.macd函数计算macd指标与同花顺不一致的问题
首先我们来看下Macd指标计算方法: 12日EMA的计算:EMA12 = 前一日EMA12 * 11/13 + 今日收盘 * 2/13 26日EMA的计算:EMA26 = 前一日EMA26 * 25/ ...
- talib包计算MACD值和行情软件有差异的解决方法
talib包是计算许多行情指标必备的第三方库,但在计算过程中发现,计算出来的数值和行情软件的计算方法存在很大的差异,可能会导致策略出现错误.为此,专门写了一个函数解决这个问题.欢迎大家一起交流讨论. ...
- java 布林线_交易信号---MACD、RSI、Boll、分型等技术信号
技术指标 在交易决策过程中的简图: 什么是技术指标? 基于行情数据,通过特定数学公式或模型计算得出的.用于辅助交易决策的数值序列 技术指标的分类 三种关系: 趋势线: 股市走势震荡起伏,供需关系被打破 ...
- python kdj指标详解_python实现kdj、macd、rsi、bias、willr指标
#kdj指标 def myself_kdj(df): low_list = df['low'].rolling(9, min_periods=9).min() low_list.fillna(valu ...
- VB计算MACD指标详细编码
MACD指标的含义.用法及计算原理,请自己百度不啰嗦,直接上干货-代码如下: Set rstStockHistroy = dbsDatabase.OpenRecordset("SELECT. ...
最新文章
- AI芯片初创公司单纯卖芯片还是捆绑算法的商业模式更好?...
- 分布式理论(一) - CAP定理
- 个人日报0701-0703
- MVC 之 Partial View 用法
- Android Studio 管理所有程序退出
- 工作263:弹性布局 修改样式
- 经过5年的娱乐功能,编码传奇MPJ踏上了他的下一个大旅程
- bzoj1036 树的统计Count 树链剖分
- Hibernate简介
- Android与物联网设备通信-网络模型分层
- Python爬虫从入门到放弃(二十四)之 Scrapy登录知乎
- oracle9i阻塞,Oracle 9i 整体性能优化概述(zt)
- 蛋白质聚集的分子动力学模拟
- 斐讯k2刷无线打印服务器,斐讯K2全版本刷机教程
- SSM面试题,2021最新Java面试题及答案
- vb 链接 oracle数据库,vb 连接oracle数据库
- 计算机硬盘接口及操作系统
- yolov3训练实现火焰检测(pytorch)
- R720重装系统\WEPE装系统\WEPE
- osx php mongodb,Mac OSX 平台安装 MongoDB
热门文章
- 华为设置计算机,华为无线路由器
- java学习常用网站推荐
- 中北校赛练习里的一道题,比较难写 htu1602
- 31年前,中国第一封电子邮件:Across the Great Wall we can reach every corner in the world.
- python3.6 解决ModuleNotFoundError: No module named '_bz2'
- .dta matlab,声发射数据文件是.DTA文件格式,如何将这种文件格式转入到MATLAB分析软件中...
- PHP抓取网络数据的6种常见方法
- 【NOI2005】智慧珠游戏,DLX的NOIP坎关。
- 半角空格 全角空格 不间断空格 通过过滤器解决
- 猎豹移动Q3手游业务环比增106% 《砖块消消消》表现优异