示例#1
0
    def update_ticks(self, ask_order_dict, bid_order_dict, traded_quantity):
        """
        Update ticks according to a TrustChain block containing the status of the ask/bid orders.

        :type ask_order_dict: dict
        :type bid_order_dict: dict
        :type traded_quantity: int
        """
        ask_order_id = OrderId(TraderId(unhexlify(ask_order_dict["trader_id"])),
                               OrderNumber(ask_order_dict["order_number"]))
        bid_order_id = OrderId(TraderId(unhexlify(bid_order_dict["trader_id"])),
                               OrderNumber(bid_order_dict["order_number"]))

        self._logger.debug("Updating ticks in order book: %s and %s (traded quantity: %s)",
                           str(ask_order_id), str(bid_order_id), str(traded_quantity))

        # Update ask tick
        ask_exists = self.tick_exists(ask_order_id)
        if ask_exists and ask_order_dict["traded"] >= self.get_tick(ask_order_id).traded:
            tick = self.get_tick(ask_order_id)
            tick.traded = ask_order_dict["traded"]
            if tick.traded >= tick.assets.first.amount:
                self.remove_tick(tick.order_id)
                self.completed_orders.add(tick.order_id)
        elif not ask_exists and ask_order_dict["traded"] < ask_order_dict["assets"]["first"]["amount"] and \
                ask_order_id not in self.completed_orders:
            new_pair = AssetPair.from_dictionary(ask_order_dict["assets"])
            ask = Ask(ask_order_id, new_pair, Timeout(ask_order_dict["timeout"]),
                      Timestamp(ask_order_dict["timestamp"]), traded=ask_order_dict["traded"])
            self.insert_ask(ask)
        elif not ask_exists and ask_order_dict["traded"] >= ask_order_dict["assets"]["first"]["amount"]:
            self.completed_orders.add(ask_order_id)

        # Update bid tick
        bid_exists = self.tick_exists(bid_order_id)
        if bid_exists and bid_order_dict["traded"] >= self.get_tick(bid_order_id).traded:
            tick = self.get_tick(bid_order_id)
            tick.traded = bid_order_dict["traded"]
            if tick.traded >= tick.assets.first.amount:
                self.remove_tick(tick.order_id)
                self.completed_orders.add(tick.order_id)
        elif not bid_exists and bid_order_dict["traded"] < bid_order_dict["assets"]["first"]["amount"] and \
                bid_order_id not in self.completed_orders:
            new_pair = AssetPair.from_dictionary(bid_order_dict["assets"])
            bid = Bid(bid_order_id, new_pair, Timeout(bid_order_dict["timeout"]),
                      Timestamp(bid_order_dict["timestamp"]), traded=bid_order_dict["traded"])
            self.insert_bid(bid)
        elif not bid_exists and bid_order_dict["traded"] >= bid_order_dict["assets"]["first"]["amount"]:
            self.completed_orders.add(bid_order_id)
示例#2
0
def test_from_dictionary(asset_pairs):
    """
    Test the method to create an AssetPair object from a given dictionary
    """
    assert AssetPair.from_dictionary({
        "first": {
            "amount": 2,
            "type": "BTC",
        },
        "second": {
            "amount": 2,
            "type": "MB"
        }
    }) == asset_pairs[0]
示例#3
0
 def from_tx_init_block(cls, tx_init_block):
     """
     Create a transaction from an incoming tx_init block.
     :param tx_init_block: The tx_init block containing the transaction information
     :return: The created transaction
     :rtype: Transaction
     """
     tx_dict = tx_init_block.transaction["tx"]
     order_id = OrderId(TraderId(unhexlify(tx_dict["partner_trader_id"])),
                        OrderNumber(tx_dict["partner_order_number"]))
     partner_order_id = OrderId(TraderId(unhexlify(tx_dict["trader_id"])),
                                OrderNumber(tx_dict["order_number"]))
     return cls(TransactionId(tx_init_block.hash), AssetPair.from_dictionary(tx_dict["assets"]),
                order_id, partner_order_id, Timestamp.now())
示例#4
0
 def test_from_dictionary(self):
     """
     Test the method to create an AssetPair object from a given dictionary
     """
     self.assertEqual(
         AssetPair.from_dictionary({
             "first": {
                 "amount": 2,
                 "type": "BTC",
             },
             "second": {
                 "amount": 2,
                 "type": "MB"
             }
         }), self.assetpair1)
示例#5
0
    def from_block(cls, block):
        """
        Restore a bid from a TrustChain block

        :param data: TrustChainBlock
        :return: Restored bid
        :rtype: Bid
        """
        tx_dict = block.transaction["tick"]
        return cls(OrderId(TraderId(unhexlify(tx_dict["trader_id"])),
                           OrderNumber(tx_dict["order_number"])),
                   AssetPair.from_dictionary(tx_dict["assets"]),
                   Timeout(tx_dict["timeout"]),
                   Timestamp(tx_dict["timestamp"]),
                   traded=tx_dict["traded"],
                   block_hash=block.hash)