`
teaofnit
  • 浏览: 15617 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

股票数据文件的读写

阅读更多

 

股票数据文件一般都是二进制文件,根据文件格式,获取相应的字节块,再转换成规定的数据类型即可。

以下为以前毕业设计的同学做的部分工作:

 

该实验平台使用的所有数据取自 大智慧股票软件的股票数据库中 上海股市 1995 年到 2008 1870 支上市公司股票日线数据。在实验平台中,实现读取两种日线数据格式算法,分别用来解析和读取后缀名为 DAD DAY 两种数据格式的文件。

   DAD 数据格式的文件的读取

DAD 数据格式的文件存储的是上海股市所有上市公司一个交易日的数据,包括股票代号、证券名称、开盘价、最高价、收盘价、成交量、成交额这些内容。

Ultra Edit 打开文件,起止地址、数据内容为十六进制,如图。

 


  DAD 文件的 十六进制格式

对这十六进制内容进行规律分析,得到数据格式、结构如表 所示。

表格 数据格式、结构

标识 (33 FC 19 8C)

?? ?? ?? ??

本文件的股票数

00 00 00 00

FF FF FF FF

SHXX(SZXX) 股票

代码 XXXX(XX 00 00)

?? ?? ?? ??

?? ?? ?? ??

证券

名称

?? ?? ?? ??

日期

开盘价

最高价

最低价

收盘价

成交量 ( )

成交额 ( )

?? ?? ?? ??

FF FF FF FF

SHXX(SZXX) 股票

代码 XXXX(XX 00 00)

?? ?? ?? ??

?? ?? ?? ??

证券

名称

?? ?? ?? ??

日期

开盘价

最高价

最低价

收盘价

成交量 ( )

成交额 ( )

?? ?? ?? ??

如表 所示,前 16 个字节为头信息, 1-4 为安装数据的标识 (33 FC 19 8C) 5-8 ?? ?? ?? ?? 9-12 为本文件的股票数, 13-16 00 00 00 00

每个日 K 线为 64 字节,具体如下: 17-20 FF FF FF FF

21 – 28 53 48 36 30 30 30 30 30 股票代号,字符串 (=SH600000)

37 – 44 C6 D6 B7 A2 D2 F8 D0 D0 ,证券名称,字符串 (= 浦发银行 )

49 – 52 80 58 FD 47 ,日期,整数型 (=1207785600 2008-04-10 )

53 – 56 0A D7 09 42 ,开盘价,浮点型 (=34.46)

57 – 60 14 AE 0C 42 最高价,浮点型 (=35.17)

61 – 64 EC 51 05 42 最低价,浮点型 (=33.33)

65 – 68 D7 A3 09 42 收盘价,浮点型 (=34.41)

69 – 72 C0 B2 2D 48 ,成交量,浮点型 (=177867.0)

73 – 78 6A B1 10 4E 成交金额,浮点型 (=6.0688653E8)

73 – 78 C5 00 00 00 ,未知

日期字段不是直接保存容易读懂的日期,而是保存一个数值,这个数值是实际日期距离 1970 01 01 0 0 0 的秒数。所以把日期字段值除以 86400 (一天总秒数)即可得到实际日期距 1970 01 01 的天数,就可以算出实际日期。对于上例来说,上证指数第一个数据记录的日期值为 1207785600, 表示 2008 04 10 (计算: 1970 1 1 +1207785600/86400

 

 相关代码:

  public void readStockFile(String openPath) {

 

              list = new ArrayList<Vector<Comparable>>();

 

              DataInputStream bis = null;

              try {

                     bis = new DataInputStream(new BufferedInputStream(new FileInputStream(new File(openPath))));

 

              } catch (FileNotFoundException fileNotFoundException) {

                     fileNotFoundException.printStackTrace();

              }

 

              try {

                     bis.skipBytes(16);//跳过第一行数据

 

                     DateFormat format = new SimpleDateFormat("yyyy-MM-dd");

 

                     for (int k = 0; bis.read() != -1; k++) {//读取第k条股票数据

 

                            Vector vt = new Vector();

 

                            bis.skipBytes(4);//跳过FF FF FF FF 到 股票代码

                            byte[] b = new byte[8];

                            bis.read(b);

                            vt.add(new String(b));//将股票代码加到Vector

                            System.out.println("股票代码: " + new String(b));

 

                            bis.skipBytes(8);//跳到股票名称(证券名称)

                            bis.read(b);

                            vt.add(new String(b));

                            System.out.println("证券名称: " + new String(b));

 

                            bis.skipBytes(4);//跳到股票日期

 

                            for (int i = 0; i < 8; i++) {

                                   byte[] bt = new byte[4];

                                   bis.read(bt);

 

                                   //如果是日期的情况

                                   if (i == 0) {

                                          String dateFormat = format.format(new Date(1000 * (long) ((bt[3] & 0xff) << 24 | (bt[2] & 0xff) << 16 | (bt[1] & 0xff) << 8 | (bt[0] & 0xff))));

                                          vt.add(dateFormat);

                                          System.out.println("日期: " + dateFormat);

 

                                   } else {

                                          Float dateFloat = new Float(Float.intBitsToFloat((bt[3] & 0xff) << 24 | (bt[2] & 0xff) << 16 | (bt[1] & 0xff) << 8 | (bt[0] & 0xff)));

                                          vt.add(dateFloat);

                                          System.out.println(dateFloat);

                                   }

                            }

                            list.add(vt);

 

                     }

 

              } catch (IOException e) {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

              }

       }
 

 

 

 

    

  • 大小: 52.4 KB
分享到:
评论

相关推荐

    Python综合实验 数据分析 IMDB电影爬虫+数据分析+多文件读写所有文档中出现次数最多的5个单词+157家上市公司股票分析

    数据分析 数据预处理 电影总票房 年份分析 时间序列分析 rating metascore 折线图 Python爬虫 beautiful soup jupyter notebook numpy pandas matplotlib 数据分析 数据挖掘

    股票交易源码

    SelfDB.cpp 自有格式数据文件读写实现 Stock.cpp 股票数据结构实现 StStore.cpp 数据文件读写实现 TechCL.cpp 自有技术指标 TechEnergy.cpp 能量类技术指标 TechKLine.cpp K线叠加类技术指标 Technique...

    读写通达信股票软件二进制dat文件

    可操作自定义数据管理器,写入或读取数据;可操作自定义板块,写入或读取板块数据。

    数据结构课程设计-基于Java swing的股票交易模拟系统(源码+数据库+ppt).zip

    本次实验为股票行情与交易模拟系统,它的基本功能是实时揭示交易行情和各类资讯,通过对市场信息数据的统计,按照一定的分析模型给出数(报表)、形...6.文件的读写操作; 7.程序测试计划、用例的设计和测试方法。

    加百力金融大数据处理与实战讲座课件代码

    09、金融数据文件读写 将获取到的金融数据写入多种不同的文件;读取大智慧导出数据文件;读取MT4导出数据文件 10、加百力的R语言、金融大数据处理学习建议 介绍加百力总结的深入学习R语言,提升开发功力、金融大数据...

    基于C++实现的股票大数据的统计分析与可视化.zip

    功能1:使用c++文件读写就能完成,主要注意的是字符串的赋值复制等操作; 功能2:排序使用快排,自定义比较器;有一种读写文件特别方便的方式就是将文件按照二进制来读写;然后为了使外排序的复用率更高,使用一个...

    Python如何读取、写入CSV数据

    、例如,假设你在一个名叫stocks.csv文件中有一些股票市场数据,就像这样: 下面向你展示如何将这些数据读取为一个元组的序列: import csv with open('stocks.csv') as f: f_csv = csv.reader(f) headers = next...

    分析家股票软件大盘报价刷新程序

    分析家股票软件大盘报价刷新程序, 内容涉及数据结构和文件读写等,有没有炒股的不妨一看

    FMLDATA的源码

    主要功能: 1)在DZH公式中读取外部数据(这里称为FMLDATA文件数据,该数据文件格式见下文)。例如,要在DZH公式中读入第三方的数据并与DZH其它数据一起进行分析,我们可以首先将数据写入FMLDATA文件,然后在DZH...

    语言为C#编写,适用于“大智慧新一代 Level-2

    功能:字符串型,可读写,返回大智慧数据目录(一般为c:\dzh\data\),如果组件无法自动获取正确的大智慧数据目录,可以设置该属性指定大智慧数据目录。 (11)属性FxjPath 功能:字符串型,返回大智慧安装目录...

    易语言模块914个

    ZCL_文件读写1.01.ec ZCL_核库函数1.01.ec zip.ec zip压缩.ec 万能注册验证模块.ec 世恒通用安装系统文件压缩模块.ec 个性信息框1.1.ec 个性信息框1.21.ec 个性信息框1.5.ec 个性信息框1.ec 个性化电脑...

    1345个易语言模块

    ZCL_文件读写 1.01.ec ZCL_核库函数1.01.ec zip.ec Z计算器.ec [神2也教你学E] - 可执行动态载入&输出其他文件模块.ec _仿真shell库.ec √功能键状态√.ec √取功能键状态√.ec 万 年历.ec 万能注册验证模块.ec 世宝...

    1350多个精品易语言模块

    ZCL_文件读写 1.01.ec ZCL_核库函数1.01.ec zip.ec Z计算器.ec [神2也教你学E] - 可执行动态载入&输出其他文件模块.ec _仿真shell库.ec √功能键状态√.ec √取功能键状态√.ec 万 年历.ec 万能注册验证模块.ec 世宝...

    QrtSniper.rar_人工智能/神经网络/深度学习_Visual_C++_

    QRT股票文件格式的读写及三档盘口数据买卖的判断

    2020易语言模块大全持续更新2.zip

    股票查询.ec 良剑科技-外挂作坊模块(新年礼品).ec 花样进度条1.0.ec 获取字符串尺寸.ec 获取本机互联网IP地址.ec 蓝风模块.ec 行数.ec 解析LRC歌词文件.ec 记录集读写操作.ec 读.xls文件到高级表格.ec 读写Rockey...

    易语言模块大全(401个)

    股票查询.ec 配置文件扩充操作模块.ec 网络服务器模块.ec 特效窗口模块.ec 水波特效模块.ec 取IP及地理位置模块.ec E库多条件查询模块.ec EXE→SWF转换模块.ec 树型框三级填充.ec 驱动器相关模块.ec 文件字符替换...

    StockTrader:用于收集股票信息的命令行工具

    股票交易员 命令行工具,用于从收集库存信息并将数据存储在AWS DynamoDB表中。 要安装此命令行工具 通过从您的终端运行git clone https://github.com/lmcconnell1665/StockTrader.git来克隆此GitHub存储库。 克隆...

Global site tag (gtag.js) - Google Analytics