Better logging of Orders.

This commit is contained in:
Geoff Taylor 2021-07-22 18:44:23 +01:00
parent fb0151191f
commit 3738ff820e
6 changed files with 42 additions and 45 deletions

View File

@ -62,7 +62,7 @@ class MarketMaker:
cancellations = mango.CombinableInstructions.empty()
for to_cancel in reconciled.to_cancel:
self.logger.info(f"Cancelling {to_cancel}")
self.logger.info(f"Cancelling {self.market.symbol} {to_cancel}")
cancel = self.market_instruction_builder.build_cancel_order_instructions(to_cancel)
cancellations += cancel
@ -72,7 +72,7 @@ class MarketMaker:
to_place_with_client_id = to_place.with_client_id(desired_client_id)
self.order_tracker.track(to_place_with_client_id)
self.logger.info(f"Placing {to_place_with_client_id}")
self.logger.info(f"Placing {self.market.symbol} {to_place_with_client_id}")
place_order = self.market_instruction_builder.build_place_order_instructions(to_place_with_client_id)
place_orders += place_order

View File

@ -95,14 +95,14 @@ class NullMarketOperations(MarketOperations):
self.market_name: str = market_name
def cancel_order(self, order: Order) -> typing.Sequence[str]:
self.logger.info(
f"Cancelling order {order.id} for quantity {order.quantity} at price {order.price} on market {self.market_name} with client ID {order.client_id}.")
self.logger.info(f"Cancelling order {order}.")
return [""]
def place_order(self, side: Side, order_type: OrderType, price: Decimal, quantity: Decimal) -> Order:
self.logger.info(
f"Placing {order_type} {side} order for quantity {quantity} at price {price} on market {self.market_name}.")
return Order(id=0, side=side, price=price, quantity=quantity, client_id=0, owner=SYSTEM_PROGRAM_ADDRESS, order_type=order_type)
order: Order = Order(id=0, side=side, price=price, quantity=quantity, client_id=0,
owner=SYSTEM_PROGRAM_ADDRESS, order_type=order_type)
self.logger.info(f"Placing order {order}.")
return order
def load_orders(self) -> typing.Sequence[Order]:
return []

View File

@ -116,7 +116,13 @@ class Order(typing.NamedTuple):
return Order(id=id, client_id=client_id, owner=SYSTEM_PROGRAM_ADDRESS, side=side, price=Decimal(0), quantity=Decimal(0), order_type=OrderType.UNKNOWN)
def __str__(self):
return f"« 𝙾𝚛𝚍𝚎𝚛 [{self.owner}] {self.side} for {self.quantity:,.8f} at {self.price:.8f} [ID: {self.id} / {self.client_id}] {self.order_type} »"
owner: str = ""
if self.owner != SYSTEM_PROGRAM_ADDRESS:
owner = f"[{self.owner}] "
order_type: str = ""
if self.order_type != OrderType.UNKNOWN:
order_type = f" {self.order_type}"
return f"« 𝙾𝚛𝚍𝚎𝚛 {owner}{self.side} for {self.quantity:,.8f} at {self.price:.8f} [ID: {self.id} / {self.client_id}]{order_type} »"
def __repr__(self) -> str:
return f"{self}"

View File

@ -51,21 +51,18 @@ class PerpMarketOperations(MarketOperations):
self.perp_market: PerpMarket = perp_market
def cancel_order(self, order: Order) -> typing.Sequence[str]:
self.logger.info(
f"Cancelling order {order.id} for quantity {order.quantity} at price {order.price} on market {self.market_name} with client ID {order.client_id}.")
self.logger.info(f"Cancelling {self.market_name} order {order}.")
signers: CombinableInstructions = CombinableInstructions.from_wallet(self.wallet)
cancel = self.market_instruction_builder.build_cancel_order_instructions(order)
cancel: CombinableInstructions = self.market_instruction_builder.build_cancel_order_instructions(order)
return (signers + cancel).execute_and_unwrap_transaction_ids(self.context)
def place_order(self, side: Side, order_type: OrderType, price: Decimal, quantity: Decimal) -> Order:
client_id: int = self.context.random_client_id()
self.logger.info(
f"Placing {order_type} {side} order for quantity {quantity} at price {price} on market {self.market_name} with ID {client_id}.")
signers: CombinableInstructions = CombinableInstructions.from_wallet(self.wallet)
order = Order(id=0, client_id=client_id, owner=self.account.address,
side=side, price=price, quantity=quantity, order_type=order_type)
place = self.market_instruction_builder.build_place_order_instructions(order)
order: Order = Order(id=0, client_id=client_id, owner=self.account.address,
side=side, price=price, quantity=quantity, order_type=order_type)
self.logger.info(f"Placing {self.market_name} order {order}.")
place: CombinableInstructions = self.market_instruction_builder.build_place_order_instructions(order)
(signers + place).execute(self.context)
return order

View File

