zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    @PathVariable("cart_id") @RequestParam("ur") @RequestBody 比较
    将字符串数组解析为数组
    org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class ...
    nacos+openFeign #找不到服务 feign.FeignException$NotFound: status 404 reading
    java生成一个范围的数字
    栏中栏
    百度PaddlePaddle入门-4(5步法之八股文)
    百度PaddlePaddle入门-3(框架)
    百度PaddlePaddle入门-2(使用Numpy构建神经网络)
    MachineLearning入门-3(hello word)
  • 原文地址:https://www.cnblogs.com/china-soft/p/4131645.html
Copyright © 2011-2022 走看看