android 股票数据通过日K获取周K的数据 算法 源码
目前的数据是从新浪接口获取的, http://biz.finance.sina.com.cn/stock/flash_hq/kline_data.php?symbol=sh600000&end_date=20141120&begin_date=20120101
返回数据为XML格式:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <control> 3 <content d="2012-01-04" o="8.540" h="8.560" c="8.410" l="8.390" v="342014" bl="" /> 4 <content d="2012-01-05" o="8.470" h="8.820" c="8.650" l="8.470" v="1321162" bl="" /> 5 <content d="2012-01-06" o="8.630" h="8.780" c="8.710" l="8.620" v="617787" bl="" /> 6 <content d="2012-01-09" o="8.720" h="8.990" c="8.950" l="8.680" v="801362" bl="" /> 7 8 </control>
通过以上接口可以获取到日K的数据并封装到一个List集合中保存.
如下的代码是通过日K的数据集合来换算出周K的数据集合.
1 2 /** 3 * 通过日K算出周K的数据 4 * @param listDay 5 * @return 6 */ 7 public static List<LxKlineEntity> getWeekLineData1(List<LxKlineEntity> listDay) { 8 List<LxKlineEntity> weekList = new ArrayList<LxKlineEntity>(); 9 try { 10 if (listDay != null && listDay.size() > 0) {//先确认有数据 11 int size = listDay.size(); 12 13 String beginDate = listDay.get(0).getDate(); 14 String endDate = listDay.get(size-1).getDate(); 15 16 int weeks = getStockWeeks(beginDate, endDate);// 周数 17 18 19 for (int i = 0; i < weeks; i++) { 20 21 22 LxKlineEntity vo = null; 23 // 获取最高价 最低价 收盘价和开盘价格 24 // 需要考虑的情况是如果这周都是休息,那么就没数据可以增加的. 比如春节和国庆节 25 List<String> liststr = new ArrayList<String>(); 26 String[] day = getWeeksByDay(beginDate);//根据给定的时间获得这一股票交易周的天数名称 类型为2014-11-29 27 28 29 List<LxKlineEntity> weekOneList =weekOneList = new ArrayList<LxKlineEntity>(); 30 31 for (int j = 0; j < day.length; j++) {// 循环遍历该周的数据 32 33 34 String day1 = day[j]; 35 36 for (int k = 0; k < size; k++) { 37 String date = listDay.get(k).getDate(); 38 if (date.equals(day1)) { 39 // 如果日K的数据中有那天的数据 那么就将那个K线数据给加进来 40 weekOneList.add(listDay.get(k)); 41 } 42 } 43 // 计算最高价和最低价 收盘 开盘 44 if (weekOneList != null && weekOneList.size() > 0) {// 如果这周有数据 45 vo = new LxKlineEntity(); 46 int len = weekOneList.size(); 47 vo.setOpen(weekOneList.get(0).getOpen());// 该股周的第一天的开盘价格 48 vo.setClose(weekOneList.get(len-1).getClose());// 该股周的最后一天的收盘价格 49 double hi = 0;// 最高价 50 double lo = 9999;// 最低价 51 double va = 0;// 成交量 52 for (int m = 0; m < weekOneList.size(); m++) { 53 double high = weekOneList.get(m).getHigh(); 54 double low = weekOneList.get(m).getLow(); 55 double val = weekOneList.get(m).getVolume(); 56 if (high > hi) 57 hi = high; 58 if (low < lo) 59 lo = low; 60 va += val; 61 } 62 vo.setLow(lo); 63 vo.setHigh(hi); 64 vo.setVolume(va); 65 } 66 } 67 beginDate = getDay(day[6], 1); 68 if (vo != null) 69 weekList.add(vo); 70 } 71 } 72 } catch (Exception e) { 73 e.printStackTrace(); 74 } 75 return weekList; 76 }
以上代码的运行效率可以再优化.
欢迎大家提议修改.
联系QQ:30338970
EMAIL:c9n9m@163.com