最近在用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