




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于Java语言开发的个性化股票分析技术:随机指数(KDJ)KDJ指标又叫随机指标,是由乔治蓝恩博士(GeorgeLane)最早提出的,是一种相当新颖、实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于汇市的中短期趋势分析,是期货和外汇市场上最常用的技术分析工具。有K线,D线和J线三条线组成。XML描述:<?xmlversion="1.0"encoding="UTF-8"?><indicatorshortName="KDJ"fullName="随机指数"class="com.sh
2、engrensoft.stock.model.indicator.dailykdj.DailyKDJIndicator"dataUnit="D"><!-仅限:分钟、每日、每周、每月四种情况允许-><!-参数列表-><paramList><paramshortName="N"value="9"fullName="N<paramshortName="M1"value="3"fullName="M1<params
3、hortName="M2"value="3"fullName="M2天数"/>天数"/>天数"/></paramList><!-数据列表-><dataList><datashortName="StkDailyK"/><datashortName="IdxDailyK"/><datashortName="BlkDailyK"/></dataList><
4、!-输出列表-><valueList><valueshortName="K"fullName="K<valueshortName="D"fullName="D<valueshortName="J"fullName="J</valueList>值"/>值"/>值"/><!-图形:K线-><drawChartname="K"region="IndicatorB&quo
5、t;><linethickness="1"color="#FFFFFF"opacity="1"><!-白色线形图-><valueList><valueshortName="K"name="value"/></valueList></line></drawChart><!-图形:D线-><drawChartname="D"region="IndicatorB&q
6、uot;><linethickness="1"color="#FFFF00"opacity="1"><!-黄色线形图-><valueList><valueshortName="D"name="value"/></valueList></line></drawChart><!-图形:J线-><drawChartname="J"region="IndicatorB
7、"><linethickness="1"color="#FF00FF"opacity="1"><!-粉色线形图-><valueList><valueshortName="J"name="value"/></valueList></line></drawChart><description>KDJ指标又叫随机指标,是由乔治蓝恩博士(GeorgeLane)最早提出的,是一种相当新颖、实用的
8、技术分析指标,它起先用于期货市场的分析,后被广泛用于汇市的中短期趋势分析,是期货和外汇市场上最常用的技术分析工具。有K线,D线和J线三条线组成。</description></indicator>Java代码:/*(#)DailyKDJIndicator.java*CopyrightHangzhouShengrenSoftwareTech.Co.,Ltd.*/packagecom.shengrensoft.stock.model.indicator.dailykdj;importjava.rmi.RemoteException;importjava.text.Decim
9、alFormat;importjava.util.ArrayList;importjava.util.LinkedHashMap;importjava.util.List;mons.lang.math.NumberUtils;mon.util.DateUtil;mon.util.StkAnalysisUtil;importcom.shengrensoft.stock.center.data.Data;importcom.shengrensoft.stock.center.data.GettingDataList;importcom.shengrensoft.stock.center.data.
10、BlkDailyK.BlkDailyKData;importcom.shengrensoft.stock.center.data.Data.DataName;importcom.shengrensoft.stock.center.data.IdxDailyK.IdxDailyKData;importcom.shengrensoft.stock.center.data.StkDailyK.StkDailyKData;importcom.shengrensoft.stock.center.model.ModelParam;importcom.shengrensoft.stock.center.mo
11、del.indicator.AbstractIndicator;importcom.shengrensoft.stock.center.model.indicator.IndicatorValue;/* KDJ随机指数的实现类。* author迅动平台2012/08/02新建* /publicclassDailyKDJIndicatorextendsAbstractindicator/*序列版本ID*/privatestaticfinallongserialVersionUID=6146654415916101973L;/参数名定义/*参数名:N天数*/privatestaticfinalSt
12、ringPARAM_N="N"/*参数名:M1天数*/privatestaticfinalStringPARAM_M1="M1"/*参数名:M2天数*/privatestaticfinalStringPARAM_M2="M2"/计算值定义/*计算值:K值*/privatestaticfinalStringVALUE_K="K"/*计算值:D值*/privatestaticfinalStringVALUE_D="D"/*计算值:J值*/privatestaticfinalStringVALUE_J
13、="J"* 构造方法。*/publicDailyKDJIndicator()throwsRemoteException/* 计算出指定时间范围内KDJ随机指数的值序列。* paramstkCode证券代码* parambeginDate起始日期* paramcloseDate终止日期* paramparamsList指标参数列表* returnKDJ随机指数的值序列*/publicLinkedHashMap<java.util.Date,IndicatorValue>calculate(StringstkCode,java.util.DatebeginDate,
14、java.util.DatecloseDate,List<ModelParam>paramsList)throwsRemoteException/如果未指定起始日期,则返回空的值序列if(beginDate=null)returnnull;/如果未指定终止日期,则以当前日期作为终止日期if(closeDate=null)closeDate=DateUtil.getSystemTime();/起始日期、终止日期的前后关系检查if(beginDate.after(closeDate)returnnull;/取得指标的各个参数intparamN=0;/参数:N天数intparamMI=0
15、;/参数:M1天数intparamM2=0;/参数:M2天数for(ModelParamparam:paramsList)if(PARAM_N.equals(param.getShortName()paramN=NumberUtils.toInt(param.getValue();elseif(PARAM_M1.equals(param.getShortName()paramMI=NumberUtils.toInt(param.getValue();elseif(PARAM_M2.equals(param.getShortName()paramM2=NumberUtils.toInt(para
16、m.getValue();elsereturnnull;KDJ随机指数的值序列/判别证券代码类型(股票代码、股指代码、或板指代码),分别计算StkAnalysisUtilstkAnalysisUtil=super.getStkAnalysisUtil();if(stkAnalysisUtil.isStkCode(stkCode)returnthis.calcStkDailyKDJ(stkCode,beginDate,closeDate,paramN,paramM1,paramM2);elseif(stkAnalysisUtil.isIdxCode(stkCode)returnthis.calc
17、IdxDailyKDJ(stkCode,beginDate,closeDate,paramN,paramM1,paramM2);elseif(stkAnalysisUtil.isBlkCode(super.getUserId(),stkCode)returnthis.calcBlkDailyKDJ(stkCode,beginDate,closeDate,paramN,paramM1,paramM2);elsereturnnull;/* 计算出指定股票指定日期范围的KDJ随机指数值序列。* paramstkCode股票代码* parambeginDate起始日期* paramcloseDate终
18、止日期* paramparamNN天数* paramparamMIM1天数* paramparamM2M2天数* returnKDJ随机指数值序列* /privateLinkedHashMap<java.util.Date,IndicatorValue>calcStkDailyKDJ(StringstkCode,java.util.DatebeginDate,java.util.DatecloseDate,intparamN,intparamMI,intparamM2)/准备好指标返回值列表LinkedHashMap<java.util.Date,IndicatorValue
19、>indicatorValueList=newLinkedHashMap<java.util.Date,IndicatorValue>();/取得指定股票指定日期范围的日K数据GettingDataListdataList=super.getUsingDataList();Datadata=dataList.getDailyData(K数据DataName.StkDailyKData.getShortName(),stkCode,beginDate,closeDate);if(data=null)returnindicatorValueList;/表示指定日期范围内无对应的日
20、/数据类型转换StkDailyKDatadailyKData=(StkDailyKData)data;/自起始日期始至终止日期止,依次计算出各日的不同KDJ线的值List<Integer>highValueList=newArrayList<Integer>(paramN);List<Integer>lowValueList=newArrayList<Integer>(paramN);List<Double>rsvValueList=newArrayList<Double>(paramM1);List<Double&
21、gt;kValueList=newArrayList<Double>(paramM2);java.util.Datedate=beginDate;do/日期StringdateStr=DateUtil.getFormatedDate(date,"yyyyMMdd");/构造一个值对象IndicatorValueindicatorValue=newIndicatorValue();/得到该天的收盘价Integerclose=dailyKData.getClose(dateStr);if(close!=null)/得到当天最高价最低价,计算RSVinthigh=da
22、ilyKData.getHigh(dateStr);intlow=dailyKData.getLow(dateStr);highValueList.add(high);lowValueList.add(low);intnum=highValueList.size();/从列表前面删除最早进入的最高价和最低价if(num>paramN)highValueList.remove(O);lowValueList.remove(0);)/得到列表中最高价、最低价intmaxHigh=maxHighValue(highValueList);intminLow=minLowValue(lowValu
23、eList);doublersvValue=calculateRSV(maxHigh,minLow,close);rsvValueList.add(rsvValue);/每日计算得到的K值doublekValue=0;/每日计算得到的D值doubledValue=0;/每日计算得到的J值doublejValue=0;/计算K值并加入输出值对象num=rsvValueList.size();if(num>paramM1)rsvValueList.remove(0);)if(rsvValueList.size()=paramM1)kValue=calculateK(rsvValueList)
24、;kValueList.add(kValue);indicatorValue.setValue(VALUE_K,format(kValue);)/计算D值,J值并加入输出值对象num=kValueList.size();if(num>paramM2)kValueList.remove(0);)if(kValueList.size()=paramM2)dValue=calculateD(kValueList);indicatorValue.setValue(VALUE_D,format(dValue);jValue=calculateJ(kValue,dValue);if(jValue&g
25、t;100)jValue=100;/封顶修正elseif(jValue<0)jValue=0.00;/封底修正indicatorValue.setValue(VALUE_J,format(jValue);/加入一个值对象indicatorValueList.put(date,indicatorvalue);)/准备取得下一日的数据date=super.getStkTransDateUtil().getNextTransDate(stkCode,date);if(date=null)break;)while(!date.after(closeDate);/返回KDJ随机指数的值序列retu
26、rnindicatorValueList;/* 计算出指定股指指定日期范围的KDJ随机指数值序列。* paramidxCode股指代码* parambeginDate起始日期* paramcloseDate终止日期* paramparamNN天数* paramparamMIM1天数* paramparamM2M2天数* returnKDJ随机指数值序列* /privateLinkedHashMap<java.util.Date,IndicatorValue>calcIdxDailyKDJ(StringidxCode,java.util.DatebeginDate,java.util
27、.DatecloseDate,intparamN,intparamMI,intparamM2)/准备好指标返回值列表LinkedHashMap<java.util.Date,IndicatorValue>indicatorValueList=newLinkedHashMap<java.util.Date,IndicatorValue>();/取得指定股指指定日期范围的日K数据GettingDataListdataList=super.getUsingDataList();Datadata=dataList.getDailyData(DataName.IdxDailyKD
28、ata.getShortName(),idxCode,beginDate,closeDate);if(data=null)returnindicatorValueList;/表示指定日期范围内无对应的日K数据/数据类型转换IdxDailyKDatadailyKData=(IdxDailyKData)data;/自起始日期始至终止日期止,依次计算出各日的不同KDJ线的值List<Integer>highValueList=newArrayList<Integer>(paramN);List<Integer>lowValueList=newArrayList&l
29、t;Integer>(paramN);List<Double>rsvValueList=newArrayList<Double>(paramM1);List<Double>kValueList=newArrayList<Double>(paramM2);java.util.Datedate=beginDate;do/日期StringdateStr=DateUtil.getFormatedDate(date,"yyyyMMdd");/构造一个值对象IndicatorValueindicatorValue=newIndica
30、torValue();/得到该天的收盘价Integerclose=dailyKData.getClose(dateStr);if(close!=null)/得到当天最高价最低价,计算RSVinthigh=dailyKData.getHigh(dateStr);intlow=dailyKData.getLow(dateStr);highValueList.add(high);lowValueList.add(low);intnum=highValueList.size();/从列表前面删除最早进入的最高价和最低价if(num>paramN)highValueList.remove(O);l
31、owValueList.remove(O);/得到列表中最高价、最低价intmaxHigh=maxHighValue(highValueList);intminLow=minLowValue(lowValueList);doublersvValue=calculateRSV(maxHigh,minLow,close);rsvValueList.add(rsvValue);/每日计算得到的K值doublekValue=0;/每日计算得到的D值doubledValue=0;/每日计算得到的J值doublejValue=0;/计算K值并加入输出值对象num=rsvValueList.size();i
32、f(num>paramM1)rsvValueList.remove(0);if(rsvValueList.size()=paramM1)kValue=calculateK(rsvValueList);kValueList.add(kValue);indicatorValue.setValue(VALUE_K,format(kValue);/计算D值,J值并加入输出值对象num=kValueList.size();if(num>paramM2)kValueList.remove(O);if(kValueList.size()=paramM2)dValue=calculateD(kVa
33、lueList);indicatorValue.setValue(VALUE_D,format(dValue);jValue=calculateJ(kValue,dValue);if(jValue>100)jValue=100;封顶修正elseif(jValue<0)jValue=0.00;/封底修正indicatorValue.setValue(VALUE_J,format(jValue);/加入一个值对象indicatorValueList.put(date,indicatorValue);/准备取得下一日的数据date=super.getStkTransDateUtil().
34、getNextTransDate(date);if(date=null)break;)while(!date.after(closeDate);/返回KDJ随机指数的值序列returnindicatorValueList;/* 计算出指定板指指定日期范围的KDJ随机指数值序列。* paramblkCode板指代码* parambeginDate起始日期* paramcloseDate终止日期* paramparamNN天数* paramparamMIM1天数* paramparamM2M2天数* returnKDJ随机指数值序列* /privateLinkedHashMap<java.u
35、til.Date,IndicatorValue>calcBlkDailyKDJ(StringblkCode,java.util.DatebeginDate,java.util.DatecloseDate,intparamN,intparamMI,intparamM2)/准备好指标返回值列表LinkedHashMap<java.util.Date,IndicatorValue>indicatorValueList=newLinkedHashMap<java.util.Date,IndicatorValue>();/取得指定板指指定日期范围的日K数据GettingDa
36、taListdataList=super.getUsingDataList();Datadata=dataList.getDailyData(DataName.BlkDailyKData.getShortName(),blkCode,beginDate,closeDate);if(data=null)returnindicatorValueList;/表示指定日期范围内无对应的日K数据)/数据类型转换BlkDailyKDatadailyKData=(BlkDailyKData)data;/自起始日期始至终止日期止,依次计算出各日的不同KDJ线的值List<Integer>highV
37、alueList=newArrayList<Integer>(paramN);List<Integer>lowValueList=newArrayList<Integer>(paramN);List<Double>rsvValueList=newArrayList<Double>(paramM1);List<Double>kValueList=newArrayList<Double>(paramM2);java.util.Datedate=beginDate;do/日期StringdateStr=DateUti
38、l.getFormatedDate(date,"yyyyMMdd");/构造一个值对象IndicatorValueindicatorValue=newIndicatorValue();/得到该天的收盘价Integerclose=dailyKData.getClose(dateStr);if(close!=null)/得到当天最高价最低价,计算RSVinthigh=dailyKData.getHigh(dateStr);intlow=dailyKData.getLow(dateStr);highValueList.add(high);lowValueList.add(low)
39、;intnum=highValueList.size();/从列表前面删除最早进入的最高价和最低价if(num>paramN)highValueList.remove(O);lowValueList.remove(O);)/得到列表中最高价、最低价intmaxHigh=maxHighValue(highValueList);intminLow=minLowValue(lowValueList);doublersvValue=calculateRSV(maxHigh,minLow,close);rsvValueList.add(rsvValue);/每日计算得到的K值doublekValu
40、e=0;/每日计算得到的D值doubledValue=0;/每日计算得到的J值doublejValue=0;/计算K值并加入输出值对象num=rsvValueList.size();if(num>paramM1)rsvValueList.remove(0);if(rsvValueList.size()=paramM1)kValue=calculateK(rsvValueList);kValueList.add(kValue);indicatorValue.setValue(VALUE_K,format(kValue);/计算D值,J值并加入输出值对象num=kValueList.size
41、();if(num>paramM2)kValueList.remove(0);if(kValueList.size()=paramM2)dValue=calculateD(kValueList);indicatorValue.setValue(VALUE_D,format(dValue);jValue=calculateJ(kValue,dValue);if(jValue>100)jValue=100;/封顶修正elseif(jValue<0)jValue=0.00;/封底修正indicatorValue.setValue(VALUE_J,format(jValue);/加入一个值对象indicatorValueList.put(date,indicatorValue);/准备取得下一日的数据date=super.getStkTransDateUtil().getNextTransDate(date);if(date=null)break;while(!date.after(closeDate);/返回KDJ随机指数的值序列returnindicatorValueList;/* 计算若干日内的最高价。* paramhighValueList若干日的最高价列表* return若干日内的最高价* /privatein
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中建施工方案流程详解
- 项目管理中的可持续发展理念实践试题及答案
- 2025年注册会计师备考时间分配试题及答案
- 财务报表披露中的常见合规问题试题及答案
- 2024项目管理资格的考试重点与趋势分析试题及答案
- 2024年项目管理复习策略试题及答案
- 矿区塑胶跑道施工方案
- 证券从业资格证考试监测试题及答案
- 2024项目管理考试复习试题及答案
- 2025年注会备考的自我监督与激励机制试题及答案
- 煤矿隐蔽致灾因素普查课件
- 项目七-质谱法及其在食品分析中的应用001课件
- 《预防未成年人犯罪》主题班会
- 建设项目安全设施“三同时”审批流程图
- 软件系统功能需求调研表(信息系统项目需求调研表)
- 中国电信LTE网络质量评估测试规范(试行稿)V1
- 蓝牙音响成品检验规范
- 材料5:个人征信系统机构接入和接口验收工作流程
- 项目选址比选方案分析参考范本
- 中机2015~2016年消防系统维保养护年度总结报告
- 预制混凝土衬砌管片生产工艺技术规程doc
评论
0/150
提交评论