WtDHFactory
WtDHFactory是什么
无论是策略研究还是实盘交易,都离不开数据。使用WonderTrader做量化的第一阶段,需要先把历史数据准备好。
但是我们在处理历史数据的时候,一开始要面临的问题就是数据源的选择。市面上的数据源有免费的,也有收费的。当然收费的数据源质量相对要高一些,但是对于初学者来说,免费的数据源也是足够的。
WonderTrader为了方便用户使用,在wtpy中提供了一个数据辅助模块WtDHFactory,可以帮助用户从不同的数据源中获取数据,然后统一导出到文件或者数据库中,方便后续使用。
目前WtDHFactory支持的数据源有:
tusharebaostockrqdata
提供的如下接口:
class BaseDataHelper:
def dmpCodeListToFile(self, filename:str, hasIndex:bool=True, hasStock:bool=True):
'''
将代码列表导出到文件
@filename 要输出的文件名,json格式
@hasIndex 是否包含指数
@hasStock 是否包含股票
'''
pass
def dmpAdjFactorsToFile(self, codes:list, filename:str):
'''
将除权因子导出到文件
@codes 股票列表,格式如["SSE.600000","SZSE.000001"]
@filename 要输出的文件名,json格式
'''
pass
def dmpBarsToFile(self, folder:str, codes:list, start_date:datetime=None, end_date:datetime=None, period:str="day"):
'''
将K线导出到指定的目录下的csv文件,文件名格式如SSE.600000_d.csv
@folder 要输出的文件夹
@codes 股票列表,格式如["SSE.600000","SZSE.000001"]
@start_date 开始日期,datetime类型,传None则自动设置为1990-01-01
@end_date 结束日期,datetime类型,传None则自动设置为当前日期
@period K线周期,支持day、min1、min5
'''
pass
def dmpBars(self, codes:list, cb, start_date:datetime=None, end_date:datetime=None, period:str="day"):
'''
将K线导出到指定的目录下的csv文件,文件名格式如SSE.600000_d.csv
@cb 回调函数,格式如cb(exchg:str, code:str, firstBar:POINTER(WTSBarStruct), count:int, period:str)
@codes 股票列表,格式如["SSE.600000","SZSE.000001"]
@start_date 开始日期,datetime类型,传None则自动设置为1990-01-01
@end_date 结束日期,datetime类型,传None则自动设置为当前日期
@period K线周期,支持day、min1、min5
'''
pass
WtDHFactory怎么用
其实在基本用法/历史数据处理中,已经介绍了如何使用WtDHFactory来准备历史数据了。
WtDHFactory采用工厂模式,使用的时候只需要传入对应的数据源名称,就可以获取到对应的数据源对象,然后调用对应的接口即可。具体用法可以参考以下代码:
from wtpy.apps.datahelper import DHFactory as DHF
hlper = DHF.createHelper("baostock")
hlper.auth()
# tushare
# hlper = DHF.createHelper("tushare")
# hlper.auth(**{"token":"xxxxxxxxxxx", "use_pro":True})
# rqdata
# hlper = DHF.createHelper("rqdata")
# hlper.auth(**{"username":"00000000", "password":"0000000"})
# 落地股票列表
# hlper.dmpCodeListToFile("stocks.json")
# 下载K线数据
# hlper.dmpBarsToFile(folder='./', codes=["CFFEX.IF.HOT","CFFEX.IC.HOT"], period='min1')
# hlper.dmpBarsToFile(folder='./', codes=["CFFEX.IF.HOT","CFFEX.IC.HOT"], period='min5')
hlper.dmpBarsToFile(folder='./', codes=["SZSE.399005","SZSE.399006","SZSE.399303"], period='day')
# 下载复权因子
# hlper.dmpAdjFactorsToFile(codes=["SSE.600000",'SZSE.000001'], filename="./adjfactors.json")
# 将数据直接落地成dsb
def on_bars_block(exchg:str, stdCode:str, firstBar:POINTER(WTSBarStruct), count:int, period:str):
from wtpy.wrapper import WtDataHelper
dtHelper = WtDataHelper()
if stdCode[-4:] == '.HOT':
stdCode = stdCode[:-4] + "_HOT"
else:
ay = stdCode.split(".")
if exchg == 'CZCE':
stdCode = ay[1] + ay[2][1:]
else:
stdCode = ay[1] + ay[2]
filename = f"../storage/his/{period}/{exchg}/"
if not os.path.exists(filename):
os.makedirs(filename)
filename += f"{stdCode}.dsb"
if period == "day":
period = "d"
elif period == "min1":
period = "m1"
else:
period = "m5"
dtHelper.store_bars(filename, firstBar, count, period)
pass
hlper.dmpBars(codes=["CFFEX.IF.2103"], cb=on_bars_block, start_date=20201201, end_date=20210316, period="min5")
更多详细用法,可以参考demo: wtpy/demos/test_datafactory