예제 #1
0
파일: futu_gateway.py 프로젝트: shhuiw/vnpy
    def get_tick(self, code):
        """
        Get tick buffer.
        """
        tick = self.ticks.get(code, None)
        symbol, exchange = convert_symbol_futu2vt(code)
        if not tick:
            tick = TickData(
                symbol=symbol,
                exchange=exchange,
                datetime=datetime.now(),
                gateway_name=self.gateway_name,
            )
            self.ticks[code] = tick

        contract = self.contracts.get(tick.vt_symbol, None)
        if contract:
            tick.name = contract.name

        return tick
예제 #2
0
파일: tiger_gateway.py 프로젝트: Alyle/vnpy
    def on_quote_change(self, tiger_symbol: str, data: list, trading: bool):
        """"""
        data = dict(data)
        symbol, exchange = convert_symbol_tiger2vt(tiger_symbol)

        tick = self.ticks.get(symbol, None)
        if not tick:
            tick = TickData(
                symbol=symbol,
                exchange=exchange,
                gateway_name=self.gateway_name,
                datetime=datetime.now(),
                name=self.symbol_names[symbol],
            )
            self.ticks[symbol] = tick

        tick.datetime = datetime.fromtimestamp(data["latest_time"] / 1000)
        tick.pre_close = data.get("prev_close", 0)
        tick.last_price = data.get("latest_price", 0)
        tick.volume = data.get("volume", 0)
        tick.open_price = data.get("open", 0)
        tick.open_price = data.get("open", 0)
        tick.high_price = data.get("high", 0)
        tick.low_price = data.get("low", 0)
        tick.ask_price_1 = data.get("ask_price", 0)
        tick.bid_price_1 = data.get("bid_price", 0)
        tick.ask_volume_1 = data.get("ask_size", 0)
        tick.bid_volume_1 = data.get("bid_size", 0)

        self.on_tick(copy(tick))
예제 #3
0
    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)
예제 #4
0
        def to_tick(self):
            """
            Generate TickData object from DbTickData.
            """
            tick = TickData(
                symbol=self.symbol,
                exchange=Exchange(self.exchange),
                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
예제 #5
0
    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)
예제 #6
0
    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"

        tick = TickData(symbol=symbol,
                        exchange=exchange,
                        datetime=datetime.strptime(timestamp,
                                                   "%Y%m%d %H%M%S%f"),
                        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)
예제 #7
0
    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['TradingDay']} {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=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)
예제 #8
0
 def getContractSnapshot(self, contract):
     snapshot = self.api.quote.snapshots([contract])[0]
     code = snapshot.code
     exchange = Exchange.TSE if snapshot.exchange in ["TSE", "OTC"] else Exchange.TFE
     symbol = f"{code}.{exchange.value}"
     tick = self.ticks.get(symbol, None)
     if tick is None:
         self.code2contract[symbol] = contract
         if exchange == Exchange.TFE:
             name = f"{contract['name']}{contract['delivery_month']}"
         else:
             name = f"{contract['name']}"
         tick = TickData(
             symbol=code,
             exchange=exchange,
             name=name,
             datetime=datetime.fromtimestamp(snapshot.ts / 1000000000 - 8 * 60 * 60),
             gateway_name=self.gateway_name,
         )
     tick.volume = snapshot.total_volume
     tick.last_price = snapshot.close
     tick.limit_up = contract.limit_up
     tick.open_interest = 0
     tick.limit_down = contract.limit_down
     tick.open_price = snapshot.open
     tick.high_price = snapshot.high
     tick.low_price = snapshot.low
     tick.pre_close = contract.reference
     tick.bid_price_1 = snapshot.buy_price
     tick.bid_volume_1 = snapshot.buy_volume
     tick.ask_price_1 = snapshot.sell_price
     tick.ask_volume_1 = snapshot.sell_volume
     self.ticks[symbol] = tick
     self.on_tick(copy(tick))
