重修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连续合约数据。 

 

posted on 2025-12-25 14:38  金凯旋  阅读(19)  评论(0)    收藏  举报

导航