ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2

Qlib内置了A股、美股两个市场的历史数据,可以通过运行如下的脚本把数据自动获取到本地。

pythonscripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --regioncn

而且支持从yahoo finance对数据进行日更,使用的脚本在scripts/data_collector。

但我们希望使用ETF做投资,那么就需要自己来扩展数据源。Qlib提供了相应的工具scripts/dump_bin.py

Dump_bin是把csv格式的数据转换为qlib的格式,这样qlib就可以使用。

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

--csv_path指定本地路径上csv目录

--qlib_dir是qlib的数据目录

--include_fields 包含的字段,OHLCV 好理解,就是常规的价量数据,factor是复权因子,通常factor = adjusted_price / original_price

Qlib内置的数据采集里,已经支持了采集基金数据,是网上收集公募基金的数据,由于我们量化仅需要ETF的数据,所以,我自己写了一个下载CSV的工具。                          

Tushare作为基金数据来源

Tushare之前是以新浪财经作为网络的采集集,后来又推出了专业版本,背后的数据质量更高一些,可以通过积分或者赞助少量的一些钱获得更高的权限,基本够用的。

专业版的网址是:https://tushare.pro/

目前还有“数据工具”可以直接查看示例数据以及生成调用代码,让开发的效率提升不少。

我们需要查询场内的基金列表。

ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2_第1张图片

点击“运行调试”,然后导出csv就好了,由于是一次性操作,所以不用写成代码脚本。

ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2_第2张图片

导出结果场内基金1483支。

ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2_第3张图片

然后我们读出这个列表,遍历取日频交易数据。

def collect_etf(code):

    #拉取数据

   df = pro.fund_daily(**{

       "trade_date": "",

       "start_date": "",

       "end_date": "",

       "ts_code": code,

       "limit": "",

       "offset": ""

   }, fields=[

       "ts_code",

       "trade_date",

       "pre_close",

       "open",

       "high",

       "low",

       "close",

       "change",

       "pct_chg",

       "vol",

       "amount"

   ])

return df

数据读出结果就是dataframe格式,直接to_csv存储到指定的目录即可。

ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2_第4张图片

然后使用前面提及的dump_bin工具,可以转这个csv目录转为qlib可以使用的数据存储格式。

dump_all --csv_path D:\008dev\fund_data --qlib_dir~/.qlib/qlib_data/fund_data --date_field_name trade_date --include_fieldsopen,close,high,low,vol,factor

几个需要注意的点:

  • 默认需要一个date字段,如果csv里的字段名称不一样,可以使用—date_field_name来指定。

  • Include_fields是默认要处理的字段,比如你的csv里有PE,PB可以在这里指定。

运行之后,得到如下目录结果和数据。

图片

ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2_第5张图片

数据加载与使用

数据使用比较简单,指定我们刚才的新目录,然后使用D.features加载指定的instruments,可以设定起止的时间段。

返回的数据结构是pandas的dataframe,多索引,主索引是证券代码,次索引是日期。所以访问的时候,直接使用df.loc[‘instrument’]来访问。

import qlib

from qlib.config import REG_CN

from qlib.data import D

import matplotlib.pyplot as plt

class QlibMgr:

   def __init__(self):

       provider_uri = "~/.qlib/qlib_data/fund_data"  # target_dir

       qlib.init(provider_uri=provider_uri, region=REG_CN)

   def load_df(self,instruments,fields,start_time,end_time):

    df = D.features(instruments, fields, start_time=start_time,end_time=end_time, freq='day')

       return df

比如这样直接读出收盘价字段,然后绘图。

se = df.loc['sz163415']['$close']

se.plot()

ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2_第6张图片

后面对数据的使用,计算指标,可视化都可以按照自己的意愿展开。Qlib是一个设计完整但松耦合的框架,这一点非常好。比如一个常见的回测框架Backtrader,你要扩展自己的东西,非常难。

你可能感兴趣的:(建立自己的算法交易事业,python,机器学习,人工智能)