本章上接 股市K线图指标算法的代码实现(一)


6.KDJ

以KDJ(9,3,3)为例,括号内为传入的参数

(1)计算周期的RSV值

RSV = (C(9)-L(9))/(H(9)-L(9))×100

公式中,C(9)为第9日收盘价;L(9)为9日内的最低价;(H(9)为9日内的最高价。

(2)计算K值,D值,J值

当日K值=2/3×前一日K值+1/3×当日RSV

当日D值=2/3×前一日D值+1/3×当日K值

J值=3*当日K值-2*当日D值

(注:第一天的K值我取的是33.33,D值我取的是11.11,J值我取的是77.78,当然它们要取50也可以)

(注:KDJ的值均须在0~100内)

代码如下:

 public void setKDJ(int n, int m1, int m2,List<Entry> firstData, List<Entry> secondData, List<Entry> thirdData) {firstData.clear();secondData.clear();thirdData.clear();if (mChartData==null){return;}double[] mK = new double[mChartData.close.length];  //K值double[] mD = new double[mChartData.close.length];  //D值double jValue;                                      //J值double highValue =mChartData.high[0];double lowValue = mChartData.low[0];int highPosition = 0;           //记录最高价的位置int lowPosition = 0;        //记录最低价位置double rSV = 0.0;for (int i = 0; i < mChartData.close.length; i++) {if (i == 0) {mK[0] = 33.33;mD[0] = 11.11;jValue = 77.78;} else {//对最高价和最低价赋值if (highValue <= mChartData.high[i]) {highValue = mChartData.high[i];highPosition = i;}if (lowValue >= mChartData.low[i]) {lowValue = mChartData.low[i];lowPosition = i;}if (i > (n - 1)) {//判断存储的最高价是否高于当前最高价if (highValue > mChartData.high[i]) {//判断最高价是不是在最近n天内,若不在最近n天内,则从最近n天找出最高价并赋值if (highPosition < (i - (n - 1))) {highValue = mChartData.high[i - (n - 1)];for (int j = (i - (n - 2)); j <= i; j++) {if (highValue <= mChartData.high[j]) {highValue = mChartData.high[j];highPosition = j;}}}}if ((lowValue < mChartData.low[i])) {if (lowPosition < i - (n - 1)) {lowValue = mChartData.low[i - (n - 1)];for (int k = i - (n - 2); k <= i; k++) {if (lowValue >= mChartData.low[k]) {lowValue = mChartData.low[k];lowPosition = k;}}}}}if (highValue != lowValue) {rSV = (mChartData.close[i] - lowValue) / (highValue - lowValue) * 100;}mK[i] = (mK[i - 1] * (m1 - 1) + rSV) / m1;mD[i] = (mD[i - 1] * (m2 - 1) + mK[i]) / m2;jValue = 3 * mK[i] - 2 * mD[i];}addLimitEntry(i, mK[i], firstData);addLimitEntry(i, mD[i], secondData);addLimitEntry(i, jValue, thirdData);}}private void addLimitEntry(int position, double value, List<Entry> data) {if (value > 100) {value = 100;} else if (value < 0) {value = 0;}Entry entry = new Entry(position, (float) value);data.add(entry);}

7.PBX(PUBU)
以PBX(6)为例,括号内为传入的参数
PBX = (MA(close,6)+MA(close,12))
代码如下:

public void setPBX(int period,List<Entry> firstList){firstList.clear();if (mChartData==null){return;}float[] arr1 = new float[mChartData.close.length];float[] arr2 = new float[mChartData.close.length];float[] arr3 = new float[mChartData.close.length];float pbxValue;closeMA(period,arr1);closeMA(period*2,arr2);closeMA(period*4,arr3);for (int i = period*4-1;i<mChartData.close.length;i++){pbxValue = arr1[i]+arr2[i]+arr3[i];firstList.add(new Entry(i,pbxValue/3));}}
private void closeMA(int optInTimePeriod, float[] arr) {if (mChartData==null){return;}double closeSum = 0;int period;for (int i = 0; i < mChartData.close.length; i++) {closeSum += mChartData.close[i];if (i >= (optInTimePeriod - 1)) {period = i - optInTimePeriod;if (period >= 0) {closeSum -= mChartData.close[period];}arr[i] = (float) closeSum / optInTimePeriod;}}}

8.CCI
以CCI(14)为例,括号内为传入的参数
(1)TYP=(HIGH+LOW+CLOSE)/3
(2)AVEDEV(TYP,N) =( | 第N天的TYP - MA(TYP,N) |   +  | 第N-1天的TYP -  MA(TYP,N) | + ...... + | 第1天的TYP -  MA(TYP,N | ) /N
(MA(TYP,N)表示TYP的N日移动平均,我在股市K线图指标算法的代码实现(一)有解释)
(3)CCI = (TYP-MA(TYP,N))/(0.015*AVEDEV(TYP,N));
代码如下:

public void setCCI(int n){if (mChartData==null){return;}double typSum = 0;double cciValue;double typMa;double typDiff;double typDiffSum;double typDEV;double []typ = new double[mChartData.close.length];int period;for (int i = 0;i<mChartData.close.length;i++){typ[i] = (mChartData.close[i]+mChartData.high[i]+mChartData.low[i])/3;typSum += typ[i];if (i >= (n - 1)) {period = i - n;if (period >= 0) {typSum -= typ[period];}typMa = typSum/n;typDiffSum = 0;for (int j = period+1;j<=i;j++){typDiff = Math.abs(typ[j]-typMa);typDiffSum+=typDiff;}typDEV = typDiffSum/n;cciValue = (typ[i]-typMa)/(typDEV*0.015);}}}

9.ATR
以CCI(26)为例,括号内为传入的参数
(1)TR(真实波动幅度)
a = 当天最高点和最低点间的差的绝对值
b =  前一天收盘价和当天最高价间的差的绝对值
c = 前天收盘价和当天最低价间的差的绝对值
TR = MAX(a,b,c)
(2)ATR = MA(TR,26)
代码如下:

public void setATR(int n,List<Entry> firstList,List<Entry> secondList){firstList.clear();secondList.clear();if (mChartData==null){return;}double a;     //最高-最低double b;     //最高-昨收double c;    //昨收-最低double tr[] = new double[mChartData.close.length];double trSum = 0;double atrValue;int period;for (int i = 0;i<mChartData.close.length;i++){if (i == 0){tr[i] = Math.abs(mChartData.high[i] - mChartData.low[i]);}else {a = Math.abs(mChartData.high[i] - mChartData.low[i]);b = Math.abs(mChartData.high[i] - mChartData.close[i - 1]);c = Math.abs(mChartData.close[i - 1] - mChartData.low[i]);tr[i] = Math.max(Math.max(a, b), c);}trSum += tr[i];firstList.add(new Entry(i, (float) tr[i]));if (i>=n-1){period = i-n;if (period >= 0) {trSum -= tr[period];}atrValue = trSum/n;secondList.add(new Entry(i, (float) atrValue));}}}

10.BIAS
BIAS=(CLOSE - MA(CLOSE,N))/(MA(CLOSE,N))*100
代码如下:

public void setBIAS(int optInTimePeriod){if (mChartData==null){return;}double closeSum = 0;double ma;double biasValue;int period;for (int i = 0; i < mChartData.close.length; i++) {closeSum += mChartData.close[i];if (i >= (optInTimePeriod - 1)) {period = i - optInTimePeriod;if (period >= 0) {closeSum -= mChartData.close[period];}ma = (float) closeSum / optInTimePeriod;biasValue = (mChartData.close[i]-ma)/ma*100;}}}

以上的10个指标算法大部分在TA-LIB金融库里也有,不过那些算法的结果不是我想要的,因此只好自己动手写了。其他诸如BOLL,RSI,WR算法在TA-LIB金融库中实现的结果符合我的需求,故直接调用其中的方法,自己就不多此一举了,毕竟里面的代码很完善,健壮。附TA-LIB的下载地址。
使用方法如下,以RSI算法举例:

public void RSI( int optInTimePeriod, List<Entry> tempData) {tempData.clear();if (mChartData==null){return;}Core lib = new Core();MInteger outBegIdx = new MInteger();MInteger outNbElement = new MInteger();double[] rsi = new double[mChartData.close.length];  double[] close = new double[mChartData.close.length];System.arraycopy(mChartData.close, 0, close, 0, mChartData.close.length);lib.rsi(0,close.length - 1, close, optInTimePeriod, outBegIdx, outNbElement, rsi);for (int i = 0; i < rsi.length - optInTimePeriod; i++) {tempData.add(new Entry(i + optInTimePeriod, (float) rsi[i]));}}

												

股市K线图指标算法的代码实现(二)相关推荐

  1. 股市K线图指标算法的代码实现(一)

    这几个月在做一个关于证券的项目,项目里一些图表的绘制,包括K线图以及相关指标算法的绘制让我有点为难,毕竟我也不炒股,没接触过过这些东西.原先是使用的ta-lib这个金融库来进行相关的计算.不过有些算法 ...

  2. 怎样看股市K线图指标之相对价位指标CKD

    欢迎点击此处订阅本Blog title="RSS 2.0" type="application/rss+xml" href="http://feed. ...

  3. k线符号图解大全_股市k线图各种符号意义?k线符号图解大全!

    股市k线图各种颜色代表什么意思 白线是5日均线...黄线10日均线 ..紫线20日均线..绿线60日均线 可根据自己习惯调整参数 提供K线图的用法:K线根据计算单位的不同,一般分为:日K线.周K线.月 ...

  4. 股市k线图怎么看涨看跌?

    股民一般都会根据K线图来判断大盘走势或者股市行情,进而看涨看跌.那么问题来了,股市K线图怎么看涨看跌呢?接下来将给大家介绍十八种K线看涨看跌的形态,一起来了解一下吧. 1 阳线 和 阴线 阴线 我先来 ...

  5. 用CAShapeLayer写股市K线图动画效果

    用CAShapeLayer写股市K线图动画效果 说明 入市有风险,炒股需谨慎.(因项目需求,本人提供了写这种效果的源码) 效果 源码 // // ViewController.m // Path // ...

  6. 股市K线图战法(图文对照讲解)

    导读: K线图是大家最常见的股市分析方法了. 分析关键位置上的关键K线表现 什么叫关键位置?支撑位.压力位.成交密集区,有意义的整数区,绝对高位.相对高位.绝对低位.相对低位等,这些都可以叫做关键位置 ...

  7. java ema算法_K线图指标算法(MA EMA)

    写在前面的话 本人android开发股线图时基于MpAndroidChart开发的,所以后面用到的算法中CandleEntry, Entry等都是MpAndroidChart的API,均使用java实 ...

  8. python k线图和指标_量化交易中,如何使用Python画K线、成交量、买卖点【邢不行】...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总] 请点击此处 这是邢不行第  68 ...

  9. python画k线图_python画k线图

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! import datetime import pandas_datareader ...

最新文章

  1. new操作符具体干了啥
  2. php getopt不好使,深入php中getopt的用法详解
  3. 文巾解题 264. 丑数 II (剑指 Offer 49. 丑数)
  4. 一道非常棘手的 Java 面试题:i++ 是线程安全的吗
  5. VScode 常用快捷键
  6. 排序算法之——冒泡排序分析
  7. 很好听,可没机会跟你分享
  8. sql分别对两列数据求和以不同的条件_利用数组与字典,实现双条件数据汇总的方法...
  9. axure 8.1 授权码分享
  10. android手机qq账号管理在哪里,qq安全中心手机版之功能详解
  11. 【机器学习】Sklearn-cluster聚类方法
  12. (Yuni)Markdown光速入门
  13. 虚拟机怎么装服务器系统教程视频,云服务器装虚拟机教程视频
  14. 实现两个主机之间的密钥分发和安全传输
  15. 阿里云服务器绑定域名,阿里云esc绑定域名,阿里云域名备案相关完整情况
  16. 全国最新各省、市、县、镇、村数据库,详细到村的数据
  17. Hyperledger Fabric区块链供应链金融实战1
  18. 【VMware】Ubantu 22.04配置静态IP
  19. 船舶电子电气工程专业出来的交响_科普下船舶电子电气工程专业属于工学类吗...
  20. mysql checksum原理_pt-table-checksum 原理解析

热门文章

  1. 【问题解决】arcgis地图无法放大缩小
  2. 17换代哈弗h6系统升级_17款全新换代哈弗H6两周年用车感受,分享一下
  3. 如何重置(恢复出厂)苹果Macbook Pro
  4. Google DevFest Shanghai 2020,如约而至!
  5. c语言 access编程,C语言中access/_access函数的使用实例详解
  6. win平板 安装linux系统下载,【年轻人的第一款4G Win8平板:七彩虹i108w 4G】安装Ubuntu 14.10 系统...
  7. 怎么把python程序发给别人_别人怎么用我的Python程序
  8. html炫酷在线,程序猿必备的10款超炫酷HTML5 Canvas插件
  9. 超级完整的 Git的下载、安装、配置与使用 以及命令
  10. idea调试常用的快捷键