除了通过行情记录模块记录实时Tick数据外,vnpy还提供了ctaHistoryData.py的脚本函数从通联数据API接口下载各类历史数据插入MongoDB中以便用户回测;用户也可以从MultiCharts,通信达等软件导出的历史数据插入Mongodb中用于回测;ctaHistoryData还提供了从tushare下载沪深股票日行情的代码demo,供用户参考。
- 使用通联数据API下载历史数据
在使用ctaHistoryData.py下载历史数据前,需要获取相应数据授权Token。获取Token后,打开vn.Trader/ctaAlgo文件下的datayes.json文件,然后在token中输入相应的token即可。
{
"domain":"http://api/wmcloud.com/data",
"version":"v1",
"token":"575593eb7696aec7339224c0fac2313780d8645f68b77369dcb35f8bcb419a0b"
}
下载股票/期货代码
- 首次使用要先下载股票/期货代码插入Mongodb,便于后续行情下载是读取相应代码
- downloadFuturesSymbol
- 下载期货代码插入Mongodb
- | 参数 | 类型 | 说明 | | :---: | :---: | :---: | | tradeDate | string | 交易日,如”20170207“ |
- 首次使用要先下载股票/期货代码插入Mongodb,便于后续行情下载是读取相应代码
注:不输入则默认最近一个交易日
- downloadEquitySymbol
- 下载股票代码插入Mongodb
- | 参数 | 类型 | 说明 | | :---: | :---: | :---: | | tradeDate | string | 交易日,如”20170207“ |
下载期货合约行情
下载期货合约日行情
- downloadFuturesDailyBar
- 该函数用于下载指定期货合约的日行情并插入Mongodb
| 参数 | 类型 | 说明 | | :---: | :---: | :---: | | symbol | string | 合约代码,如‘IF1705’ |
日内分钟行情只有具体合约
下载股票行情
- 下载某只股票日行情
- downloadEquityDailyBar
- 该函数用于下载某只股票至最近一个交易日的历史数据 参数|类型|说明|symbol|string|股票代码
- downloadEquityDailyBar
- 下载某只股票日行情
下载所有股票日行情
downloadAllEquityDailyBar
- 调用该函数会下载所有A股上市公司至最近一个交易日的历史数据并插入Mongdb;
- 采用单线程下载,代码如下
start=time() print u'开始下载所有股票日行情‘ productSymbolSet=self.readEquityProductSymbol() print u'代码列表读取成功,股票代买:%s' %productSymbolSet p=ThreadPool(10) p.map(self.downloadEquityDailyBar,productSymbolSet) p.close() p.join() print u'所有股票日行情已经全部下载完成,耗时%s秒‘ %(time()-start)
下载步骤
- 创建API下载引擎实例
e=HistoryDataEngine()
2.根据索要下载品种选择相应函数,如下载所有A股上市公司日行情
e.downloadAllEquityDailyBar()
- 使用Multicharts/通达信导出的csv格式历史数据插入Mongodb
MultiCharts导出的1分K线csv数据格式如下:
"Date","Time","Open","High","Low","Close","TotalVolume"
2010/4/16,09:16:00,3450.0,3488.0,3450.0,3468.0,489
2010/4/16,09:17:00,3468.0,3473.8,3467.0,3467.0,302
2010/4/16,09:18:00,3467.0,3471.0,3466.0,3467.0,203
2010/4/16,09:19:00,3467.0,3468.2,3448.0,3448.0,280
2010/4/16,09:20:00,3448.0,3459.0,3448.0,3454.0,250
通达信导出的1分K线csv数据格式如下:
2013/08/19,0901,2326,2329,2325,2325,5932,395622,0
2013/08/19,0902,2326,2327,2325,2325,1066,395236,0
2013/08/19,0903,2326,2326,2325,2326,478,395168,0
2013/08/19,0904,2326,2326,2325,2325,208,395230,0
2013/08/19,0905,2325,2326,2324,2325,692,395672,0
2013/08/19,0906,2324,2325,2324,2324,370,395764,0
1.使用Multicharts导入历史数据
import csv
start=time()
print u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName,dbName,symbol)
#锁定集合,并创建索引
host,port,logging=loadMongoSetting()
client=pymongo.MongoClient(host,port)
collection=client[dbName][symbol]
collection.ensure_index([('datetime',pymongo.ASCENDING)],unique=True)
#读取数据和插入到数据库
reader=csv.DictReader(file(fileName,'r'))
for d in reader:
bar=CtaBarData()
bar.vtSymbol=symbol
bar.symbol=symbol
bar.open=float(d['Open'])
bar.high=float(d['High'])
bar.low=float(d['low'])
bar.close=float(d['low'])
bar.date=datetime.strptime(d['date'],'%Y/%m/%d').strftime('%Y%m%d')
bar.time=d['Time']
bar.datetime=datetime.strptime(bar.date+''+bar.time,'%Y%m%d %H:%M:%S')
bar.volume=d['TotalVolume']
flt={'datetime':bar.datetime}
collection.update_one(flt,{'$set':bar/__dict__},upsert=True)
print bar.date,bar.time
print u'插入完毕,耗时:%s' %(time()-start)
LoadMcCsv
参数 | 类型 | 说明 |
---|---|---|
fileName | string | Multicharts导出数据的文件名,如 ’IF0000_1min.csv‘ |
dbName | string | MongoDB数据类型,如’MINUTE_DB_NAME‘ |
symbol | string | 合约代码,如'IF0000' |
导入命令
loadMcCsv('IF0000_1min.csv',MINUTE_DB_NAME,'IF0000')
使用通信达导入历史分钟数据
- 代码如下
import csv start=time() print u'开始读取CSV文件%s中的数据插入到%s的%s中', %(fileName,dbName,symbol) #锁定集合,并创建索引 host,port,logging=loadMongoSetting() client=pymongo.MongoClient(host,port) collection=client[dbName][symbol] collection.ensure_index([('datetime',pymongo.ASCENDING)],unique=True) #读取数据和插入到数据库 reader=csv.reader(file(fileName,'r')) for d in reader: bar=CtaBarData() bar.vtSymbol=symbol bar.symbol=symbol bar.open=float(d[2]) bar.high=float(d[3]) bar.low=float(d[4]) bar.close=float(d[5]) bar.date=datetime.strptime(d[0],'%Y/%m/%d').strftime('%Y%m%d') bar.time=d[1][:2]+':'+d[1][2:4]+':00' bar.datetime=datetime.strptime(bar.date+''+bar.time,'%Y%m%d %H:%M:%S') bar.volume=d[6] bar.openInterest=d[7] flt={'datetime':bar.datetime} collection.update_one(flt,{'$set':bar.__dict__},upsert=True) print bar.date,bar.time print u'插入完毕,耗时:%s'%(time()-start)
loadTdxCsv
参数 | 类型 | 说明 |
---|---|---|
fileName | string | 通达信导出数据的文件名,如‘CL8.csv') |
dbName | string | MongoDB数据类型,如’MINUTE_DB_NAME' |
symbol | string | 合约代码,如'c0000' |
导入命令
loadTdxCsv('CL8.csv',MINUTE_DB_NAME,'c0000')
Tushare下载沪深股票日行情
使用tushare下载沪深股票数据插入Mongodb:
- 代码:
```
def downloadEquityDailyBarts(self,symbol):""" 下载股票的日行情,symbol是股票代买 """ import tushare as ts print u'开始下载%s日行情',%symbol
#查询数据库中已有数据的最后日期 cl=self.dbClient[Daily_DB_NAME][symbol] cx.cl.find(sort=[('datetime',pymongo.DESCENDING)]) if cx.count(): last=cx[0] else: last='' #开始下载数据 if last: start=last['date'][:4]+'-'+last['date'][4:6]+'-'+last['date'][6:] data=ts.get_k_data(symbol,start) if not data.empty: #创建datatime索引 self.dbClient[DAILY_DB_NAME][symbol].ensure_index(['datetime',pymongo.ASCENDING)],unique=True)
for index,d in data.iterrows(): bar=CtaBarData() bar.vtSymbol=symbol bar.symbol=symbol try: bar.open=d.get('open') bar.high=d.get('high') bar.low=d.get('low') bar.close=d.get('close') bar.date=d.get('date').replace('_','') bar.time='' bar.datetime=datetime.strptime(bar.date,%Y%m%d') bar.volume=d.get('volume') except KeyError: print d flt={'datetime':bar.datetime} self.dfClient[DAILY_DB_NAME][symbol].update_one(flt,{'$set':bar.__dict__},upsert=True) print u'%s下载完成’%ssymbol else: print u'找不到合约%s‘ %symbol
```
downloadEquityDailyBars
参数 | 类型 | 说明 |
---|---|---|
symbol | string | 合约代码,如’000001‘ |
下载步骤:
- 创建API下载引擎实例
e=HistoryDataEngine()
2.选择所要下载品种选择相应函数,如下载'000001'日行情
e.downloadEquityDailyBars('00001')