问题描述
一直想写个程序分析股票数据,无奈找不到数据源,昨天发现雅虎有开放的股票接口。鸡冻。先写个工具类,为后面分析数据做个准备。废话不多说,上代码!/***股票实体类*@author祁丛生2013.01.02*/publicclassStockData{privateStringcode;//股票编码privateStringname;//股票名称privateStringdate;//交易日期privatedoubleopen=0.0;//开盘价privatedoublehigh=0.0;//最高价privatedoublelow=0.0;//最低价privatedoubleclose=0.0;//最后一次交易价格,相当于收盘价privatedoublevolume=0.0;//总交易手privatedoubleadj=0.0;//最后一次交易价格(今天的收盘价当做加权价格)//settersandgetters.....省略//toStringmethod...为测试方便可以加个toString方法,省略}/***yahoo股票数据接口工具类*@author祁丛生2013.01.02*@version1.0*/importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.URL;importjava.net.URLConnection;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;publicclassGetDataFromYahooUtil{publicstaticfinalStringYAHOO_FINANCE_URL="http://table.finance.yahoo.com/table.csv?";publicstaticfinalStringYAHOO_FINANCE_URL_TODAY="http://download.finance.yahoo.com/d/quotes.csv?";/***根据股票编码、开始日期、结束日期获取股票数据*@author祁丛生*@paramstockName沪市:000000.ss深市:000000.sz*@paramfromDate开始日期*@paramtoDate结束日期*@returnList<StockData>*/publicstaticList<StockData>getStockCsvData(StringstockName,StringfromDate,StringtoDate){List<StockData>list=newArrayList<StockData>();String[]datefromInfo=fromDate.split("-");String[]toDateInfo=toDate.split("-");Stringcode=stockName.substring(0,6);;Stringa=(Integer.valueOf(datefromInfo[1])-1)+"";//a–起始时间,月Stringb=datefromInfo[2];//b–起始时间,日Stringc=datefromInfo[0];//c–起始时间,年Stringd=(Integer.valueOf(toDateInfo[1])-1)+"";//d–结束时间,月Stringe=toDateInfo[2];//e–结束时间,日Stringf=toDateInfo[0];//f–结束时间,年Stringparams="&a="+a+"&b="+b+"&c="+c+"&d="+d+"&e="+e+"&f="+f;Stringurl=YAHOO_FINANCE_URL+"s="+stockName+params;URLMyURL=null;URLConnectioncon=null;InputStreamReaderins=null;BufferedReaderin=null;try{MyURL=newURL(url);con=MyURL.openConnection();ins=newInputStreamReader(con.getInputStream(),"UTF-8");in=newBufferedReader(ins);StringnewLine=in.readLine();//第一行为标题行,不取数据while((newLine=in.readLine())!=null){StringstockInfo[]=newLine.trim().split(",");StockDatasd=newStockData();sd.setCode(code);sd.setDate(stockInfo[0]);sd.setOpen(Float.valueOf(stockInfo[1]));sd.setHigh(Float.valueOf(stockInfo[2]));sd.setLow(Float.valueOf(stockInfo[3]));sd.setClose(Float.valueOf(stockInfo[4]));sd.setVolume(Float.valueOf(stockInfo[5]));sd.setAdj(Float.valueOf(stockInfo[6]));list.add(sd);}}catch(Exceptionex){returnnull;//无交易数据}finally{if(in!=null)try{in.close();}catch(IOExceptionex){ex.printStackTrace();}}returnlist;}/***根据股票编码、日期获取股票数据*@author祁丛生*@paramstockName沪市:000000.ss深市:000000.sz*@paramdate日期*@returnStockData*/publicstaticStockDatagetStockCsvData(StringstockName,Stringdate){List<StockData>list=getStockCsvData(stockName,date,date);return((list.size()>0)?list.get(0):null);}/***根据股票编码获取当天股票数据*@author祁丛生*@paramstockName沪市:000000.ss深市:000000.sz*@returnStockData*/publicstaticStockDatagetStockCsvData(StringstockName){Stringdate=String.format("%1$tF",newDate());List<StockData>list=getStockCsvData(stockName,date,date);return((list!=null&&list.size()>0)?list.get(0):null);}}/***测试类*/publicclassTest{publicstaticvoidmain(String[]args){GetDataFromYahooUtilstockUtil=newGetDataFromYahooUtil();StockDatasd=stockUtil.getStockCsvData("600629.ss","2012-12-31");System.out.println(sd);}}测试结果:StockData[code=600629,date=2012-12-31,open=7.059999942779541,high=7.25,low=7.050000190734863,close=7.130000114440918,volume=1831800.0,adj=7.130000114440918]欢迎交流QQ:875881559
解决方案
解决方案二:
分析是关键。这里面牵扯的业务知识太多了,咱不懂股票的真的不好说太多。我最近也在学京东的接口,希望能把数据库中的数据批量上传到京东的数据库中。方法不难,但是其中遇到的具体的问题,真的不好解决。
解决方案三:
解决方案四:
你好,我需要帮助,请联系
解决方案五:
有获得总交易金额的历史记录的方法么?
解决方案六:
脱机式通达信程序化接口,可以在不运行券商下单软件情况下,直接进行程序化交易,下单速度可达到1秒钟几百单。功能包括下单,撤单,查询资金股份、当日委托、当日成交等,支持融资融券,可用于计算机自动程序化交易,供具有编程能力的股民使用。详见chaoguwaigua.com