@ -51,32 +51,29 @@ class SerumMarketOperations(MarketOperations):
self.market_instruction_builder: SerumMarketInstructionBuilder = market_instruction_builder
def cancel_order(self, order: Order) -> typing.Sequence[str]:
self.logger.info(
f"Cancelling order {order.id} for quantity {order.quantity} at price {order.price} on market {self.serum_market.symbol} with client ID {order.client_id}.")
self.logger.info(f"Cancelling {self.serum_market.symbol} order {order}.")
signers: CombinableInstructions = CombinableInstructions.from_wallet(self.wallet)
cancel = self.market_instruction_builder.build_cancel_order_instructions(order)
cancel: CombinableInstructions = self.market_instruction_builder.build_cancel_order_instructions(order)
open_orders_to_crank: typing.Sequence[PublicKey] = fetch_market_open_orders_addresses_to_crank(
self.context, self.raw_market)
crank = self.market_instruction_builder.build_crank_instructions(open_orders_to_crank)
settle = self.market_instruction_builder.build_settle_instructions()
crank: CombinableInstructions = self.market_instruction_builder.build_crank_instructions(open_orders_to_crank)
settle: CombinableInstructions = self.market_instruction_builder.build_settle_instructions()
return (signers + cancel + crank + settle).execute_and_unwrap_transaction_ids(self.context)
def place_order(self, side: Side, order_type: OrderType, price: Decimal, quantity: Decimal) -> Order:
client_id: int = self.context.random_client_id()
self.logger.info(
f"Placing {order_type} {side} order for quantity {quantity} at price {price} on market {self.serum_market.symbol} with client ID {client_id}.")
signers: CombinableInstructions = CombinableInstructions.from_wallet(self.wallet)
open_orders_address = self.market_instruction_builder.open_orders_address or SYSTEM_PROGRAM_ADDRESS
order = Order(id=0, client_id=client_id, side=side, price=price,
quantity=quantity, owner=open_orders_address, order_type=order_type)
place = self.market_instruction_builder.build_place_order_instructions(order)
order: Order = Order(id=0, client_id=client_id, side=side, price=price,
quantity=quantity, owner=open_orders_address, order_type=order_type)
self.logger.info(f"Placing {self.serum_market.symbol} order {order}.")
place: CombinableInstructions = self.market_instruction_builder.build_place_order_instructions(order)
open_orders_to_crank: typing.Sequence[PublicKey] = fetch_market_open_orders_addresses_to_crank(
self.context, self.raw_market)
crank = self.market_instruction_builder.build_crank_instructions(open_orders_to_crank)
crank: CombinableInstructions = self.market_instruction_builder.build_crank_instructions(open_orders_to_crank)
settle = self.market_instruction_builder.build_settle_instructions()
settle: CombinableInstructions = self.market_instruction_builder.build_settle_instructions()
(signers + place + crank + settle).execute(self.context)
return order

View File

@ -56,32 +56,29 @@ class SpotMarketOperations(MarketOperations):
self.open_orders_address = self.account.spot_open_orders[self.market_index]
def cancel_order(self, order: Order) -> typing.Sequence[str]:
self.logger.info(
f"Cancelling order {order.id} for quantity {order.quantity} at price {order.price} on market {self.spot_market.symbol} with client ID {order.client_id}.")
self.logger.info(f"Cancelling {self.spot_market.symbol} order {order}.")
signers: CombinableInstructions = CombinableInstructions.from_wallet(self.wallet)
cancel = self.market_instruction_builder.build_cancel_order_instructions(order)
cancel: CombinableInstructions = self.market_instruction_builder.build_cancel_order_instructions(order)
open_orders_to_crank: typing.Sequence[PublicKey] = fetch_market_open_orders_addresses_to_crank(
self.context, self.raw_market)
crank = self.market_instruction_builder.build_crank_instructions(open_orders_to_crank)
# settle = self.market_instruction_builder.build_settle_instructions()
crank: CombinableInstructions = self.market_instruction_builder.build_crank_instructions(open_orders_to_crank)
settle: CombinableInstructions = self.market_instruction_builder.build_settle_instructions()
return (signers + cancel + crank).execute(self.context)
return (signers + cancel + crank + settle).execute(self.context)
def place_order(self, side: Side, order_type: OrderType, price: Decimal, quantity: Decimal) -> Order:
client_id: int = self.context.random_client_id()
self.logger.info(
f"Placing {order_type} {side} order for quantity {quantity} at price {price} on market {self.spot_market.symbol} with ID {client_id}.")
signers: CombinableInstructions = CombinableInstructions.from_wallet(self.wallet)
order = Order(id=0, client_id=client_id, side=side, price=price,
quantity=quantity, owner=self.open_orders_address, order_type=order_type)
place = self.market_instruction_builder.build_place_order_instructions(order)
order: Order = Order(id=0, client_id=client_id, side=side, price=price,
quantity=quantity, owner=self.open_orders_address, order_type=order_type)
self.logger.info(f"Placing {self.spot_market.symbol} order {order}.")
place: CombinableInstructions = self.market_instruction_builder.build_place_order_instructions(order)
open_orders_to_crank: typing.Sequence[PublicKey] = fetch_market_open_orders_addresses_to_crank(
self.context, self.raw_market)
crank = self.market_instruction_builder.build_crank_instructions(open_orders_to_crank)
# settle = self.market_instruction_builder.build_settle_instructions()
crank: CombinableInstructions = self.market_instruction_builder.build_crank_instructions(open_orders_to_crank)
settle: CombinableInstructions = self.market_instruction_builder.build_settle_instructions()
(signers + place + crank).execute(self.context)
(signers + place + crank + settle).execute(self.context)
return order