最近在用wind下载一些历史的tick数据,看vnpy_wind里面没有tick数据下载的功能,就自己照着写了一个。希望后续可以整合到模块里面,方便调用。

def query_tick_history(self, req: HistoryRequest, output: Callable = print) -> list[TickData] | None:
    """查询Tick数据"""
    history: list[TickData] = []
    wind_exchange: str = EXCHANGE_MAP[req.exchange]
    wind_symbol: str = f"{req.symbol}.{wind_exchange}"

    fields: list[str] = [
        "pre_close,open,high,low,last,ask,bid,volume,amt,pre_settle,settle,pre_oi,oi,limit_up,limit_down,\
        ask5,ask4,ask3,ask2,ask1,bid1,bid2,bid3,bid4,bid5,asize5,asize4,asize3,asize2,asize1,bsize1,bsize2,bsize3,bsize4,bsize5"
    ]

    error, df = w.wst(wind_symbol, fields , req.start, req.end,usedf=True)
    df.fillna(0, inplace=True)

    # 遍历解析
    for tp in df.itertuples():
        tick_datetime = getattr(tp, 'Index', None)
        tick_datetime = tick_datetime.to_pydatetime()
        tick_datetime = tick_datetime.replace(tzinfo=CHINA_TZ)

        tick: TickData = TickData(
            symbol=req.symbol,
            exchange=req.exchange,
            datetime=tick_datetime,
            volume=float(tp.volume),
            turnover=float(tp.amount),
            open_interest=float(tp.position),
            open_price=float(tp.open),
            high_price=float(tp.high),
            low_price=float(tp.low),
            last_price=float(tp.last),
            pre_close=float(tp.preclose),
            bid_price_1=float(tp.bid1),
            ask_price_1=float(tp.ask1),
            bid_volume_1=float(tp.bsize1),
            ask_volume_1=float(tp.asize1),
            gateway_name="WIND",
        )

        tick.bid_price_2 = float(tp.bid2)
        tick.bid_price_3 = float(tp.bid3)
        tick.bid_price_4 = float(tp.bid4)
        tick.bid_price_5 = float(tp.bid5)

        tick.ask_price_2 = float(tp.ask2)
        tick.ask_price_3 = float(tp.ask3)
        tick.ask_price_4 = float(tp.ask4)
        tick.ask_price_5 = float(tp.ask5)

        tick.bid_volume_2 = float(tp.bsize2)
        tick.bid_volume_3 = float(tp.bsize3)
        tick.bid_volume_4 = float(tp.bsize4)
        tick.bid_volume_5 = float(tp.bsize5)

        tick.ask_volume_2 = float(tp.asize2)
        tick.ask_volume_3 = float(tp.asize3)
        tick.ask_volume_4 = float(tp.asize4)
        tick.ask_volume_5 = float(tp.asize5)

        history.append(tick)

    return history