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相关推荐

  1. python股票技术指标计算_通达信指标python都实现,python计算macd等技术指标,有什么包吗...

    Q1:python计算macd等技术指标,有什么包吗 有的,包的链接如下: https://github.com/lovelylain/pyctp/tree/master/example/ctp/ta ...

  2. matlab计算macd_matlab计算MACD指标

    matlab计算MACD指标 2018-11-25 %by yupengfang %利用matlab计算MACD指标,并作图. clc clear close all data=xlsread(&qu ...

  3. excel计算式自动计算_计算macd 分解步骤一步一步详细计算macd 用excel计算macd

    看很多人都不会计算macd指标, 今天就教大家如何一步一步的计算macd指标. 只要会复制粘贴按照我这个步骤都可以会计算macd. 需要用excel软件 下面的计算数据是上证指数前90天.数据(数据获 ...

  4. python股票技术指标计算_使用 Ta-lib 计算 MACD 等技术指标

    最近很多朋友使用老虎的开放API时, 都会咨询我们获取 MACD.KDJ 等技术指标的方法. 开放API没有提供计算好的技术指标数据, 因为这类指标的计算方法比较简单. 这里做一个简单的示例,供大家参 ...

  5. 关于利用talib.macd函数计算macd指标与同花顺不一致的问题

    首先我们来看下Macd指标计算方法: 12日EMA的计算:EMA12 = 前一日EMA12 * 11/13 + 今日收盘 * 2/13 26日EMA的计算:EMA26 = 前一日EMA26 * 25/ ...

  6. talib包计算MACD值和行情软件有差异的解决方法

    talib包是计算许多行情指标必备的第三方库,但在计算过程中发现,计算出来的数值和行情软件的计算方法存在很大的差异,可能会导致策略出现错误.为此,专门写了一个函数解决这个问题.欢迎大家一起交流讨论. ...

  7. java 布林线_交易信号---MACD、RSI、Boll、分型等技术信号

    技术指标 在交易决策过程中的简图: 什么是技术指标? 基于行情数据,通过特定数学公式或模型计算得出的.用于辅助交易决策的数值序列 技术指标的分类 三种关系: 趋势线: 股市走势震荡起伏,供需关系被打破 ...

  8. 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 ...

  9. VB计算MACD指标详细编码

    MACD指标的含义.用法及计算原理,请自己百度不啰嗦,直接上干货-代码如下: Set rstStockHistroy = dbsDatabase.OpenRecordset("SELECT. ...

最新文章

  1. AI芯片初创公司单纯卖芯片还是捆绑算法的商业模式更好?...
  2. 分布式理论(一) - CAP定理
  3. 个人日报0701-0703
  4. MVC 之 Partial View 用法
  5. Android Studio 管理所有程序退出
  6. 工作263:弹性布局 修改样式
  7. 经过5年的娱乐功能,编码传奇MPJ踏上了他的下一个大旅程
  8. bzoj1036 树的统计Count 树链剖分
  9. Hibernate简介
  10. Android与物联网设备通信-网络模型分层
  11. Python爬虫从入门到放弃(二十四)之 Scrapy登录知乎
  12. oracle9i阻塞,Oracle 9i 整体性能优化概述(zt)
  13. 蛋白质聚集的分子动力学模拟
  14. 斐讯k2刷无线打印服务器,斐讯K2全版本刷机教程
  15. SSM面试题,2021最新Java面试题及答案
  16. vb 链接 oracle数据库,vb 连接oracle数据库
  17. 计算机硬盘接口及操作系统
  18. yolov3训练实现火焰检测(pytorch)
  19. R720重装系统\WEPE装系统\WEPE
  20. osx php mongodb,Mac OSX 平台安装 MongoDB

热门文章

  1. 华为设置计算机,华为无线路由器
  2. java学习常用网站推荐
  3. 中北校赛练习里的一道题,比较难写 htu1602
  4. 31年前,中国第一封电子邮件:Across the Great Wall we can reach every corner in the world.
  5. python3.6 解决ModuleNotFoundError: No module named '_bz2'
  6. .dta matlab,声发射数据文件是.DTA文件格式,如何将这种文件格式转入到MATLAB分析软件中...
  7. PHP抓取网络数据的6种常见方法
  8. 【NOI2005】智慧珠游戏,DLX的NOIP坎关。
  9. 半角空格 全角空格 不间断空格 通过过滤器解决
  10. 猎豹移动Q3手游业务环比增106% 《砖块消消消》表现优异