`
teaofnit
  • 浏览: 15981 次
  • 性别: 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
分享到:
评论

相关推荐

    EXCEL读取通达信股票日线数据

    在处理股票数据时,要注意数据的有效性,比如无效数值通常表示为特定的填充字符,如`0xF8,0xF8,0xF8,0xF8`。在编写VBA或C++代码时,需要进行数据有效性检查,避免这些无效数据影响分析结果。 5. **应用示例**: -...

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

    这些文件通常存储了股票的历史交易数据、自定义技术指标数据、用户自定义板块信息等。它们是以二进制格式存储的,因此直接用文本编辑器打开可能无法理解其中的内容。要读取和写入这些文件,我们需要编写C#程序,使用...

    股票数据软件实例C++

    C++标准库提供了`fstream`类来处理文件读写,通过逐行读取文件,解析出各个字段,然后存储到内存结构中。 2. 数据结构设计:为了有效地管理和处理股票数据,我们需要定义合适的数据结构。这可能包括股票对象,包含...

    文华数据格式分析,适合生成文本进行分析

    文件读写操作 通过`FileOpen()`、`FileGetSize()`、`FileRead()`等函数,脚本实现了对指定文件的读取操作。这些操作是获取文华财经盘后数据的关键步骤之一。具体来说: - `FileOpen($fileWH,16)`:打开文件,参数...

    股票行情传送代码(DBF文件)

    在股票市场中,由于需要频繁地记录、存储和更新股票行情数据,DBF文件因其轻量级、易于读写的特点而被采用。 首先,DBF文件的结构:一个DBF文件由表头、字段定义和数据记录三部分组成。表头包含了文件的一些元信息...

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

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

    易语言源码股票查询.7z

    源码是程序的核心部分,通过阅读和分析源码,我们可以了解股票查询功能的实现细节,这对于学习易语言、提升编程技能,以及深入理解股票数据处理的程序员来说,都是宝贵的资源。 在易语言中,源码通常由一系列的模块...

    优克斯股票软件数据分析

    另一个路径`stringdbDatesFilePath="./Data/Db/daydb.dt"`则可能指向包含日期信息的数据文件。 - **符号与日期文件**:`stringsymbolPath="./Data/Db/symbols.txt"`和`stringdatePath="./Data/Db/date.txt"`分别用于...

    股票数据(尝鲜版).zip

    首先,核心文件是"股票数据(尝鲜 版).py",这很可能是一个Python脚本,它执行了股票数据的爬取任务。在Python中,编写爬虫通常会用到requests库来发送HTTP请求,获取网页内容;BeautifulSoup或者lxml库来解析HTML或...

    数据结构变长记录文件

    数据结构中的变长记录文件是一种特殊类型的文件,它与传统的固定长度记录文件不同,每条记录的大小可以不一致。这种灵活性使得变长记录文件在处理各种数据时更具优势,尤其是在数据规模变化大或者需要存储不同类型...

    ReadFile.rar_Python获取通达信日线数据_python readFile_tdx_tentmev_通达信

    通常,通达信的数据文件存储在特定的文件夹下,比如在Windows系统中,可能是`C:\Program Files\TDX`或用户自定义的位置。 为了实现这个功能,我们可以使用Python的文件操作模块如`os`和`shutil`,以及第三方库如`...

    股票数据收集项目.zip

    - **读写文件**:可能使用`os`和`ioutil`包来读取和写入数据文件,存储股票数据。 - **CSV处理**:如果数据集是CSV格式,可能使用`encoding/csv`包进行读写操作。 6. 数据库集成: - **数据库操作**:Go有多种...

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

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

    A股深证交易所1085支股票25年历史数据

    压缩包中的文件名"StockDir.sz"可能代表存储了所有股票数据的目录或者数据库文件。通常,这样的数据集会以CSV(Comma Separated Values)格式存储,因为CSV格式简单、通用,易于读写和分析。每个文件可能代表一支...

    新浪股票Demo源码

    4. **数据存储模块**:为了便于后续分析,源码可能还包括将股票数据存储到本地数据库或文件的功能。这可能涉及到SQL语句的编写或CSV文件的读写操作。 在学习和使用新浪股票Demo源码时,我们需要关注以下几个关键...

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

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

    Python-TuShare是爬取中国股票历史数据的工具

    例如,CSV格式适合小型数据,易于读写;Excel适合直观查看和编辑;HDF5是一种高效的数据存储格式,适合大数据量的存储和快速读取。 在Python-TuShare的使用中,用户可以轻松获取各种金融数据,如股票开盘价、收盘价...

    MFC股票新闻,数据库,界面设计,文件存储

    4. **文件操作**:文件存储在MFC中主要涉及读写文件,可能是用于备份数据库、存储配置信息或临时数据。MFC提供了丰富的类如CFile、CStdioFile等支持文件操作。此外,如果数据库使用文件存储(如SQLite),那么文件...

    C++MFC实现股票行情显示

    5. **文件操作**:为了保存和加载股票数据,项目可能使用了CFile类或fstream库进行文件I/O操作。数据可能以CSV、XML或自定义格式存储,便于读写和交换。 6. **事件驱动编程**:MFC采用消息驱动机制,用户界面的每个...

    BCB 之 C++Builder XE 之 Excel 股票数据整合

    【BCB 之 C++Builder XE 之 Excel 股票数据整合】是一个专注于C++ Builder XE平台上的商业开发案例,它演示了如何利用该集成开发环境(IDE)来处理Excel文件,特别是与股票数据相关的整合工作。C++Builder XE是一个...

Global site tag (gtag.js) - Google Analytics