0x00 前言
由于某得的数据实在是太贵,某花顺免费版又不提供专业的数据分析工具,Tushare也开始收费,因此决定基于python和MySQL搭建一个自己的金融数据库。期望做到仅依靠交易所、巨潮资讯网等官方的公开数据实现,尽量不依靠某花顺、某财、某浪等第三方网站的金融数据。
0x01 需求分析
由于我不做量化交易,只做宏观经济分析和企业基本面分析,顺便做一点量化选股,因此现阶段的需求如下:
1.基于沪深交易所公开数据读取股票列表并存储到本地数据库,形成离线股票列表,并能定期自动化更新;
2.基于沪深交易所公开数据读取股票详细信息如总股本、流通股本、所属省份、所属行业、英文全名等数据补全股票列表的内容,并定期更新;
3.尽量基于沪深交易所公开数据读取每日开盘价、收盘价存储到本地数据库,并定期更新;
4.尽量基于沪深交易所公开数据读取上市公司财报并保存到本地,同时自动化解析pdf格式的财报,从其中提取三大报表等数据存储到本地数据库;
5.根据三大报表计算ROE、应收存货率、流动比率、速动比率、净现比等指标并存储到本地数据库;
5.提供数据和指标查询接口便于后续开发量化选股模型;
6.后续陆续增加北交所、港交所数据支持;
7.后续增加纽交所、纳斯达克交易所数据支持;
8.后续陆续基于国家统计局、人民银行公开数据增加人口、社融、Lpr、M1M2、GDP、PMI、CPI、房价等数据支持
以上数据不包含分时和高频交易数据,因为我不做量化交易。
0x02 系统架构设计
数据库选择
测算数据量:5000家上市公司,数据量最大的应该就是三大报表的数据库表,设计成每张报表一张表(若数据量再大还可以按沪深交易所拆表),拉取解析近5年的数据,则5000X5X4=单表10万条数据,因此MySQL数据库足以支撑这个数据量。
故目前设计的数据库表结构如下:
stock_a、stock_h、stock_u三个数据库分别代表A股、港股、美股数据库,未来还会增加economy_zh、economy_us等宏观经济数据库和中美期货、债券数据库,便于做海外宏观分析。
目前stock_h和stock_u还没做,只规划了stock_a的表结构如下:
系统架构设计
系统架构大致采用MVC设计模式采用Python3.8进行搭建和编写:分为爬虫模块(负责爬取沪深京港美几家市场和统计局、人民银行等机构的公开数据)、持久化模块(提供连接MySQL数据库和增删改查数据库的功能)、量化模型(调用持久化模块的数据接口进行量化分析)、控制模块(调用持久化模块和爬虫模块完成金融数据定时更新任务)和工具模块(提供pdf解析、自定义异常等通用功能),没有日志模块,我又不是做商业产品,不需要日志。
其中爬虫模块别按照交易所和爬取对象的不同分为上交所、深交所、北交所、港交所、纽交所、纳斯达克交易所、国家统计局、人民银行等爬虫。