开头写这个之前,先报个小白身份,我是前两天才有空开始研究vnpy,知道vn框架已经好久了,但学业各种忙,难得抽空下来深入了解,若有不对之处,请各位指正。
参考了KeKe的《载入Tick数据(csv格式)到数据库中》的逻辑,我在此基础上修改,主要是直接在掘金量化数据库在线调取tick数据载入mongodb数据库中,所以可先参考KeKe
的载入Tick数据(csv格式)到数据库中
- 直接在掘金量化平台下载最新的客户端,并安装好登陆上去,获取token(在个人中心页面的第一行,不知道这个论坛编辑是怎么回事,我用谷歌和火狐都没办法拖照片上来,懂得可以说说),后面会用到
- 打开shell运行python.exe -m pip install gm -U
- 导入掘金的api,输入token
from gm.api import * set_token('输入你的token')
- 这里不需要导入csv文件,模块就不需要用到csv
from datetime import time from vnpy.trader.constant import Exchange,Interval from vnpy.trader.database import database_manager from vnpy.trader.object import TickData
- 这里拿螺纹主力的tick数据,做个栗子,掘金的tick数据只有三个月的,具体的可以参考掘金官网的api文档
history_data = history(symbol='SHFE.RB', frequency='tick', start_time='2019-08-28', end_time='2019-12-30', df=True) history_data.shape (66000, 13)
- 主要选取的字段是created_at、price、quotes[0]['bid_p']、quotes[0]['bid_v']、quotes[0]['ask_p']、quotes[0]['ask_v']
插入数据 2019-09-27 09:00:00.500000 - 2019-12-05 21:51:37 总数量: 65998def csv_load(file): ticks = [] start = None count = 0 for item in file.index: item = file.loc[item] dt = item.created_at.to_pydatetime().replace(tzinfo=None) if dt.time() > time(15, 1) and dt.time() < time(20, 59): continue tick = TickData( symbol="RB88", datetime=dt, exchange=Exchange.SHFE, last_price=float(item.price), volume=float(item.cum_position), bid_price_1=float(item.quotes[0]['bid_p']), bid_volume_1=float(item.quotes[0]['bid_v']), ask_price_1=float(item.quotes[0]['ask_p']), ask_volume_1=float(item.quotes[0]['ask_v']), gateway_name="DB", ) ticks.append(tick) # do some statistics count += 1 if not start: start = tick.datetime end = tick.datetime database_manager.save_tick_data(ticks) print("插入数据", start, "-", end, "总数量:", count) if __name__ == "__main__": csv_load(history_data)