예제 #9
0
    def quote_stock_MKT(self, code, data):
        """
        QUT/idcdmzpcr01/TSE/2330
        {'AskPrice': [248.0, 248.5, 249.0, 249.5, 250.0], 'AskVolume': [355, 632, 630, 301, 429],
        'BidPrice': [247.5, 247.0, 246.5, 246.0, 245.5], 'BidVolume': [397, 389, 509, 703, 434],
         'Date': '2019/05/17', 'Time': '09:53:00.706928'}

        MKT/idcdmzpcr01/TSE/2330
        {'Close': [248.0], 'Time': '09:53:00.706928',
            'VolSum': [7023], 'Volume': [1]}
        """

        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,
                low_price=99999
            )
            self.ticks[code] = tick
        tick.datetime = datetime.combine(datetime.today(),
                                         datetime.strptime('{}'.format(data['Time']), "%H:%M:%S.%f").time())
        tick.volume = data["VolSum"][0]
        tick.last_price = data["Close"][0]
        tick.limit_up = 0
        tick.open_interest = 0
        tick.limit_down = 0
        tick.open_price = data["Close"][0] if tick.open_price == 0 else tick.open_price
        tick.high_price = data["Close"][0] if data["Close"][0] > tick.high_price else tick.high_price
        tick.low_price = data["Close"][0] if data["Close"][0] < tick.low_price else tick.low_price
        tick.pre_close = tick.open_price
        return tick
예제 #10
0
    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
예제 #11
0
 def qutote_futures_L(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.get(code, None)
         tick = TickData(
             symbol=code,
             exchange=Exchange.TFE,
             name=f"{contract['name']}{contract['delivery_month']}",
             datetime=datetime.now(),
             gateway_name=self.gateway_name,
         )
         self.ticks[code] = tick
     tick.datetime = datetime.strptime('{} {}'.format(
         data['Date'], data['Time']), "%Y/%m/%d %H:%M:%S.%f")
     tick.volume = data["VolSum"][0]
     tick.last_price = data["Close"][0]
     tick.limit_up = 0
     tick.open_interest = 0
     tick.limit_down = 0
     tick.open_price = data["Open"]
     tick.high_price = data["High"][0]
     tick.low_price = data["Low"][0]
     tick.pre_close = data["Close"][0] - data["DiffPrice"][0]
     return tick
예제 #12
0
 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
예제 #13
0
    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))
예제 #14
0
    def update_strategy(self, dt, closed_pnl=0, hold_pnl=0):
        """
        更新资金曲线
        :param dt:
        :param closed_pnl: 策略提供的平仓盈亏
        :param hold_pnl: 策略提供的持仓盈亏
        :return:
        """
        # 获取当前bar的平仓权益
        open_interest = 0
        if len(self.kline.line_bar) > 0:
            open_interest = self.kline.line_bar[-1].open_interest

        if closed_pnl != 0:
            self.write_log(u'策略平仓收益:{}->{}'.format(open_interest,
                                                   open_interest + closed_pnl))
            open_interest += closed_pnl

        tick = TickData(gateway_name='Fund',
                        symbol=self.symbol,
                        exchange=Exchange.LOCAL,
                        datetime=dt)

        tick.last_price = open_interest + hold_pnl
        tick.volume = 1
        tick.ask_price1 = open_interest + hold_pnl
        tick.ask_volume1 = 1
        tick.bid_price1 = open_interest + hold_pnl
        tick.bid_volume1 = 1
        tick.datetime = dt
        tick.open_interest = open_interest
        tick.date = tick.datetime.strftime('%Y-%m-%d')
        tick.time = tick.datetime.strftime('%H:%M:%S')
        tick.trading_day = get_trading_date(dt)

        if self.inited:
            self.kline.on_tick(tick)

        self.closed_profit = open_interest
        self.holding_profit = hold_pnl
예제 #15
0
    def update_account(self, dt, balance):
        """
        更新资金曲线
        :param dt:
        :param balance: 账号级别,直接使用账号得的balance;
        :return:
        """
        tick = TickData(gateway_name='Fund',
                        symbol=self.symbol,
                        exchange=Exchange.LOCAL,
                        datetime=dt)
        tick.last_price = balance
        tick.volume = 1
        tick.ask_price_1 = balance
        tick.ask_volume_1 = 1
        tick.bid_price_1 = balance
        tick.bid_volume_1 = 1
        tick.date = tick.datetime.strftime('%Y-%m-%d')
        tick.time = tick.datetime.strftime('%H:%M:%S')
        tick.trading_day = get_trading_date(dt)
        tick.open_interest = balance

        if self.inited:
            self.kline.on_tick(tick)

        # 如果是从账号更新,无法更新持仓盈亏
        self.closed_profit = balance
        self.holding_profit = 0