最近购买了些tick数据准备做回测用。需要批量把数据导入到数据库里,这里我用的默认的sqlite数据库。
文章结尾这些数据也分享给大家,是5月全市场所有期货合约的tick数据
插入数据的代码如下:
import os
import csv
from datetime import datetime, time
from vnpy.trader.constant import Exchange
from vnpy.trader.database import database_manager
from vnpy.trader.object import TickData
def csv_load(file,symbol,exchange):
"""
file: str; 文件路径
symbol: str; 合约代码
exchange: str; 交易所代码(SHFE, DCE, CZCE, INE, CFFEX)
"""
with open(file, "r") as f:
reader = csv.DictReader(f)
ticks = []
start = None
count = 0
for item in reader:
# generate datetime
date = item["datetime"]
standard_time = date
dt = datetime.strptime(standard_time, "%Y%m%d %H:%M:%S.%f")
# filter
if dt.time() > time(15, 1) and dt.time() < time(20, 59):
continue
exchange_map = {"SHFE":Exchange.SHFE, "DCE":Exchange.DCE, "CZCE":Exchange.CZCE, "CFFEX":Exchange.CZCE, "INE":Exchange.INE}
tick = TickData(
symbol = symbol,
datetime = dt,
exchange = exchange_map[exchange],
last_price=float(item["last_price"]),
volume=float(item["volume"]),
bid_price_1=float(item["bid_price1"]),
bid_volume_1=float(item["bid_volume1"]),
ask_price_1=float(item["ask_price1"]),
ask_volume_1=float(item["ask_volume1"]),
gateway_name="DB",
)
ticks.append(tick)
count += 1
if not start:
start = tick.datetime
end = tick.datetime
database_manager.save_tick_data(ticks)
print("【已插入】 数据起点: ", start, "。数据终点: ", end, "总tick数:", count)
def insert_all_csvs(symbol, exchange):
"""
找到当前文件夹内所有的csv文件,逐个插入数据库
"""
count = 1
for file in os.listdir("."):
if not file.endswith(".csv"):
continue
print(str(count), + " 文件名:", file)
csv_load(file,symbol, exchange)
count += 1
print("数据入库结束")
if __name__ == "__main__":
symbol = "rb88" ## 螺纹主力合约
exchange = 'SHFE'
insert_all_csvs(symbol, exchange)
print("全部数据插入结束")
使用方法:
- 所有要插入的csv文件放在一个文件夹里(注意是同一个期货合约/主力合约)
- 将这个py文件放在同一个文件夹里
- 命令行里运行这个文件,就可以将所有csv文件插入数据库啦
数据在哪里?
可以在回测里使用。但是有时候我更喜欢从notebook里直接去找这些数据,做些分析和测试。那么这个sqlite的database在这个文件夹里,是个隐藏文件夹。这里可以通过sqlalchemy这些包create_engine了之后直接读取这个database文件。
题外话:可以看到一些其他数据也都在这里。有时候需要修改程序设置里的一些值我会直接改cta_strategy_setting,这样就不用打开图形界面去修改了。
数据请自取:
链接:https://pan.baidu.com/s/1JdnZ-y7Sr7MTJU1bkYtSvQ?pwd=8bsw
提取码:8bsw