重修vn.py笔记 之 二 : 数据
做数据分析,首先是要有数据,这里是用tqsdk的数据。 代码用源码里的范例,修改了数据源。
# 忽略各模块的警告信息
import warnings
warnings.filterwarnings("ignore")
from datetime import datetime
from vnpy.trader.datafeed import get_datafeed
from vnpy.trader.database import get_database, DB_TZ
from vnpy.trader.constant import Interval
from vnpy.trader.object import BarData, HistoryRequest
from vnpy.trader.utility import extract_vt_symbol
from vnpy.trader.setting import SETTINGS
# 配置数据服务
SETTINGS["datafeed.name"] = "tqsdk" # 数据服务
SETTINGS["datafeed.username"] = "139xxxxxxx" # 用户源
SETTINGS["datafeed.password"] = "xxxxxxx" # 这里需要替换为自己的数据license
# 配置数据库
SETTINGS["database.name"] = "sqlite" # 这个类型最简单
SETTINGS["database.database"] = "database.db"
# 创建对象实例
datafeed = get_datafeed()
database = get_database()
# 要下载数据的合约代码
vt_symbols = [
"IF2501.CFFEX",
"IF2502.CFFEX",
"IF2503.CFFEX",
"IH2501.CFFEX",
"IH2502.CFFEX",
"IH2503.CFFEX",
"IC2501.CFFEX",
"IC2502.CFFEX",
"IC2503.CFFEX",
"IM2501.CFFEX",
"IM2502.CFFEX",
"IM2503.CFFEX",
]
# 要下载数据的起止时间
start = datetime(2025, 1, 1, tzinfo=DB_TZ)
end = datetime(2025, 3, 30, tzinfo=DB_TZ)
# 遍历列表执行下载
for vt_symbol in vt_symbols:
# 拆分合约代码和交易所
symbol, exchange = extract_vt_symbol(vt_symbol)
# 创建历史数据请求对象
req: HistoryRequest = HistoryRequest(
symbol=symbol,
exchange=exchange,
start=start,
end=end,
interval=Interval.MINUTE # 这里下载最常用的1分钟K线
)
# 从数据服务下载数据
bars: list[BarData] = datafeed.query_bar_history(req)
# 如果下载成功则保存
if bars:
database.save_bar_data(bars)
print(f"下载数据成功:{vt_symbol},总数据量:{len(bars)}")
# 否则失败则打印信息
else:
print(f"下载数据失败:{vt_symbol}")
这里遇到问题:如果采用连续数据,该怎么办?
通常用888代替连续合约,可是,天勤的api对连续合约描述很特殊,需要根据文档手写转换。
database 这个类在存储bar后,可以调用load_bar_data函数,看看修改后,是否能正常取出888连续合约数据。
浙公网安备 33010602011771号