上海中期数据解决方案 - vnpy/vnpy GitHub Wiki
作者:金属成色
目录
环境准备
如果没有安装vn.py最新发行版(这里默认为vnpy-1.7.1)、MongoDB、Anaconda、PyCharm软件,请参照右边‘环境安装’教程。
对于上海中期数据解决方案的用户,首先需要通过电脑端或手机端在上海中期期货公司开户,电脑开户端网址:上海中期开户链接; 手机端开户是在手机APP商城中下载期货开户云。按照操作提示上传身份信息、银行卡信息、录制开户确认视频、完成期货公司问卷等步骤。在大约一个工作日后,会收到开户成功短信,然后在开户端网站找到客服电话向期货公司索要token码。
配置文件
在“vnpy-1.7.1\examples\ShcifcoDataService”目录下找到配置文件“config.json”,打开如下图所示(建议用Sublime Text、Notepad++编辑)。在图中红线处填入期货公司客服处获得的token码,在黄线处填入需要下载聚合的合约码列表。如果数据库安装在云端或其他端口,还需修改MONGO_HOST、MONGO_PORT。
手动下载数据
配置文件填好后用python IDE打开同目录下的“downloadData.py”文件 ,如下图所示(建议用PyCharm编辑)。在黄线处填入需要下载的分钟K线个数,一般第一次下载历史行情数据尽可能追溯更多的分钟K线数据,便于历史回测。但上海中期暂时只支持追溯到2017年7月21日,所以30000条分钟K线就足够了,执行文件即开始下载。
自动定时下载
待历史行情数据下载完毕,用python IDE打开同目录下的“runService.py”文件,直接执行后即定时在每个交易日17点的某一分钟(随机的任务下载时间)自动下载更新历史行情数据,1000条分钟数据足以覆盖一天的行情,更新数据截图如下所示。上文已提到历史数据仅可回溯到2017年7月21日,所以图中cu1707、m1707合约已交割无行情数据,可不加理会其数据下载失败。
使用中的注意点
很多用户在下载和更新数据时,需要直接获取在市的所有合约,如果一个一个把合约代码敲进去,相当的繁琐,而且当合约交割的日子到来时,新上市的合约又需要再次补充到配置文件的合约列表里。 这里推荐一个tushare库更新合约列表的方法。 首先在Windows命令处理程序中分别输入
pip install tushare
在python中安装tushare库(默认您已经安装了python pip安装模块)
jupyter notebook
进入notebook调试
在notebook中输入执行:
import tushare as tu
symbolL=[]
date='2017-11-01'
symbolL.extend(tu.get_cffex_daily(date)['symbol'].tolist())
symbolL.extend(tu.get_shfe_daily(date)['symbol'].tolist())
symbolL.extend(tu.get_dce_daily(date)['symbol'].tolist())
symbolL.extend(tu.get_czce_daily(date)['symbol'].tolist())
那么您就获得了2017年11月1日国内四个期货交易所所有的在市合约列表,但是现在的上期所、大商所合约代码字母都是大写的,格式与CTP合约格式不同,那么需要转换一下合约代码格式,将以上代码更改后执行:
import tushare as tu
date='2017-11-01'
symbolL=[]
#中金所和郑商所
L=tu.get_cffex_daily(date)['symbol'].tolist()
L.extend(tu.get_czce_daily(date)['symbol'].tolist())
symbolL.extend(L)
#上期所和大商所
L=tu.get_shfe_daily(date)['symbol'].tolist()
L.extend(tu.get_dce_daily(date)['symbol'].tolist())
symbolL.extend([x.lower() for x in L])
最后把获得的合约代码导入config文件,在notebook里继续执行(需要修改config文件目录位置与您安装的一致):
import json
with open('E:\\vnpy-1.7.1\\examples\\ShcifcoDataService\\config.json','r') as f:
data = json.load(f)
data['SYMBOLS']=symbolL
with open('E:\\vnpy-1.7.1\\examples\\ShcifcoDataService\\config.json',"w") as f:
json.dump(data,f)