Ejemplo n.º 1
0
 def OnRspQryInvestor(self, pInvestor, pRspInfo, nRequestID, bIsLast):
     """请求查询投资者响应"""
     data = {
         "pInvestor": struct_to_dict(pInvestor),
         "pRspInfo": struct_to_dict(pRspInfo),
         "nRequestID": nRequestID,
         "bIsLast": bIsLast,
     }
     redis.publish(f"Trader:{self.account_name}:OnRspQryInvestor",
                   ujson.dumps(data))
     super().OnRspQryInvestor(pInvestor, pRspInfo, nRequestID, bIsLast)
Ejemplo n.º 2
0
 def OnRspQryTradingAccount(self, pTradingAccount, pRspInfo, nRequestID,
                            bIsLast):
     """请求查询资金账户响应"""
     data = {
         "pTradingAccount": struct_to_dict(pTradingAccount),
         "pRspInfo": struct_to_dict(pRspInfo),
         "nRequestID": nRequestID,
         "bIsLast": bIsLast,
     }
     redis.publish(f"Trader:{self.account_name}:OnRspQryTradingAccount",
                   ujson.dumps(data))
     super().OnRspQryTradingAccount(pTradingAccount, pRspInfo, nRequestID,
                                    bIsLast)
Ejemplo n.º 3
0
 def OnRspOrderAction(self, pInputOrderAction, pRspInfo, nRequestID,
                      bIsLast):
     """报单操作请求响应"""
     data = {
         "pInputOrderAction": struct_to_dict(pInputOrderAction),
         "pRspInfo": struct_to_dict(pRspInfo),
         "nRequestID": nRequestID,
         "bIsLast": bIsLast,
     }
     redis.publish(f"Trader:{self.account_name}:OnRspOrderAction",
                   ujson.dumps(data))
     super().OnRspOrderAction(pInputOrderAction, pRspInfo, nRequestID,
                              bIsLast)
Ejemplo n.º 4
0
 def OnRtnTrade(self, pTrade):
     """成交通知"""
     redis.publish("Trader:OnRtnTrade",
                   ujson.dumps({"pTrade": struct_to_dict(pTrade)}))
     # super().OnRtnTrade(pTrade)
     TradingAPI.insert_ctp_trade(self.account_name, pTrade)
     self.getPosition()
     self.getAccount()
     self.getInvestor()
Ejemplo n.º 5
0
    def OnRspQryInvestorPosition(self, pInvestorPosition, pRspInfo, nRequestID,
                                 bIsLast):
        """请求查询投资者持仓响应"""
        if pInvestorPosition is None:
            return
        data = struct_to_dict(pInvestorPosition)

        D = "L" if data['PosiDirection'] == '2' else 'S'

        position = ujson.loads(
            redis.hget("Position", data['InstrumentID']) or "{}")
        position[f'Total{D}Position'] = data['Position']
        position[f'Yd{D}Position'] = data['YdPosition']
        position[f'Today{D}Position'] = data['TodayPosition']
        position['NetAmount'] = position.get(
            'TotalLPosition', 0) - position.get('TotalSPosition', 0)
        redis.hset(f"Position:{self.account_name}", data['InstrumentID'],
                   ujson.dumps(position))
Ejemplo n.º 6
0
    def handler_data(self, data):
        try:
            instrument_id = data.InstrumentID.decode()
        except UnicodeDecodeError:
            return
        data = struct_to_dict(data)
        # hour = int(data['UpdateTime'].split(":")[0])
        if "03:00" <= data['UpdateTime'] <= "09:00" or "15:00" < data[
                'UpdateTime'] <= "20:59":
            return
        del data["ExchangeID"], data["ExchangeInstID"], data["PreDelta"], \
            data["CurrDelta"], data["BidPrice2"], data["BidPrice3"], \
            data["BidPrice4"], data["BidPrice5"], \
            data["BidVolume2"], data["BidVolume3"], \
            data["BidVolume4"], data["BidVolume5"], \
            data["AskPrice2"], data["AskPrice3"], \
            data["AskPrice4"], data["AskPrice5"], \
            data["AskVolume2"], data["AskVolume3"], \
            data["AskVolume4"], data["AskVolume5"], data["ClosePrice"], \
            data["SettlementPrice"]
        data["InstrumentID"] = instrument_id
        data[
            'TickTime'] = f"{date.today()} {data['UpdateTime']}.{data['UpdateMillisec']}"
        try:
            data['Timestamp'] = int(
                datetime.strptime(data['TickTime'],
                                  "%Y-%m-%d %H:%M:%S.%f").timestamp() *
                SECOND_UNIT)
        except ValueError:
            logger.error(
                f"time format error {date.today()} {data['UpdateTime']} {data['UpdateMillisec']}"
            )
            raise

        channel = f"TICK:{instrument_id}"
        data = ujson.dumps(data)
        redis.publish(channel, data)
        redis.hset("Price", instrument_id, data)
Ejemplo n.º 7
0
 def OnRtnTradingNotice(self, pTradingNoticeInfo):
     """交易通知"""
     redis.publish(f"Trader:{self.account_name}:OnRtnTradingNotice",
                   ujson.dumps(struct_to_dict(pTradingNoticeInfo)))
     super().OnRtnTradingNotice(pTradingNoticeInfo)