1.利用通达信软件“盘后数据下载” 下载需要品种1分钟历史数据
description
- 导出数据,选择“高级导出”功能
description - 选择1分钟数据导出,添加品种名称,点击导出数据
description
4.导出成功后自动弹出历史数据文件夹
description
5.删除文件中的无用抬头和弗结尾文字,修改标题行,用","号隔开, 样板数据如下图
description
6.执行入库的python代码
import csv
from datetime import datetime, timedelta
from pytz import timezone
from vnpy.trader.constant import Exchange, Interval
from vnpy.trader.database import BaseDatabase, get_database
from vnpy.trader.object import BarData
封装函数
def load_tdx_csv_to_mongodb(file_path: str, exchange: str, symbol:str, interval:str):
with open(file_path, "rt") as f:
buf = [line.replace("\0", "") for line in f]
reader = csv.DictReader(buf, delimiter=",")
bars = []
start = None
count = 0
tz = timezone("Asia/Shanghai")
for item in reader:
tt1=item["时间"]
ln=len(tt1)
tt2=tt1[0:2]
tt3=tt1[2:4]
tt1=tt2+":"+tt3
dt = datetime.strptime(item["日期"] +' '+ tt1, '%Y-%m-%d %H:%M')
# minute - 1;
dt = dt + timedelta(minutes=-1)
# time > 15:00, day - 1
if dt.hour > 15:
dt = dt + timedelta(days=-1)
dt = tz.localize(dt)
bar = BarData(
symbol=symbol,
exchange=exchange,
interval=interval,
datetime=dt,
open_price=float(item["开盘"]),
high_price=float(item["最高"]),
low_price=float(item["最低"]),
close_price=float(item["收盘"]),
volume=float(item["成交量"]),
turnover=float(item["持仓量"]),
open_interest=float(item["结算价"]),
gateway_name="sqlite",
)
bars.append(bar)
# do some statistics
count += 1
if not start:
start = bar.datetime
end = bar.datetime
print(f'{datetime.now()} Insert Bar start: {count} from {start} - {end}')
# insert into database
database: BaseDatabase = get_database()
database.save_bar_data(bars)
print(f'{datetime.now()} Insert Bar complete: {count} from {start} - {end}')
if name == "main":
# tdx csv表头:date,time,open,high,low,close,volume,open_interest,turnover
load_tdx_csv_to_mongodb("c:\\zd_kyzq\\T0002\\export\\30#RB2310.txt", Exchange.SHFE, 'rb2310', Interval.MINUTE)