Merge branch 'v3' of https://github.com/blockworks-foundation/mango-explorer into v3
This commit is contained in:
commit
8c8ebdc7ae
|
@ -76,16 +76,27 @@ class ModelState:
|
|||
return self.asks_watcher.latest
|
||||
|
||||
@property
|
||||
def top_bid(self) -> mango.Order:
|
||||
return self.bids_watcher.latest[0]
|
||||
def top_bid(self) -> typing.Union[mango.Order, None]:
|
||||
if self.bids_watcher.latest:
|
||||
return self.bids_watcher.latest[0]
|
||||
else:
|
||||
return None
|
||||
|
||||
@property
|
||||
def top_ask(self) -> mango.Order:
|
||||
return self.asks_watcher.latest[0]
|
||||
def top_ask(self) -> typing.Union[mango.Order, None]:
|
||||
if self.asks_watcher.latest:
|
||||
return self.asks_watcher.latest[0]
|
||||
else:
|
||||
return None
|
||||
|
||||
@property
|
||||
def spread(self) -> Decimal:
|
||||
return self.top_ask.price - self.top_bid.price
|
||||
top_ask = self.top_ask
|
||||
top_bid = self.top_bid
|
||||
if top_ask is None or top_bid is None:
|
||||
return Decimal(0)
|
||||
else:
|
||||
return self.top_ask.price - self.top_bid.price
|
||||
|
||||
@property
|
||||
def existing_orders(self) -> typing.Sequence[mango.PlacedOrder]:
|
||||
|
|
|
@ -62,7 +62,10 @@ class ConfidenceIntervalSpreadElement(Element):
|
|||
|
||||
new_orders.sort(key=lambda ord: ord.price, reverse=True)
|
||||
order_text = "\n ".join([f"{order}" for order in new_orders])
|
||||
self.logger.debug(f"""Initial desired orders - spread {model_state.spread} ({model_state.top_bid.price} / {model_state.top_ask.price}):
|
||||
|
||||
top_bid = model_state.top_bid
|
||||
top_ask = model_state.top_ask
|
||||
self.logger.debug(f"""Initial desired orders - spread {model_state.spread} ({top_bid.price if top_bid else None} / {top_ask.price if top_ask else None}):
|
||||
{order_text}""")
|
||||
return new_orders
|
||||
|
||||
|
|
|
@ -33,17 +33,19 @@ class PreventPostOnlyCrossingBookElement(Element):
|
|||
new_orders: typing.List[mango.Order] = []
|
||||
for order in orders:
|
||||
if order.order_type == mango.OrderType.POST_ONLY:
|
||||
if order.side == mango.Side.BUY and order.price >= model_state.top_bid.price:
|
||||
new_buy_price: Decimal = model_state.top_bid.price - model_state.market.lot_size_converter.tick_size
|
||||
top_bid = model_state.top_bid
|
||||
top_ask = model_state.top_ask
|
||||
if order.side == mango.Side.BUY and top_bid is not None and order.price >= top_bid.price:
|
||||
new_buy_price: Decimal = top_bid.price - model_state.market.lot_size_converter.tick_size
|
||||
new_buy: mango.Order = order.with_price(new_buy_price)
|
||||
self.logger.debug(f"""Order change - would cross the orderbook {model_state.top_bid.price} / {model_state.top_ask.price}:
|
||||
self.logger.debug(f"""Order change - would cross the orderbook {top_bid.price} / {top_ask.price if top_ask else None}:
|
||||
Old: {order}
|
||||
New: {new_buy}""")
|
||||
new_orders += [new_buy]
|
||||
elif order.side == mango.Side.SELL and order.price <= model_state.top_ask.price:
|
||||
new_sell_price: Decimal = model_state.top_ask.price + model_state.market.lot_size_converter.tick_size
|
||||
elif order.side == mango.Side.SELL and top_ask is not None and order.price <= top_ask.price:
|
||||
new_sell_price: Decimal = top_ask.price + model_state.market.lot_size_converter.tick_size
|
||||
new_sell: mango.Order = order.with_price(new_sell_price)
|
||||
self.logger.debug(f"""Order change - would cross the orderbook {model_state.top_bid.price} / {model_state.top_ask.price}:
|
||||
self.logger.debug(f"""Order change - would cross the orderbook {top_bid.price if top_bid else None} / {top_ask.price}:
|
||||
Old: {order}
|
||||
New: {new_sell}""")
|
||||
new_orders += [new_sell]
|
||||
|
|
Loading…
Reference in New Issue