Factor and simplify paper clearing logic
parent
5deea50963
commit
d58a82bd38
|
@ -279,63 +279,47 @@ async def simulate_fills(
|
|||
tick.get('size', client.last_ask[1]),
|
||||
)
|
||||
|
||||
buys = client._buys.get(sym, {})
|
||||
orders = client._buys.get(sym, {})
|
||||
book_sequence = reversed(
|
||||
sorted(orders.keys(), key=itemgetter(1)))
|
||||
|
||||
# iterate book prices descending
|
||||
for oid, our_bid in reversed(
|
||||
sorted(buys.keys(), key=itemgetter(1))
|
||||
):
|
||||
if tick_price < our_bid:
|
||||
def pred(our_price):
|
||||
return tick_price < our_price
|
||||
|
||||
# retreive order info
|
||||
(size, reqid, action) = buys.pop((oid, our_bid))
|
||||
|
||||
# clearing price would have filled entirely
|
||||
await client.fake_fill(
|
||||
# todo slippage to determine fill price
|
||||
price=tick_price,
|
||||
size=size,
|
||||
action=action,
|
||||
reqid=reqid,
|
||||
oid=oid,
|
||||
)
|
||||
else:
|
||||
# prices are interated in sorted order so
|
||||
# we're done
|
||||
break
|
||||
|
||||
if ttype in ('bid',):
|
||||
elif ttype in ('bid',):
|
||||
|
||||
client.last_bid = (
|
||||
tick_price,
|
||||
tick.get('size', client.last_bid[1]),
|
||||
)
|
||||
|
||||
sells = client._sells.get(sym, {})
|
||||
orders = client._sells.get(sym, {})
|
||||
book_sequence = sorted(orders.keys(), key=itemgetter(1))
|
||||
|
||||
# iterate book prices ascending
|
||||
for oid, our_ask in sorted(
|
||||
sells.keys(), key=itemgetter(1)
|
||||
):
|
||||
if tick_price > our_ask:
|
||||
def pred(our_price):
|
||||
return tick_price > our_price
|
||||
|
||||
# retreive order info
|
||||
(size, reqid, action) = sells.pop((oid, our_ask))
|
||||
|
||||
# clearing price would have filled entirely
|
||||
await client.fake_fill(
|
||||
price=tick_price,
|
||||
size=size,
|
||||
action=action,
|
||||
reqid=reqid,
|
||||
oid=oid,
|
||||
)
|
||||
else:
|
||||
# prices are interated in sorted order so
|
||||
# we're done
|
||||
break
|
||||
|
||||
if ttype in ('trade', 'last'):
|
||||
elif ttype in ('trade', 'last'):
|
||||
# TODO: simulate actual book queues and our orders
|
||||
# place in it, might require full L2 data?
|
||||
pass
|
||||
continue
|
||||
|
||||
# iterate book prices descending
|
||||
for oid, our_price in book_sequence:
|
||||
if pred(our_price):
|
||||
|
||||
# retreive order info
|
||||
(size, reqid, action) = orders.pop((oid, our_price))
|
||||
|
||||
# clearing price would have filled entirely
|
||||
await client.fake_fill(
|
||||
# todo slippage to determine fill price
|
||||
price=tick_price,
|
||||
size=size,
|
||||
action=action,
|
||||
reqid=reqid,
|
||||
oid=oid,
|
||||
)
|
||||
else:
|
||||
# prices are iterated in sorted order so we're done
|
||||
break
|
||||
|
|
Loading…
Reference in New Issue