量化交易学习(二十四)下载股票数据保存到数据库
在量化投资中,除了策略外,最重要的东西就是数据了,很多的量化教程会用大量篇幅来介绍数据处理清洗相关的知识。今天我来介绍一下怎么通过调用掘金量化的接口下载股票数据。
掘金量化数据接口
掘金量化的官网其实已经提供了下载数据的例子:
1 | # coding=utf-8 |
具体可查看文档:https://www.myquant.cn/docs2/sdk/python/快速开始.html#提取数据研究示例
不过用这个接口下载的数据有一个致命的问题,它没有提供复权因子!也就是说如果要想获取准确的数据,就得在用到数据的时候重新下载,否则就有可能因为除权除息导致股价不准了。
我在掘金量化的官网上找了很久才找到复权因子的下载接口。
最新版的掘金量化提供了专门的股票和基金的复权因子下载接口,不过都是要付费才能用。
stk_get_adj_factor - 查询股票的复权因子:
fnd_get_adj_factor - 查询基金复权因子:
我用的是券商版的掘金量化,还没升级到最新版,那两个函数用不了,可以用旧版的这个函数来获取,具体文档查看:https://www.myquant.cn/docs2/sdk/python/API介绍/通用数据函数(免费).html#get-history-symbol-查询指定标的多日交易信息
get_history_symbol - 查询指定标的多日交易信息:
本地数据库搭建
数据库我采用的是 MySQL ,因为比较熟悉,下载安装数据库的教程网上有很多,这里就不展开了。
这里介绍一下数据表的结构吧,主键id我用了bigint,可能有点浪费,不过如果以后要存储tick级别的数据的话估计用int不够就用了bigint,价格相关的都用的decimal格式,能准确地存储带小数点的价格数据,成交量用的也是bigint,成交额用的是double。
数据表的DDL如下:
1 | -- quant.daily definition |
数据下载
数据的下载过程使用到了 history
和 get_history_symbol
这两个接口,虽然get_history_symbol
接口也提供了开盘价、最高价、最低价、收盘价等信息,但它只有日线数据,要下载分钟线级别的数据还是要用history
接口。
在下载时,一定要下载不复权的数据,不复权的数据借助复权因子可以算出前、后复权的数据。如果下载的是前、后复权数据则只能确保下载的那天数据是对的。
数据库的操作采用sqlalchemy
库实现。具体代码如下:
首先导入各个库:
1 | # coding=utf-8 |
然后定义数据模型
1 | Base = declarative_base() |
数据下载部分代码:
1 | def init(context): |
主函数:
1 | if __name__ == '__main__': |
这篇文章就到这里啦,下一篇文章介绍怎么在backtrader中使用mysql中的数据。
复权价格计算: T日后复权价格 = T日不复权价格 * T日累计后复权因子 T日前复权价格 = T日不复权价格 * T日前复权因子
T 日前复权因子=T 日累计后复权因子/复权基准日累计后复权因子