基于Java语言开发的个性化股票分析技术:量能突破模型EnergeBreak_第1页
基于Java语言开发的个性化股票分析技术:量能突破模型EnergeBreak_第2页
基于Java语言开发的个性化股票分析技术:量能突破模型EnergeBreak_第3页
基于Java语言开发的个性化股票分析技术:量能突破模型EnergeBreak_第4页
基于Java语言开发的个性化股票分析技术:量能突破模型EnergeBreak_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(本源代码转载自迅动股票分析平台,了解更多请访问)基于Java语言开发的个性化股票分析技术:量能突破模型(Energe-Break)一个用量能指标作为判定依据的条件分析模型,根据最近5天内是否有量能平台的突破以及涨跌幅的大小给每只股票评分评价,给用户明确的建议。迅动股票分析平台在此基础上利用Java语言开发了量能突破模型(Energe—Break),源代码如下:XML描述:〈?xmlversion="1.0”encoding=”UTF—8"?><analysershortName=”Energe—Break"fullName="量能突破模型”class="u008660011。model。analyser.eb.EBAnalyser">〈!--参数列表—-〉〈paramList>〈paramshortName=”N"value="40”fullName=”天数"/><paramshortName="C”value="20”fullName=”加减分系数”/〉</paramList><!—-数据列表-->〈dataList>〈datashortName="StkDailyK"/><datashortName=”IdxDailyK"/>〈datashortName="BlkDailyK"/></dataList><description>一个用量能指标作为判定依据的条件分析模型,根据最近5天内是否有量能平台的突破以及涨跌幅的大小给每只股票评分评价,给用户明确的建议.〈/description>〈/analyser〉Java代码:/**@(#)EBnalyser.java**Copyright@HangzhouShengrenSoftwareTech。Co。,Ltd.*/packageu008660011.model.analyser。eb;importjava.rmi.RemoteException;importjava.util.List;imp。apache.commons.lang.math。NumberUtils;importcom。shengrensoft.stock.center。common.util.DateUtil;importcom.shengrensoft.stock.center。common.util。StkAnalysisUtil;importcom.shengrensoft.stock.center。data。Data;importcom。shengrensoft。stock.center.data.StkDailyK。StkDailyKData;importcom.shengrensoft.stock.center.data。IdxDailyK.IdxDailyKData;impor.shengrensoft。stock。center。data.BlkDailyK.BlkDailyKData;importcom.shengrensoft.stock。center.model.ModelParam;importcom.shengrensoft。stock.center。model.analyser。AbstractAnalyser;importcom。shengrensoft.stock.center.model.analyser。AnalysisValue;/***〈code>EB〈/code〉量能突破分析模型的实现类。**@author迅动平台2012/09/20新建*/publicclassEBAnalyserextendsAbstractAnalyser{/**序列版本ID*/privatestaticfinallongserialVersionUID=—732447148977150017L;//参数名定义/**参数名:N天数*/privatestaticfinalStringPARAM_N="N";/**参数名:加减分系数*/privatestaticfinalStringPARAM_CONFICENT="C”;/***构造方法。*/publicEBAnalyser()throwsRemoteException{}/***分析买入点的变化.**@paramstkCode证券代码*@paramtransDate交易日期*@paramparamsList模型参数列表**@return分析结果(含评分和评价)*/publicAnalysisValuedoAnalysis(StringstkCode,java.util.DatetransDate,List<ModelParam>paramsList)throwsRemoteException{AnalysisValueanalysisValue=null;//股票代码合法性检查if(stkCode==null){analysisValue=newAnalysisValue();analysisValue。setStkCode(stkCode);analysisValue.setResultScore(0);analysisValue。setResultDesc("股票代码不合法,分析失败。”);returnanalysisValue;}//交易日期合法性检查if(transDate==null){analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue.setResultScore(0);analysisValue.setResultDesc("交易日期不合法,分析失败。");returnanalysisValue;}//参数列表合法性检查if(paramsList==null){analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue。setResultScore(0);analysisValue.setResultDesc(”参数列表不合法,分析失败。”);returnanalysisValue;}//取得分析所需的模型参数intparamN=0;intparamCONFICENT=0;for(ModelParamparam:paramsList){if(PARAM_N。equals(param。getShortName())){paramN=NumberUtils.toInt(param.getValue());}elseif(PARAM_CONFICENT.equals(param。getShortName())){paramCONFICENT=NumberUtils。toInt(param.getValue());}else{returnnull;//发现一个意外的模型参数}}//天数的合法性检查if(paramN<1){analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue.setResultScore(0);analysisValue.setResultDesc("天数不合法,分析失败.”);returnanalysisValue;}//(%)加减分系数if(paramCONFICENT<1||paramCONFICENT>99){analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue。setResultScore(0);analysisValue。setResultDesc(”加减分系数,分析失败.");returnanalysisValue;}//判别证券代码类型(是否为股票代码,股指代码,板指代码),分别进行分析StkAnalysisUtilstkAnalysisUtil=super。getStkAnalysisUtil();if(stkAnalysisUtil.isStkCode(stkCode)){analysisValue=this.analyseStk(stkCode,transDate,paramN,paramCONFICENT);if(analysisValue==null){analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue。setResultScore(0);analysisValue.setResultDesc("公司新上市或该天缺少数据,分析失败!”);}returnanalysisValue;}elseif(stkAnalysisUtil.isIdxCode(stkCode)){analysisValue=this.analyseIdx(stkCode,transDate,paramN,paramCONFICENT);if(analysisValue==null){analysisValue=newAnalysisValue();analysisValue。setStkCode(stkCode);analysisValue.setResultScore(0);analysisValue。setResultDesc("公司新上市或该天缺少数据,分析失败!”);}returnanalysisValue;}elseif(stkAnalysisUtil。isBlkCode(super.getUserId(),stkCode)){analysisValue=this。analyseBlk(stkCode,transDate,paramN,paramCONFICENT);if(analysisValue==null){analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue。setResultScore(0);analysisValue.setResultDesc("公司新上市或该天缺少数据,分析失败!");}returnanalysisValue;}else{analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue.setResultScore(0);analysisValue.setResultDesc("证劵代码类型不符,分析失败!");returnanalysisValue;}}/***根据能量突破提示的不同,对股票进行分析、评分、评价.**@paramstkCode股票代码*@paramtransDate交易日期*@paramparamN天数*@paramparamCONFICENT(%)加减分系数**@return返回结果(含评分和评价)*/privateAnalysisValueanalyseStk(StringstkCode,java。util.DatetransDate,intparamN,intparamCONFICENT){AnalysisValueanalysisValue=null;//计算TTJ值IntegerTTJ=calcStkTTJ(stkCode,transDate,paramN);if(TTJ==null){analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue。setResultScore(0);analysisValue。setResultDesc(”数据不足,分析失败");returnanalysisValue;}//计算资金增幅百分比DoublepricePerct=calcStkPricePerct(stkCode,transDate);if(pricePerct==null){analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue.setResultScore(0);analysisValue。setResultDesc("数据不足,分析失败");returnanalysisValue;}//近几日出现量能平台if(TTJ〈5&&TTJ>=1&&pricePerct〉0){java.util.Datedate=transDate;intcount=0;//将date移至量能突破的当天do{date=super.getStkTransDateUtil().getBeforeTransDate(stkCode,date);count++;}while(count<TTJ);Integerscore=null;java.util。DateplatformDate=date;IntegerplatformClose=null;IntegerplatformOpen=null;IntegerhalfPlatform=null;//日K线的1/2处booleanflag=true;//用来判断当前true:看涨,false:看跌DoubledoubleRange=null;//当天相对于量能平台的涨跌幅IntegerintRange=null;do{StringdateStr=DateUtil.getFormatedDate(date,"yyyyMMdd”);//取得个股的当日日K数据StkDailyKDatadailyKData=(StkDailyKData)super.getUsingDataList().getDailyData(Data.DataName.StkDailyKData.getShortName(),stkCode,date);if(dailyKData==null){returnnull;}Integeropen=dailyKData。getOpen(dateStr);if(open==null){returnnull;}Integerclose=dailyKData.getClose(dateStr);if(date==platformDate){//量能平台当天platformClose=close;platformOpen=open;halfPlatform=Math。abs((close-open))/2+platformOpen;}else{//计算当天相对于量能平台的涨跌幅doubleRange=100.0*(close—platformClose)/platformClose;intRange=doubleRange。intValue();if(platformOpen<platformClose){//量能平台当天K线为阳线if(doubleRange<0){//看跌//如果是量能平台出现后的第一天或者跌破阳线1/2if(score==null||(flag==true&&close<halfPlatform)){score=20;flag=false;}else{if(close>halfPlatform){score+=intRange;}else{score-=intRange;}}}else{//看涨if(score==null){score=90;}else{score-=intRange;}}}else{//量能平台当天K线为阴线if(doubleRange<0){//看跌if(score==null||flag==true){score=20;flag=false;}else{score—=intRange;}}else{//看涨if(score==null){score=90;}else{score-=intRange;}}}}date=super.getStkTransDateUtil().getNextTransDate(stkCode,date);}while(!date.after(transDate));analysisValue=this.assertValue(stkCode,transDate,score,intRange,flag,TTJ);returnanalysisValue;}else{//近几日无量能平台出现analysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue.setResultScore(40);analysisValue。setResultDesc("近几日未出现量能平台,保持观望”);returnanalysisValue;}}/***根据能量突破提示的不同,对股指进行分析、评分、评价。**@paramidxCode股指代码*@paramtransDate交易日期*@paramparamN天数*@paramparamCONFICENT(%)加减分系数**@return返回结果(含评分和评价)*/privateAnalysisValueanalyseIdx(StringidxCode,java。util.DatetransDate,intparamN,intparamCONFICENT){AnalysisValueanalysisValue=null;//计算TTJ值IntegerTTJ=calcIdxTTJ(idxCode,transDate,paramN);if(TTJ==null){analysisValue=newAnalysisValue();analysisValue。setStkCode(idxCode);analysisValue.setResultScore(0);analysisValue.setResultDesc(”数据不足,分析失败");returnanalysisValue;}//计算资金增幅百分比DoublepricePerct=calcIdxPricePerct(idxCode,transDate);if(pricePerct==null){analysisValue=newAnalysisValue();analysisValue.setStkCode(idxCode);analysisValue。setResultScore(0);analysisValue。setResultDesc("数据不足,分析失败");returnanalysisValue;}//近几日出现量能平台if(TTJ<5&&TTJ>=1&&pricePerct>0){java。util。Datedate=transDate;intcount=0;//将date移至量能突破的当天do{date=super.getStkTransDateUtil()。getBeforeTransDate(date);count++;}while(count<TTJ);Integerscore=null;java。util。DateplatformDate=date;IntegerplatformClose=null;IntegerplatformOpen=null;IntegerhalfPlatform=null;//日K线的1/2处booleanflag=true;//用来判断当前true:看涨,false:看跌DoubledoubleRange=null;//当天相对于量能平台的涨跌幅IntegerintRange=null;do{StringdateStr=DateUtil.getFormatedDate(date,"yyyyMMdd");//取得个股的当日日K数据IdxDailyKDatadailyKData=(IdxDailyKData)super.getUsingDataList()。getDailyData(Data.DataName。IdxDailyKData。getShortName(),idxCode,date);if(dailyKData==null){returnnull;}Integeropen=dailyKData.getOpen(dateStr);if(open==null){returnnull;}Integerclose=dailyKData。getClose(dateStr);if(date==platformDate){//量能平台当天platformClose=close;platformOpen=open;halfPlatform=Math.abs((close-open))/2+platformOpen;}else{//计算当天相对于量能平台的涨跌幅doubleRange=100.0*(close—platformClose)/platformClose;intRange=doubleRange.intValue();if(platformOpen〈platformClose){//量能平台当天K线为阳线if(doubleRange<0){//看跌//如果是量能平台出现后的第一天或者跌破阳线1/2if(score==null||(flag==true&&close〈halfPlatform)){score=20;flag=false;}else{if(close〉halfPlatform){score+=intRange;}else{score—=intRange;}}}else{//看涨if(score==null){score=90;}else{score-=intRange;}}}else{//量能平台当天K线为阴线if(doubleRange<0){//看跌if(score==null||flag==true){score=20;flag=false;}else{score-=intRange;}}else{//看涨if(score==null){score=90;}else{score-=intRange;}}}}date=super.getStkTransDateUtil()。getNextTransDate(date);}while(!date.after(transDate));analysisValue=this.assertValue(idxCode,transDate,score,intRange,flag,TTJ);returnanalysisValue;}else{//近几日无量能平台突破信号出现analysisValue=newAnalysisValue();analysisValue.setStkCode(idxCode);analysisValue.setResultScore(40);analysisValue.setResultDesc("近几日未出现量能平台,保持观望”);returnanalysisValue;}}/***根据能量突破提示的不同,对板指进行分析、评分、评价。**@paramblkCode板指代码*@paramtransDate交易日期*@paramparamN天数*@paramparamCONFICENT(%)加减分系数**@return返回结果(含评分和评价)*/privateAnalysisValueanalyseBlk(StringblkCode,java.util.DatetransDate,intparamN,intparamCONFICENT){AnalysisValueanalysisValue=null;//计算TTJ值IntegerTTJ=calcBlkTTJ(blkCode,transDate,paramN);if(TTJ==null){analysisValue=newAnalysisValue();analysisValue。setStkCode(blkCode);analysisValue.setResultScore(0);analysisValue.setResultDesc(”数据不足,分析失败");returnanalysisValue;}//计算资金增幅百分比DoublepricePerct=calcBlkPricePerct(blkCode,transDate);if(pricePerct==null){analysisValue=newAnalysisValue();analysisValue.setStkCode(blkCode);analysisValue。setResultScore(0);analysisValue.setResultDesc(”数据不足,分析失败");returnanalysisValue;}//近几日出现量能平台if(TTJ〈5&&TTJ>=1&&pricePerct〉0){java.util。Datedate=transDate;intcount=0;//将date移至量能突破的当天do{date=super.getStkTransDateUtil().getBeforeTransDate(date);count++;}while(count<TTJ);Integerscore=null;java.util.DateplatformDate=date;IntegerplatformClose=null;IntegerplatformOpen=null;IntegerhalfPlatform=null;//日K线的1/2处booleanflag=true;//用来判断当前true:看涨,false:看跌DoubledoubleRange=null;//当天相对于量能平台的涨跌幅IntegerintRange=null;do{StringdateStr=DateUtil.getFormatedDate(date,"yyyyMMdd");//取得个股的当日日K数据BlkDailyKDatadailyKData=(BlkDailyKData)super.getUsingDataList()。getDailyData(Data.DataName。BlkDailyKData.getShortName(),blkCode,date);if(dailyKData==null){returnnull;}Integeropen=dailyKData.getOpen(dateStr);if(open==null){returnnull;}Integerclose=dailyKData.getClose(dateStr);if(date==platformDate){//量能平台当天platformClose=close;platformOpen=open;halfPlatform=Math.abs((close-open))/2+platformOpen;}else{//计算当天相对于量能平台的涨跌幅doubleRange=100。0*(close-platformClose)/platformClose;intRange=doubleRange.intValue();if(platformOpen<platformClose){//量能平台当天K线为阳线if(doubleRange〈0){//看跌//如果是量能平台出现后的第一天或者跌破阳线1/2if(score==null||(flag==true&&close<halfPlatform)){score=20;flag=false;}else{if(close>halfPlatform){score+=intRange;}else{score-=intRange;}}}else{//看涨if(score==null){score=90;}else{score-=intRange;}}}else{//量能平台当天K线为阴线if(doubleRange〈0){//看跌if(score==null||flag==true){score=20;flag=false;}else{score-=intRange;}}else{//看涨if(score==null){score=90;}else{score—=intRange;}}}}date=super。getStkTransDateUtil().getNextTransDate(date);}while(!date.after(transDate));analysisValue=this.assertValue(blkCode,transDate,score,intRange,flag,TTJ);returnanalysisValue;}else{//近几日无量能平台突破信号出现analysisValue=newAnalysisValue();analysisValue.setStkCode(blkCode);analysisValue.setResultScore(40);analysisValue。setResultDesc("近几日未出现量能平台,保持观望");returnanalysisValue;}}/***根据量能突破的信号出现,分析行情的变化。**@paramstkCode股票代码*@paramtransDate交易日期*@paramscore得分*@paramrange交易日相对于量能平台的涨跌幅*@paramflag股票看涨或者看跌*@paramTTJ量能突破出现在前TTJ天**@return分析结果(含评分和评价)*/privateAnalysisValueassertValue(StringstkCode,java.util.DatetransDate,Integerscore,Integerrange,booleanflag,IntegerTTJ){AnalysisValueanalysisValue=newAnalysisValue();analysisValue.setStkCode(stkCode);analysisValue.setResultScore(score);//将date移至量能突破的当天java.util。Datedate=transDate;intcount=0;do{date=super.getStkTransDateUtil().getBeforeTransDate(stkCode,date);count++;}while(count<TTJ);StringdateStr=DateUtil。getFormatedDate(date,"yyyyMMdd");StringBuilderdesc=newStringBuilder();range=Math。abs(range);if(flag==true){//看涨if(range〈5){desc.append(dateStr);desc.append("出现量能平台突破,且涨跌幅度小于5%较小,建议立即买入”);analysisValue。setResultDesc(desc.toString());returnanalysisValue;}elseif(range〈15){desc.append(dateStr);desc.append("出现量能平台突破,但涨跌幅度小于15%较大,建议买入");analysisValue。setResultDesc(desc。toString());returnanalysisValue;}else{desc.append(dateStr);desc。append("出现量能平台突破,但涨跌幅度大于15%偏大,建议谨慎买入");analysisValue.setResultDesc(desc.toString());returnanalysisValue;}}else{//看跌if(range〈5){desc。append(dateStr);desc.append(”出现量能平台跌破,且涨跌幅度小于5%较小,建议立即卖出");analysisValue。setResultDesc(desc.toString());returnanalysisValue;}elseif(range<15){desc.append(dateStr);desc。append(”出现量能平台跌破,但涨跌幅度小于15%较大,建议卖出");analysisValue.setResultDesc(desc.toString());returnanalysisValue;}else{desc.append(dateStr);desc.append(”出现量能平台跌破,但涨跌幅度大于15%偏大,建议逢高卖出”);analysisValue。setResultDesc(desc.toString());returnanalysisValue;}}}/***计算QJJ的值*@paramsstkCode股票代码*@paramstransDate交易日期**@return返回QJJ的值*/privateDoublecalcStkQJJ(StringstkCode,java。util.DatetransDate){java。util.Datedate=transDate;StringdateStr=DateUtil.getFormatedDate(date,"yyyyMMdd");//取得当天的日K数据StkDailyKDatadailyKData=(StkDailyKData)super.getUsingDataList().getDailyData(Data。DataName.StkDailyKData.getShortName(),stkCode,date);if(dailyKData==null){returnnull;}Integeropen=dailyKData.getOpen(dateStr);if(open==null||open==0){returnnull;}Integerclose=dailyKData。getClose(dateStr);Integerhigh=dailyKData.getHigh(dateStr);Integerlow=dailyKData。getLow(dateStr);Longvolume=dailyKData。getVolume(dateStr);//单位:(股)IntegercMinusO=close—open;if(cMinusO〈0){cMinusO=-cMinusO;}DoubleQLL=100。0*volume/((high-low)*2-cMinusO);//消除数据库中存放的100倍returnQLL;}/***计算QJJ的值*@paramsidxCode股指代码*@paramstransDate交易日期**@return返回QJJ的值*/privateDoublecalcIdxQJJ(StringidxCode,java。util.DatetransDate){java.util.Datedate=transDate;StringdateStr=DateUtil.getFormatedDate(date,"yyyyMMdd");//取得当天的日K数据IdxDailyKDatadailyKData=(IdxDailyKData)super。getUsingDataList()。getDailyData(Data.DataName.IdxDailyKData.getShortName(),idxCode,date);if(dailyKData==null){returnnull;}Integeropen=dailyKData.getOpen(dateStr);if(open==null||open==0){returnnull;}Integerclose=dailyKData.getClose(dateStr);Integerhigh=dailyKData.getHigh(dateStr);Integerlow=dailyKData.getLow(dateStr);Longvolume=dailyKData.getVolume(dateStr);//单位:(股)IntegercMinusO=close-open;if(cMinusO<0){cMinusO=-cMinusO;}DoubleQLL=100。0*volume/((high-low)*2-cMinusO);//消除数据库中存放的100倍returnQLL;}/***计算QJJ的值*@paramsblkCode板指代码*@paramstransDate交易日期**@return返回QJJ的值*/privateDoublecalcBlkQJJ(StringblkCode,java.util.DatetransDate){java.util.Datedate=transDate;StringdateStr=DateUtil。getFormatedDate(date,”yyyyMMdd");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论