def onRtnDepthMarketData(self, data: dict): """ Callback of tick data update. """ # Filter data update with no timestamp if not data["UpdateTime"]: return symbol = data["InstrumentID"] exchange = symbol_exchange_map.get(symbol, "") if not exchange: return timestamp = f"{self.current_date} {data['UpdateTime']}.{int(data['UpdateMillisec']/100)}" dt = datetime.strptime(timestamp, "%Y%m%d %H:%M:%S.%f") dt = CHINA_TZ.localize(dt) tick = TickData( symbol=symbol, exchange=exchange, datetime=dt, name=symbol_name_map[symbol], volume=data["Volume"], open_interest=data["OpenInterest"], last_price=adjust_price(data["LastPrice"]), limit_up=data["UpperLimitPrice"], limit_down=data["LowerLimitPrice"], open_price=adjust_price(data["OpenPrice"]), high_price=adjust_price(data["HighestPrice"]), low_price=adjust_price(data["LowestPrice"]), pre_close=adjust_price(data["PreClosePrice"]), bid_price_1=adjust_price(data["BidPrice1"]), ask_price_1=adjust_price(data["AskPrice1"]), bid_volume_1=data["BidVolume1"], ask_volume_1=data["AskVolume1"], gateway_name=self.gateway_name ) if data["BidVolume2"] or data["AskVolume2"]: tick.bid_price_2 = adjust_price(data["BidPrice2"]) tick.bid_price_3 = adjust_price(data["BidPrice3"]) tick.bid_price_4 = adjust_price(data["BidPrice4"]) tick.bid_price_5 = adjust_price(data["BidPrice5"]) tick.ask_price_2 = adjust_price(data["AskPrice2"]) tick.ask_price_3 = adjust_price(data["AskPrice3"]) tick.ask_price_4 = adjust_price(data["AskPrice4"]) tick.ask_price_5 = adjust_price(data["AskPrice5"]) tick.bid_volume_2 = data["BidVolume2"] tick.bid_volume_3 = data["BidVolume3"] tick.bid_volume_4 = data["BidVolume4"] tick.bid_volume_5 = data["BidVolume5"] tick.ask_volume_2 = data["AskVolume2"] tick.ask_volume_3 = data["AskVolume3"] tick.ask_volume_4 = data["AskVolume4"] tick.ask_volume_5 = data["AskVolume5"] self.gateway.on_tick(tick)
def onRtnDepthMarketData(self, data: dict): """ Callback of tick data update. """ # 这个传过来的数据data是什么样子的 symbol = data["InstrumentID"] exchange = symbol_exchange_map.get(symbol, "") if not exchange: return timestamp = f"{data['ActionDay']} {data['UpdateTime']}.{int(data['UpdateMillisec']/100)}" tick = TickData(symbol=symbol, exchange=exchange, datetime=datetime.strptime(timestamp, "%Y%m%d %H:%M:%S.%f"), name=symbol_name_map[symbol], volume=data["Volume"], open_interest=data["OpenInterest"], last_price=data["LastPrice"], limit_up=data["UpperLimitPrice"], limit_down=data["LowerLimitPrice"], open_price=adjust_price(data["OpenPrice"]), high_price=adjust_price(data["HighestPrice"]), low_price=adjust_price(data["LowestPrice"]), pre_close=adjust_price(data["PreClosePrice"]), bid_price_1=adjust_price(data["BidPrice1"]), ask_price_1=adjust_price(data["AskPrice1"]), bid_volume_1=data["BidVolume1"], ask_volume_1=data["AskVolume1"], gateway_name=self.gateway_name) if data["BidVolume2"] or data["AskVolume2"]: tick.bid_price_2 = adjust_price(data["BidPrice2"]) tick.bid_price_3 = adjust_price(data["BidPrice3"]) tick.bid_price_4 = adjust_price(data["BidPrice4"]) tick.bid_price_5 = adjust_price(data["BidPrice5"]) tick.ask_price_2 = adjust_price(data["AskPrice2"]) tick.ask_price_3 = adjust_price(data["AskPrice3"]) tick.ask_price_4 = adjust_price(data["AskPrice4"]) tick.ask_price_5 = adjust_price(data["AskPrice5"]) tick.bid_volume_2 = adjust_price(data["BidVolume2"]) tick.bid_volume_3 = adjust_price(data["BidVolume3"]) tick.bid_volume_4 = adjust_price(data["BidVolume4"]) tick.bid_volume_5 = adjust_price(data["BidVolume5"]) tick.ask_volume_2 = adjust_price(data["AskVolume2"]) tick.ask_volume_3 = adjust_price(data["AskVolume3"]) tick.ask_volume_4 = adjust_price(data["AskVolume4"]) tick.ask_volume_5 = adjust_price(data["AskVolume5"]) # 这个on_tick函数是BaseGateway基类里面定义的 self.gateway.on_tick(tick)
def OnRtnDepthMarketData(self, data: dict) -> None: """ Callback of tick data update. """ current_date = data["TradingDay"] current_time = data["UpdateTime"] dt = datetime.strptime( f'{current_date}-{current_time}', "%Y%m%d-%H:%M:%S" ) dt = CHINA_TZ.localize(dt) tick = TickData( symbol=data["SecurityID"], exchange=EXCHANGE_TORA2VT[bytes.decode(data["ExchangeID"])], datetime=dt, name=data["SecurityName"], volume=0, open_interest=data["OpenInterest"], last_price=data["LastPrice"], last_volume=data["Volume"], limit_up=data["UpperLimitPrice"], limit_down=data["LowerLimitPrice"], open_price=data["OpenPrice"], high_price=data["HighestPrice"], low_price=data["LowestPrice"], pre_close=data["PreClosePrice"], bid_price_1=data["BidPrice1"], ask_price_1=data["AskPrice1"], bid_volume_1=data["BidVolume1"], ask_volume_1=data["AskVolume1"], gateway_name=self.gateway_name ) if data["BidVolume2"] or data["AskVolume2"]: tick.bid_price_2 = data["BidPrice2"] tick.bid_price_3 = data["BidPrice3"] tick.bid_price_4 = data["BidPrice4"] tick.bid_price_5 = data["BidPrice5"] tick.ask_price_2 = data["AskPrice2"] tick.ask_price_3 = data["AskPrice3"] tick.ask_price_4 = data["AskPrice4"] tick.ask_price_5 = data["AskPrice5"] tick.bid_volume_2 = data["BidVolume2"] tick.bid_volume_3 = data["BidVolume3"] tick.bid_volume_4 = data["BidVolume4"] tick.bid_volume_5 = data["BidVolume5"] tick.ask_volume_2 = data["AskVolume2"] tick.ask_volume_3 = data["AskVolume3"] tick.ask_volume_4 = data["AskVolume4"] tick.ask_volume_5 = data["AskVolume5"] self.gateway.on_tick(tick)
def onRtnDepthMarketData(self, data: dict) -> None: """ Callback of tick data update. """ symbol = data["InstID"] exchange = symbol_exchange_map.get(symbol, "") if not exchange: return timestamp = f"{data['QuoteDate']} {data['QuoteTime']}.{int(data['UpdateMillisec']/100)}" dt = datetime.strptime(timestamp, "%Y%m%d %H:%M:%S.%f") dt = CHINA_TZ.localize(dt) tick = TickData(symbol=symbol, exchange=exchange, datetime=dt, name=symbol_name_map[symbol], volume=data["Volume"], open_interest=data["OpenInt"], last_price=data["Last"], limit_up=data["highLimit"], limit_down=data["lowLimit"], open_price=adjust_price(data["Open"]), high_price=adjust_price(data["Highest"]), low_price=adjust_price(data["Low"]), pre_close=adjust_price(data["PreClose"]), bid_price_1=adjust_price(data["Bid1"]), ask_price_1=adjust_price(data["Ask1"]), bid_volume_1=data["BidLot1"], ask_volume_1=data["AskLot1"], gateway_name=self.gateway_name) if data["BidLot2"] or data["AskLot2"]: tick.bid_price_2 = adjust_price(data["Bid2"]) tick.bid_price_3 = adjust_price(data["Bid3"]) tick.bid_price_4 = adjust_price(data["Bid4"]) tick.bid_price_5 = adjust_price(data["Bid5"]) tick.ask_price_2 = adjust_price(data["Ask2"]) tick.ask_price_3 = adjust_price(data["Ask3"]) tick.ask_price_4 = adjust_price(data["Ask4"]) tick.ask_price_5 = adjust_price(data["Ask5"]) tick.bid_volume_2 = adjust_price(data["BidLot2"]) tick.bid_volume_3 = adjust_price(data["BidLot3"]) tick.bid_volume_4 = adjust_price(data["BidLot4"]) tick.bid_volume_5 = adjust_price(data["BidLot5"]) tick.ask_volume_2 = adjust_price(data["AskLot2"]) tick.ask_volume_3 = adjust_price(data["AskLot3"]) tick.ask_volume_4 = adjust_price(data["AskLot4"]) tick.ask_volume_5 = adjust_price(data["AskLot5"]) self.gateway.on_tick(tick)
def onRtnDepthMarketData(self, data: dict) -> None: """ Callback of tick data update. """ symbol = data["InstrumentID"] exchange = EXCHANGE_UFT2VT[data["ExchangeID"]] if not exchange: return timestamp = f"{data['TradingDay']} {data['UpdateTime']}000" dt = datetime.strptime(timestamp, "%Y%m%d %H%M%S%f") dt = dt.replace(tzinfo=CHINA_TZ) tick = TickData(symbol=symbol, exchange=exchange, datetime=dt, name=symbol_name_map[symbol], volume=data["TradeVolume"], open_interest=data["OpenInterest"], last_price=data["LastPrice"], limit_up=data["UpperLimitPrice"], limit_down=data["LowerLimitPrice"], open_price=adjust_price(data["OpenPrice"]), high_price=adjust_price(data["HighestPrice"]), low_price=adjust_price(data["LowestPrice"]), pre_close=adjust_price(data["PreClosePrice"]), bid_price_1=adjust_price(data["BidPrice1"]), ask_price_1=adjust_price(data["AskPrice1"]), bid_volume_1=data["BidVolume1"], ask_volume_1=data["AskVolume1"], gateway_name=self.gateway_name) if data["BidVolume2"] or data["AskVolume2"]: tick.bid_price_2 = adjust_price(data["BidPrice2"]) tick.bid_price_3 = adjust_price(data["BidPrice3"]) tick.bid_price_4 = adjust_price(data["BidPrice4"]) tick.bid_price_5 = adjust_price(data["BidPrice5"]) tick.ask_price_2 = adjust_price(data["AskPrice2"]) tick.ask_price_3 = adjust_price(data["AskPrice3"]) tick.ask_price_4 = adjust_price(data["AskPrice4"]) tick.ask_price_5 = adjust_price(data["AskPrice5"]) tick.bid_volume_2 = adjust_price(data["BidVolume2"]) tick.bid_volume_3 = adjust_price(data["BidVolume3"]) tick.bid_volume_4 = adjust_price(data["BidVolume4"]) tick.bid_volume_5 = adjust_price(data["BidVolume5"]) tick.ask_volume_2 = adjust_price(data["AskVolume2"]) tick.ask_volume_3 = adjust_price(data["AskVolume3"]) tick.ask_volume_4 = adjust_price(data["AskVolume4"]) tick.ask_volume_5 = adjust_price(data["AskVolume5"]) self.gateway.on_tick(tick)
def onRtnDepthMarketData(self, data: dict) -> None: """ Callback of tick data update. """ symbol = data["InstrumentID"] exchange = symbol_exchange_map.get(symbol, "") if not exchange: return timestamp = f"{data['TradingDay']} {data['UpdateTime']}.{int(data['UpdateMillisec']/100)}" tick = TickData( symbol=symbol, exchange=exchange, datetime=datetime.strptime(timestamp, "%Y%m%d %H:%M:%S.%f"), name=symbol_name_map.get(symbol, ""), volume=data["Volume"], open_interest=data["OpenInterest"], last_price=data["LastPrice"], limit_up=data["UpperLimitPrice"], limit_down=data["LowerLimitPrice"], open_price=data["OpenPrice"], high_price=data["HighestPrice"], low_price=data["LowestPrice"], pre_close=data["PreClosePrice"], bid_price_1=data["BidPrice1"], ask_price_1=data["AskPrice1"], bid_volume_1=data["BidVolume1"], ask_volume_1=data["AskVolume1"], gateway_name=self.gateway_name ) tick.bid_price_2 = data["BidPrice2"] tick.bid_price_3 = data["BidPrice3"] tick.bid_price_4 = data["BidPrice4"] tick.bid_price_5 = data["BidPrice5"] tick.ask_price_2 = data["AskPrice2"] tick.ask_price_3 = data["AskPrice3"] tick.ask_price_4 = data["AskPrice4"] tick.ask_price_5 = data["AskPrice5"] tick.bid_volume_2 = data["BidVolume2"] tick.bid_volume_3 = data["BidVolume3"] tick.bid_volume_4 = data["BidVolume4"] tick.bid_volume_5 = data["BidVolume5"] tick.ask_volume_2 = data["AskVolume2"] tick.ask_volume_3 = data["AskVolume3"] tick.ask_volume_4 = data["AskVolume4"] tick.ask_volume_5 = data["AskVolume5"] self.gateway.on_tick(tick)
def onDepthMarketData(self, data: dict) -> None: """""" timestamp = str(data["data_time"]) dt = datetime.strptime(timestamp, "%Y%m%d%H%M%S%f") dt = CHINA_TZ.localize(dt) tick = TickData(symbol=data["ticker"], exchange=EXCHANGE_XTP2VT[data["exchange_id"]], datetime=dt, volume=data["qty"], last_price=data["last_price"], limit_up=data["upper_limit_price"], limit_down=data["lower_limit_price"], open_price=data["open_price"], high_price=data["high_price"], low_price=data["low_price"], pre_close=data["pre_close_price"], gateway_name=self.gateway_name) tick.bid_price_1, tick.bid_price_2, tick.bid_price_3, tick.bid_price_4, tick.bid_price_5 = data[ "bid"][0:5] tick.ask_price_1, tick.ask_price_2, tick.ask_price_3, tick.ask_price_4, tick.ask_price_5 = data[ "ask"][0:5] tick.bid_volume_1, tick.bid_volume_2, tick.bid_volume_3, tick.bid_volume_4, tick.bid_volume_5 = data[ "bid_qty"][0:5] tick.ask_volume_1, tick.ask_volume_2, tick.ask_volume_3, tick.ask_volume_4, tick.ask_volume_5 = data[ "ask_qty"][0:5] pricetick = symbol_pricetick_map.get(tick.vt_symbol, 0) if pricetick: tick.last_price = round_to(data["last_price"], pricetick) tick.limit_up = round_to(data["upper_limit_price"], pricetick) tick.limit_down = round_to(data["lower_limit_price"], pricetick) tick.open_price = round_to(data["open_price"], pricetick) tick.high_price = round_to(data["high_price"], pricetick) tick.low_price = round_to(data["low_price"], pricetick) tick.pre_close = round_to(data["pre_close_price"], pricetick) tick.bid_price_1 = round_to(tick.bid_price_1, pricetick) tick.bid_price_2 = round_to(tick.bid_price_2, pricetick) tick.bid_price_3 = round_to(tick.bid_price_3, pricetick) tick.bid_price_4 = round_to(tick.bid_price_4, pricetick) tick.bid_price_5 = round_to(tick.bid_price_5, pricetick) tick.ask_price_1 = round_to(tick.ask_price_1, pricetick) tick.ask_price_2 = round_to(tick.ask_price_2, pricetick) tick.ask_price_3 = round_to(tick.ask_price_3, pricetick) tick.ask_price_4 = round_to(tick.ask_price_4, pricetick) tick.ask_price_5 = round_to(tick.ask_price_5, pricetick) tick.name = symbol_name_map.get(tick.vt_symbol, tick.symbol) self.gateway.on_tick(tick)
def to_tick(self): """ Generate TickData object from DbTickData. 从数据库获取的Tick数据生成 tickData数据对象。 """ tick = TickData( symbol=self.symbol, exchange=Exchange(self.exchange), # timestamp=self.timestamp, datetime=self.datetime, name=self.name, volume=self.volume, open_interest=self.open_interest, last_price=self.last_price, last_volume=self.last_volume, limit_up=self.limit_up, limit_down=self.limit_down, open_price=self.open_price, high_price=self.high_price, low_price=self.low_price, pre_close=self.pre_close, bid_price_1=self.bid_price_1, ask_price_1=self.ask_price_1, bid_volume_1=self.bid_volume_1, ask_volume_1=self.ask_volume_1, gateway_name="DB", ) if self.bid_price_2: tick.bid_price_2 = self.bid_price_2 tick.bid_price_3 = self.bid_price_3 tick.bid_price_4 = self.bid_price_4 tick.bid_price_5 = self.bid_price_5 tick.ask_price_2 = self.ask_price_2 tick.ask_price_3 = self.ask_price_3 tick.ask_price_4 = self.ask_price_4 tick.ask_price_5 = self.ask_price_5 tick.bid_volume_2 = self.bid_volume_2 tick.bid_volume_3 = self.bid_volume_3 tick.bid_volume_4 = self.bid_volume_4 tick.bid_volume_5 = self.bid_volume_5 tick.ask_volume_2 = self.ask_volume_2 tick.ask_volume_3 = self.ask_volume_3 tick.ask_volume_4 = self.ask_volume_4 tick.ask_volume_5 = self.ask_volume_5 return tick
def onStockMarketData(self, data: dict) -> None: """""" timestamp = str(data["tradingDay"]) + str(data["updateTime"]) dt = datetime.strptime(timestamp, "%Y%m%d%H:%M:%S.%f") dt = CHINA_TZ.localize(dt) tick = TickData(symbol=data["securityID"], exchange=EXCHANGE_SEC2VT[data["exchangeID"]], datetime=dt, volume=data["tradeQty"], last_price=data["latestPrice"], limit_up=data["upperLimitPrice"], limit_down=data["lowerLimitPrice"], open_price=data["openPrice"], high_price=data["highestPrice"], low_price=data["lowestPrice"], pre_close=data["preClosePrice"], gateway_name=self.gateway_name) tick.bid_price_1 = data["bidPrice1"] tick.bid_price_2 = data["bidPrice2"] tick.bid_price_3 = data["bidPrice3"] tick.bid_price_4 = data["bidPrice4"] tick.bid_price_5 = data["bidPrice5"] tick.ask_price_1 = data["askPrice1"] tick.ask_price_2 = data["askPrice2"] tick.ask_price_3 = data["askPrice3"] tick.ask_price_4 = data["askPrice4"] tick.ask_price_5 = data["askPrice5"] tick.bid_volume_1 = data["bidQty1"] tick.bid_volume_2 = data["bidQty2"] tick.bid_volume_3 = data["bidQty3"] tick.bid_volume_4 = data["bidQty4"] tick.bid_volume_5 = data["bidQty5"] tick.ask_volume_1 = data["askQty1"] tick.ask_volume_2 = data["askQty2"] tick.ask_volume_3 = data["askQty3"] tick.ask_volume_4 = data["askQty4"] tick.ask_volume_5 = data["askQty5"] tick.name = symbol_name_map.get(tick.vt_symbol, tick.symbol) self.gateway.on_tick(tick)
def onMarketData(self, mk_type: int, symbol: str, data: dict) -> None: """""" timestamp = f"{self.date}{str(data['nTime'])}" dt = datetime.strptime(timestamp, "%Y%m%d%H%M%S%f") dt = CHINA_TZ.localize(dt) tick = TickData(symbol=symbol, exchange=MK_GTJA2VT[mk_type], datetime=dt, volume=data["iVolume"], last_price=data["uMatch"] / 10000, limit_up=data["uHighLimited"] / 10000, limit_down=data["uLowLimited"] / 10000, open_price=data["uOpen"] / 10000, high_price=data["uHigh"] / 10000, low_price=data["uLow"] / 10000, pre_close=data["uPreClose"] / 10000, gateway_name=self.gateway_name) tick.bid_price_1, tick.bid_price_2, tick.bid_price_3, tick.bid_price_4, tick.bid_price_5 = data[ "bid"][0:5] tick.ask_price_1, tick.ask_price_2, tick.ask_price_3, tick.ask_price_4, tick.ask_price_5 = data[ "ask"][0:5] tick.bid_volume_1, tick.bid_volume_2, tick.bid_volume_3, tick.bid_volume_4, tick.bid_volume_5 = data[ "bid_qty"][0:5] tick.ask_volume_1, tick.ask_volume_2, tick.ask_volume_3, tick.ask_volume_4, tick.ask_volume_5 = data[ "ask_qty"][0:5] pricetick = symbol_pricetick_map.get(tick.vt_symbol, 0) if pricetick: tick.bid_price_1 = round_to(tick.bid_price_1 / 10000, pricetick) tick.bid_price_2 = round_to(tick.bid_price_2 / 10000, pricetick) tick.bid_price_3 = round_to(tick.bid_price_3 / 10000, pricetick) tick.bid_price_4 = round_to(tick.bid_price_4 / 10000, pricetick) tick.bid_price_5 = round_to(tick.bid_price_5 / 10000, pricetick) tick.ask_price_1 = round_to(tick.ask_price_1 / 10000, pricetick) tick.ask_price_2 = round_to(tick.ask_price_2 / 10000, pricetick) tick.ask_price_3 = round_to(tick.ask_price_3 / 10000, pricetick) tick.ask_price_4 = round_to(tick.ask_price_4 / 10000, pricetick) tick.ask_price_5 = round_to(tick.ask_price_5 / 10000, pricetick) tick.name = symbol_name_map.get(tick.vt_symbol, tick.symbol) self.gateway.on_tick(tick)
def onRtnStockData(self, head: dict, data: dict) -> None: """""" #print(data) timestamp = f"{head['tradeDate']} {head['updateTime']}" tick = TickData(symbol=data["SecurityID"], exchange=EXCHANGE_OES2VT[head["exchId"]], datetime=datetime.strptime(timestamp, "%Y%m%d %H%M%S%f"), volume=data["TotalVolumeTraded"], pre_close=data["PrevClosePx"], last_price=data["TradePx"] / 10000, open_price=data["OpenPx"] / 10000, high_price=data["HighPx"] / 10000, low_price=data["LowPx"] / 10000, gateway_name=self.gateway_name) tick.bid_price_1, tick.bid_price_2, tick.bid_price_3, tick.bid_price_4, tick.bid_price_5 = data[ "bid"][0:5] tick.ask_price_1, tick.ask_price_2, tick.ask_price_3, tick.ask_price_4, tick.ask_price_5 = data[ "ask"][0:5] tick.bid_volume_1, tick.bid_volume_2, tick.bid_volume_3, tick.bid_volume_4, tick.bid_volume_5 = data[ "bid_qty"][0:5] tick.ask_volume_1, tick.ask_volume_2, tick.ask_volume_3, tick.ask_volume_4, tick.ask_volume_5 = data[ "ask_qty"][0:5] pricetick = SYMBOL_PRICETICK_MAP.get(tick.vt_symbol, 0) #宽睿priceTick最小报价单位 (单位精确到元后四位, 即1元 = 10000)已在OesTdApi登录获取证券信息时已转换成原始报价单位 #宽睿的价格22.22显示为222200,round_to函数为去除小数后两位,不适用,用round函数替换 ipricetick = get_digits(pricetick) if pricetick: tick.bid_price_1 = round(tick.bid_price_1 / 10000, ipricetick) tick.bid_price_2 = round(tick.bid_price_2 / 10000, ipricetick) tick.bid_price_3 = round(tick.bid_price_3 / 10000, ipricetick) tick.bid_price_4 = round(tick.bid_price_4 / 10000, ipricetick) tick.bid_price_5 = round(tick.bid_price_5 / 10000, ipricetick) tick.ask_price_1 = round(tick.ask_price_1 / 10000, ipricetick) tick.ask_price_2 = round(tick.ask_price_2 / 10000, ipricetick) tick.ask_price_3 = round(tick.ask_price_3 / 10000, ipricetick) tick.ask_price_4 = round(tick.ask_price_4 / 10000, ipricetick) tick.ask_price_5 = round(tick.ask_price_5 / 10000, ipricetick) tick.name = SYMBOL_NAME_MAP.get(tick.vt_symbol, "") self.gateway.on_tick(tick)
def onRtnOptionData(self, head: dict, data: dict) -> None: """""" timestamp = f"{head['tradeDate']} {head['updateTime']}" tick = TickData(symbol=data["SecurityID"], exchange=EXCHANGE_OES2VT[head["exchId"]], datetime=datetime.strptime(timestamp, "%Y%m%d %H%M%S%f"), volume=data["TotalVolumeTraded"], pre_close=data["PrevClosePx"], last_price=data["TradePx"] / 10000, open_price=data["OpenPx"] / 10000, high_price=data["HighPx"] / 10000, low_price=data["LowPx"] / 10000, gateway_name=self.gateway_name) tick.bid_price_1, tick.bid_price_2, tick.bid_price_3, tick.bid_price_4, tick.bid_price_5 = data[ "bid"][0:5] tick.ask_price_1, tick.ask_price_2, tick.ask_price_3, tick.ask_price_4, tick.ask_price_5 = data[ "ask"][0:5] tick.bid_volume_1, tick.bid_volume_2, tick.bid_volume_3, tick.bid_volume_4, tick.bid_volume_5 = data[ "bid_qty"][0:5] tick.ask_volume_1, tick.ask_volume_2, tick.ask_volume_3, tick.ask_volume_4, tick.ask_volume_5 = data[ "ask_qty"][0:5] pricetick = SYMBOL_PRICETICK_MAP.get(tick.vt_symbol, 0) if pricetick: tick.bid_price_1 = round_to(tick.bid_price_1 / 10000, pricetick) tick.bid_price_2 = round_to(tick.bid_price_2 / 10000, pricetick) tick.bid_price_3 = round_to(tick.bid_price_3 / 10000, pricetick) tick.bid_price_4 = round_to(tick.bid_price_4 / 10000, pricetick) tick.bid_price_5 = round_to(tick.bid_price_5 / 10000, pricetick) tick.ask_price_1 = round_to(tick.ask_price_1 / 10000, pricetick) tick.ask_price_2 = round_to(tick.ask_price_2 / 10000, pricetick) tick.ask_price_3 = round_to(tick.ask_price_3 / 10000, pricetick) tick.ask_price_4 = round_to(tick.ask_price_4 / 10000, pricetick) tick.ask_price_5 = round_to(tick.ask_price_5 / 10000, pricetick) tick.name = SYMBOL_NAME_MAP.get(tick.vt_symbol, "") self.gateway.on_tick(tick)
def qute_stock_QUT(self, code, data): tick = self.ticks.get(code, None) if tick is None: contract = self.code2contract[code] tick = TickData( symbol=code, exchange=Exchange.TSE, name=f"{contract['name']}{contract['delivery_month']}", datetime=datetime.now(), gateway_name=self.gateway_name, ) self.ticks[code] = tick tick.bid_price_1 = data["BidPrice"][0] tick.bid_price_2 = data["BidPrice"][1] tick.bid_price_3 = data["BidPrice"][2] tick.bid_price_4 = data["BidPrice"][3] tick.bid_price_5 = data["BidPrice"][4] tick.ask_price_1 = data["AskPrice"][0] tick.ask_price_2 = data["AskPrice"][1] tick.ask_price_3 = data["AskPrice"][2] tick.ask_price_4 = data["AskPrice"][3] tick.ask_price_5 = data["AskPrice"][4] tick.bid_volume_1 = data["BidVolume"][0] tick.bid_volume_2 = data["BidVolume"][1] tick.bid_volume_3 = data["BidVolume"][2] tick.bid_volume_4 = data["BidVolume"][3] tick.bid_volume_5 = data["BidVolume"][4] tick.ask_volume_1 = data["AskVolume"][0] tick.ask_volume_2 = data["AskVolume"][1] tick.ask_volume_3 = data["AskVolume"][2] tick.ask_volume_4 = data["AskVolume"][3] tick.ask_volume_5 = data["AskVolume"][4] return tick
def quote_futures_Q(self, data): code = data.get('Code', None) if code is None: return tick = self.ticks.get(code, None) if tick is None: contract = self.code2contract[code] tick = TickData( symbol=data['Code'], exchange=Exchange.TFE, name=f"{contract['name']}{contract['delivery_month']}", datetime=datetime.now(), gateway_name=self.gateway_name, ) self.ticks[code] = tick tick.bid_price_1 = data["BidPrice"][0] tick.bid_price_2 = data["BidPrice"][1] tick.bid_price_3 = data["BidPrice"][2] tick.bid_price_4 = data["BidPrice"][3] tick.bid_price_5 = data["BidPrice"][4] tick.ask_price_1 = data["AskPrice"][0] tick.ask_price_2 = data["AskPrice"][1] tick.ask_price_3 = data["AskPrice"][2] tick.ask_price_4 = data["AskPrice"][3] tick.ask_price_5 = data["AskPrice"][4] tick.bid_volume_1 = data["BidVolume"][0] tick.bid_volume_2 = data["BidVolume"][1] tick.bid_volume_3 = data["BidVolume"][2] tick.bid_volume_4 = data["BidVolume"][3] tick.bid_volume_5 = data["BidVolume"][4] tick.ask_volume_1 = data["AskVolume"][0] tick.ask_volume_2 = data["AskVolume"][1] tick.ask_volume_3 = data["AskVolume"][2] tick.ask_volume_4 = data["AskVolume"][3] tick.ask_volume_5 = data["AskVolume"][4] return tick
def to_tick(self): """ Generate TickData object from DbTickData. """ tick = TickData( symbol=self.symbol, exchange=Exchange(self.exchange), datetime=self.datetime.replace(tzinfo=DB_TZ), name=self.name, volume=self.volume, open_interest=self.open_interest, last_price=self.last_price, last_volume=self.last_volume, limit_up=self.limit_up, limit_down=self.limit_down, open_price=self.open_price, high_price=self.high_price, low_price=self.low_price, pre_close=self.pre_close, bid_price_1=self.bid_price_1, ask_price_1=self.ask_price_1, bid_volume_1=self.bid_volume_1, ask_volume_1=self.ask_volume_1, gateway_name="DB", ) if self.bid_price_2: tick.bid_price_2 = self.bid_price_2 tick.bid_price_3 = self.bid_price_3 tick.bid_price_4 = self.bid_price_4 tick.bid_price_5 = self.bid_price_5 tick.bid_price_6 = self.bid_price_6 tick.bid_price_7 = self.bid_price_7 tick.bid_price_8 = self.bid_price_8 tick.bid_price_9 = self.bid_price_9 tick.bid_price_10 = self.bid_price_10 tick.bid_price_11 = self.bid_price_11 tick.bid_price_12 = self.bid_price_12 tick.bid_price_13 = self.bid_price_13 tick.bid_price_14 = self.bid_price_14 tick.bid_price_15 = self.bid_price_15 tick.bid_price_16 = self.bid_price_16 tick.bid_price_17 = self.bid_price_17 tick.bid_price_18 = self.bid_price_18 tick.bid_price_19 = self.bid_price_19 tick.bid_price_20 = self.bid_price_20 tick.ask_price_2 = self.ask_price_2 tick.ask_price_3 = self.ask_price_3 tick.ask_price_4 = self.ask_price_4 tick.ask_price_5 = self.ask_price_5 tick.ask_price_6 = self.ask_price_6 tick.ask_price_7 = self.ask_price_7 tick.ask_price_8 = self.ask_price_8 tick.ask_price_9 = self.ask_price_9 tick.ask_price_10 = self.ask_price_10 tick.ask_price_11 = self.ask_price_11 tick.ask_price_12 = self.ask_price_12 tick.ask_price_13 = self.ask_price_13 tick.ask_price_14 = self.ask_price_14 tick.ask_price_15 = self.ask_price_15 tick.ask_price_16 = self.ask_price_16 tick.ask_price_17 = self.ask_price_17 tick.ask_price_18 = self.ask_price_18 tick.ask_price_19 = self.ask_price_19 tick.ask_price_20 = self.ask_price_20 tick.bid_volume_2 = self.bid_volume_2 tick.bid_volume_3 = self.bid_volume_3 tick.bid_volume_4 = self.bid_volume_4 tick.bid_volume_5 = self.bid_volume_5 tick.bid_volume_6 = self.bid_volume_6 tick.bid_volume_7 = self.bid_volume_7 tick.bid_volume_8 = self.bid_volume_8 tick.bid_volume_9 = self.bid_volume_9 tick.bid_volume_10 = self.bid_volume_10 tick.bid_volume_11 = self.bid_volume_11 tick.bid_volume_12 = self.bid_volume_12 tick.bid_volume_13 = self.bid_volume_13 tick.bid_volume_14 = self.bid_volume_14 tick.bid_volume_15 = self.bid_volume_15 tick.bid_volume_16 = self.bid_volume_16 tick.bid_volume_17 = self.bid_volume_17 tick.bid_volume_18 = self.bid_volume_18 tick.bid_volume_19 = self.bid_volume_19 tick.bid_volume_20 = self.bid_volume_20 tick.ask_volume_2 = self.ask_volume_2 tick.ask_volume_3 = self.ask_volume_3 tick.ask_volume_4 = self.ask_volume_4 tick.ask_volume_5 = self.ask_volume_5 tick.ask_volume_6 = self.ask_volume_6 tick.ask_volume_7 = self.ask_volume_7 tick.ask_volume_8 = self.ask_volume_8 tick.ask_volume_9 = self.ask_volume_9 tick.ask_volume_10 = self.ask_volume_10 tick.ask_volume_11 = self.ask_volume_11 tick.ask_volume_12 = self.ask_volume_12 tick.ask_volume_13 = self.ask_volume_13 tick.ask_volume_14 = self.ask_volume_14 tick.ask_volume_15 = self.ask_volume_15 tick.ask_volume_16 = self.ask_volume_16 tick.ask_volume_17 = self.ask_volume_17 tick.ask_volume_18 = self.ask_volume_18 tick.ask_volume_19 = self.ask_volume_19 tick.ask_volume_20 = self.ask_volume_20 return tick
def on_data_update(self, data): """""" channel_id = data[0] channel, symbol = self.channels[channel_id] symbol = str(symbol.replace("t", "")) # Get the Tick object if symbol in self.ticks: tick = self.ticks[symbol] else: tick = TickData( symbol=symbol, exchange=Exchange.BITFINEX, name=symbol, datetime=datetime.now(UTC_TZ), gateway_name=self.gateway_name, ) self.ticks[symbol] = tick l_data1 = data[1] # Update general quote if channel == "ticker": tick.volume = float(l_data1[-3]) tick.high_price = float(l_data1[-2]) tick.low_price = float(l_data1[-1]) tick.last_price = float(l_data1[-4]) tick.open_price = float(tick.last_price - l_data1[4]) # Update deep quote elif channel == "book": bid = self.bids.setdefault(symbol, {}) ask = self.asks.setdefault(symbol, {}) if len(l_data1) > 3: for price, count, amount in l_data1: price = float(price) count = int(count) amount = float(amount) if amount > 0: bid[price] = amount else: ask[price] = -amount else: price, count, amount = l_data1 price = float(price) count = int(count) amount = float(amount) if not count: if price in bid: del bid[price] elif price in ask: del ask[price] else: if amount > 0: bid[price] = amount else: ask[price] = -amount try: # BID bid_keys = bid.keys() bidPriceList = sorted(bid_keys, reverse=True) tick.bid_price_1 = bidPriceList[0] tick.bid_price_2 = bidPriceList[1] tick.bid_price_3 = bidPriceList[2] tick.bid_price_4 = bidPriceList[3] tick.bid_price_5 = bidPriceList[4] tick.bid_volume_1 = bid[tick.bid_price_1] tick.bid_volume_2 = bid[tick.bid_price_2] tick.bid_volume_3 = bid[tick.bid_price_3] tick.bid_volume_4 = bid[tick.bid_price_4] tick.bid_volume_5 = bid[tick.bid_price_5] # ASK ask_keys = ask.keys() askPriceList = sorted(ask_keys) tick.ask_price_1 = askPriceList[0] tick.ask_price_2 = askPriceList[1] tick.ask_price_3 = askPriceList[2] tick.ask_price_4 = askPriceList[3] tick.ask_price_5 = askPriceList[4] tick.ask_volume_1 = ask[tick.ask_price_1] tick.ask_volume_2 = ask[tick.ask_price_2] tick.ask_volume_3 = ask[tick.ask_price_3] tick.ask_volume_4 = ask[tick.ask_price_4] tick.ask_volume_5 = ask[tick.ask_price_5] except IndexError: return dt = datetime.now(UTC_TZ) tick.datetime = dt self.gateway.on_tick(copy(tick))
def onRtnDepthMarketData(self, data: dict): """ Callback of tick data update. """ symbol = data["InstrumentID"] exchange = symbol_exchange_map.get(symbol, "") if not exchange: return timestamp = f"{data['ActionDay']} {data['UpdateTime']}.{int(data['UpdateMillisec']/100)}" dt = datetime.strptime(timestamp, "%Y%m%d %H:%M:%S.%f") # 不处理开盘前的tick数据 if dt.hour in [8, 20] and dt.minute < 59: return if exchange is Exchange.CFFEX and dt.hour == 9 and dt.minute < 14: return tick = TickData(symbol=symbol, exchange=exchange, datetime=dt, date=dt.strftime('%Y-%m-%d'), time=dt.strftime('%H:%M:%S.%f'), trading_day=get_trading_date(dt), name=symbol_name_map[symbol], volume=data["Volume"], open_interest=data["OpenInterest"], last_price=data["LastPrice"], limit_up=data["UpperLimitPrice"], limit_down=data["LowerLimitPrice"], open_price=adjust_price(data["OpenPrice"]), high_price=adjust_price(data["HighestPrice"]), low_price=adjust_price(data["LowestPrice"]), pre_close=adjust_price(data["PreClosePrice"]), bid_price_1=adjust_price(data["BidPrice1"]), ask_price_1=adjust_price(data["AskPrice1"]), bid_volume_1=data["BidVolume1"], ask_volume_1=data["AskVolume1"], gateway_name=self.gateway_name) if data["BidVolume2"] or data["AskVolume2"]: tick.bid_price_2 = adjust_price(data["BidPrice2"]) tick.bid_price_3 = adjust_price(data["BidPrice3"]) tick.bid_price_4 = adjust_price(data["BidPrice4"]) tick.bid_price_5 = adjust_price(data["BidPrice5"]) tick.ask_price_2 = adjust_price(data["AskPrice2"]) tick.ask_price_3 = adjust_price(data["AskPrice3"]) tick.ask_price_4 = adjust_price(data["AskPrice4"]) tick.ask_price_5 = adjust_price(data["AskPrice5"]) tick.bid_volume_2 = adjust_price(data["BidVolume2"]) tick.bid_volume_3 = adjust_price(data["BidVolume3"]) tick.bid_volume_4 = adjust_price(data["BidVolume4"]) tick.bid_volume_5 = adjust_price(data["BidVolume5"]) tick.ask_volume_2 = adjust_price(data["AskVolume2"]) tick.ask_volume_3 = adjust_price(data["AskVolume3"]) tick.ask_volume_4 = adjust_price(data["AskVolume4"]) tick.ask_volume_5 = adjust_price(data["AskVolume5"]) self.gateway.on_tick(tick)