1.利用通达信软件“盘后数据下载” 下载需要品种1分钟历史数据
description
2. 导出数据,选择“高级导出”功能
description
3. 选择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)
寻求志同道合的朋友一下研究量化策略,微信: mt4ea522219193