基于tushare和mongo,玩转qlib自带的数据库

百天计划之23天,关于“AI量化投资,财富自由与个人成长”。

今天重点关注基于qlib的量化数据库,引入自有的数据源

这是一个常见的需求。

qlib内置的数据源是来自网上,数据质量不高且不稳定,网络不好的时候下载不下来。

目前我选用的数据库是tushare,持久化的数据库是mongo。

这里有定时任务持续更新数据,同时更新的数据要同步更新qlib。

qlib的数据库是专门为AI量化定制的,可以多进程并行计算,在海量因子计算的时候有优势。

01 数据准备

qlib.tests.data.py  GetData

DATASET_VERSION = "v2"
REMOTE_URL = "https://qlibpublic.blob.core.windows.net/data/default/stock_data"
QLIB_DATA_NAME = "{dataset_name}_{region}_{interval}_{qlib_version}.zip"

从微软的服务器上下载一个zip,然后解压。

支付A股,美股,按天和按分钟两种。

如果下载慢,可以直接自己拼一个url,在下载软件里把zip包下载自行解压也可以。

02 自动更新日频数据

手动执行yahoo脚本(一次)

python scripts/data_collector/yahoo/collector.py update_data_to_bin --qlib_data_1d_dir <user data dir> --trading_date <start date> --end_date <end date>

定时任务执行(linux下的cron定时器):

* * * * 1-5 python <script path> update_data_to_bin --qlib_data_1d_dir <user data dir>

这里核心代码是调用了yahoo query。

_resp = Ticker(symbol, asynchronous=False).history(interval=interval, start=start, end=end)

增量数据下载,正则化,而后使用增量dump:

# dump bin
_dump = DumpDataUpdate(
    csv_path=self.normalize_dir,
    qlib_dir=qlib_data_1d_dir,
    exclude_fields="symbol,date",
    max_workers=self.max_workers,
)
_dump.dump()

dump_bin一共有三种模式:

fire.Fire({"dump_all": DumpDataAll, "dump_fix": DumpDataFix, "dump_update": DumpDataUpdate})

创建模式:DumpDataAll,

修复模式:DumpDataFix, 

更新模式:DumpDataUpdate。

03 从dump模式看数据准备

其实问题反而简单,我们可以不必看那些collector的代码,只知道我们需要把序列写到一个文件目录下的csv即可。

正则化只是把初始价格置为1,有点类似计算equity的模式。

python scripts/dump_bin.py dump_all ... --symbol_field_name symbol

python scripts/dump_bin.py dump_update ... --symbol_field_name symbol

python scripts/dump_bin.py dump_all --csv_path  ~/.qlib/csv_data/my_data --qlib_dir ~/.qlib/qlib_data/my_data --include_fields open,close,high,low,volume,factor

财务数据PIT,也是读取“正则后”的csv文件夹:

python dump_pit.py dump --csv_path ~/.qlib/stock_data/source/pit_normalized --qlib_dir ~/.qlib/qlib_data/cn_data --interval quarterly

PIT原始csv:报告日期,报告期,字段值,字段名和symbol

date,period,value,field,symbol
2008-03-01,2007-12-31,0.3479,roeWa,sh600519
2012-03-23,2011-12-31,0.4039,roeWa,sh600519
2019-07-13,2019-06-30,0.0,roeWa,sh600519

PIT的正则化后,把报告期变成“年第X季度”,比如2011-12-31变成201104

date,period,value,field,symbol
2008-03-01,200704,0.3479,roeWa,sh600519
2012-03-23,201104,0.4039,roeWa,sh600519
2019-07-13,201902,0.0,roeWa,sh600519
2007-04-28,200701,0.090219,roeWa,sh600519

最终以“规范化处理“后的csv为准。

以上就是我们需要准备的csv格式。

04 从tushare下载数据到mongo

mongo用来存储金融序列非常方便,它不需要Schema,可以存储json。

下面是把茅台(600519.SH)的数据入库了,后续加上自动更新。

05  从mongo到csv并自动dump

从mongo下载并保存成csv,这个代码就不贴了:

茅台最新的”复权价“超过1万4了!

dump_bin的代码:

这里我们可以不使用命令行,直接调用函数。

直接调用DumpDataAll与前述脚本的效果一致:

from common.scripts.dump_bin import DumpDataAll, DumpDataUpdate
from common.config import CN_CSVS, CN_DATA_TEST

# csv的文件路径以及qlib的目录
def dump_csv_to_bin():
    dump = DumpDataAll(csv_path=CN_CSVS, qlib_dir=CN_DATA_TEST)
    dump.dump()

小结:

1、qlib自带的crawler,直接基于网页的采集脚本,一是网络可能不稳定,数据质量无法保证;二是不易脚本不容易做成自动化部署。

2、基于mongo数据库与tushare数据源,我们设计了一个数据更新的逻辑

明天会继续完善pit财务数据的导入。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI量化投资实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值