基于历史K线数据比较的量化选股方法及其系统分享(第2章 C主程序---关键数据结构)
来源:互联网 发布:贵阳大数据呼叫中心 编辑:程序博客网 时间:2024/05/22 10:24
第2章C主程序---关键数据结构
要进行分析比较,就需要将所有的高频数据放在内存中,我们来计算一下A股2010年至今高频数据的总量是多大。
假设高频数据为15分钟,30分钟,60分钟,日线一共4种类型。
每个类型的K线需要保存开盘,最高,最低,收盘,成交量,成交额六类数据。
分别用浮点型(4字节),浮点型(4字节),浮点型(4字节),浮点型(4字节),整形(4字节),长整形(8字节)来保存,则1根K线数据量为4+4+4+4+4+8=28字节(暂不考虑其它开销):
则1天内总的数据量:
15分钟线:16 * 28字节= 448字节
30分钟线:8 * 28字节 = 224字节
60分钟线:4 * 28字节 = 112字节
日线: 1 * 28字节 = 28字节
总计:812字节/天
A股3200支股票 812 *3200 = 2598400字节/天
2010年至今约7.5年,每年240个交易日共计1800天
那么总的数据量为 1800 * 2598400 = 4.7GB
这里有两种方案保存这些数据:
1) 数据放在SSD上。
2) 数据放在内存中。
选择不同数据存储方案会导致后续数据读取和计算方案不同:放在内存中,可以做到实时计算,速度会比较快,并且可以做到并发查询,但是比较消耗内存;放置在SSD上,需要用到的时候即使调取,这种做法速度会比较慢,但是支持更大数据量,对计算主机的内存要求不高。
综合考虑,目前最小15分钟粒度的情况下,采用全内存方案,8GB内存机器即可满足需求,因此设计采用将数据全部加载到内存中的方案来实现。
将数据全部加载到内存中后,需要考虑下面几点:
1) 快速定位需要的股票并读取数值参与计算。
2) 可以动态扩充K线数值,即实时计算和运行时动态增加。
3) 可以快速从磁盘备份和恢复数据,这个主要考虑程序的故障恢复,启动时,要近似以磁盘最高读取速度加载数据。(若采用固态盘,主程序5秒内加载完所有数据并启动)
基于这个思路,设计数据结构如下:
1) 股票列表采用数组,因为它基本不变,如果需要新增或减少,重建数组即可。另一个重要的原因是基于数组可以实现二分法查找,对于频繁的查询请求,迅速定位到股票代码是十分重要的性能衡量标准,利用二分法可以基本定位时间忽略不计。
2) 对于每个股票的不同K线级别,采用链表形式,即15分钟à30分钟à60分钟à日线,每种级别互补干扰,分别申请内存存放,避免采用超大块内存。
3) 每个股票的每个K线中的数据采用数组存放,即开,高,低,收,成交量,成交金额六个数值为一个数组元素,所有时间数组元素组成一个数组。在使用时,基本都是从某时间段开始顺序访问,因此采用数组可以很方便定位需要的数据;并且数组可以方便实现动态扩充,在数组元素填满后,释放、重新申请、拷贝即可。
4) 基于上述链式结构,可以将数据整块dump到文件,实现数据备份,程序启动时也可以整块直接读入内存,实现程序快速启动,数据快速恢复。
5) 其它开销,每个股票有很多标记位,例如是否已经启用,当前级别数组已用空间和最大空间等。
- 基于历史K线数据比较的量化选股方法及其系统分享(第2章 C主程序---关键数据结构)
- 基于历史K线数据比较的量化选股方法及其系统分享
- 量化投资数据挖掘及其相关方法
- K&R C的历史和特性
- 关键链方法和传统关键路径方法的比较
- 展示主数据的历史变化的几种业务需求及其实现方法
- c语言及其历史
- 系统关键进程的查看和比较
- 量化投资:第5节 选股策略的开发
- ASP.NET页面中实现数据Pie图的关键步骤及其实现方法
- 验证方法学的历史及比较
- 第2章 操作系统的发展历史
- 【量化投资】基于大数据的量化基本面研究探索-以白酒行业为例
- 【量化投资】基于大数据量化的基本面研究探索-以酱油行业为例
- 第7章 量化
- 第7章 量化
- 金融数据分享2-上海上市公司历史交易数据
- 嵌入式系统及其发展历史
- iOS开发
- C/C++中的关键字static
- 如何获取Android手机连接当前网络的外网IP
- Lombok 安装、入门
- 算法导论 练习题 9.3-6
- 基于历史K线数据比较的量化选股方法及其系统分享(第2章 C主程序---关键数据结构)
- Linux查看CPU和内存使用情况
- Cocoapods导入ReactiveCocoa5.0以上版本注意事项
- SVN忽略
- Redis 学习(一)
- 键盘操作
- SQL SERVER 创建约束图解
- sublime 编辑器如何安装插件
- Unity3D二维码的识别与生成