Added an AlwaysReplaceOrderReconciler.
This commit is contained in:
parent
d0d9fc45c1
commit
a96099511d
|
@ -131,6 +131,10 @@ if args.hedging_market is not None:
|
|||
args.hedging_max_chunk_quantity, target_balance, args.hedging_action_threshold)
|
||||
|
||||
|
||||
order_reconciler: mango.marketmaking.OrderReconciler
|
||||
if args.existing_order_tolerance < 0:
|
||||
order_reconciler = mango.marketmaking.AlwaysReplaceOrderReconciler()
|
||||
else:
|
||||
order_reconciler = mango.marketmaking.ToleranceOrderReconciler(
|
||||
args.existing_order_tolerance, args.existing_order_tolerance)
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ from .modelstatebuilder import SpotPollingModelStateBuilder as SpotPollingModelS
|
|||
from .modelstatebuilder import WebsocketModelStateBuilder as WebsocketModelStateBuilder
|
||||
from .modelstatebuilderfactory import ModelUpdateMode as ModelUpdateMode
|
||||
from .modelstatebuilderfactory import model_state_builder_factory as model_state_builder_factory
|
||||
from .orderreconciler import AlwaysReplaceOrderReconciler as AlwaysReplaceOrderReconciler
|
||||
from .orderreconciler import NullOrderReconciler as NullOrderReconciler
|
||||
from .orderreconciler import OrderReconciler as OrderReconciler
|
||||
from .reconciledorders import ReconciledOrders as ReconciledOrders
|
||||
|
|
|
@ -58,3 +58,21 @@ class NullOrderReconciler(OrderReconciler):
|
|||
|
||||
def __str__(self) -> str:
|
||||
return """« NullOrderReconciler »"""
|
||||
|
||||
|
||||
# # 🥭 AlwaysReplaceOrderReconciler class
|
||||
#
|
||||
# Implementation of OrderReconciler that never keeps orders, just always cancels and replaces.
|
||||
#
|
||||
class AlwaysReplaceOrderReconciler(OrderReconciler):
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
|
||||
def reconcile(self, _: ModelState, existing_orders: typing.Sequence[mango.Order], desired_orders: typing.Sequence[mango.Order]) -> ReconciledOrders:
|
||||
outcomes: ReconciledOrders = ReconciledOrders()
|
||||
outcomes.to_cancel = list(existing_orders)
|
||||
outcomes.to_place = list(desired_orders)
|
||||
return outcomes
|
||||
|
||||
def __str__(self) -> str:
|
||||
return """« AlwaysReplaceOrderReconciler »"""
|
||||
|
|
|
@ -2,7 +2,7 @@ import mango
|
|||
|
||||
from decimal import Decimal
|
||||
|
||||
from mango.marketmaking.orderreconciler import NullOrderReconciler
|
||||
from mango.marketmaking.orderreconciler import NullOrderReconciler, AlwaysReplaceOrderReconciler
|
||||
|
||||
from ..fakes import fake_model_state
|
||||
|
||||
|
@ -23,3 +23,25 @@ def test_nulloperation() -> None:
|
|||
|
||||
assert result.to_keep == existing
|
||||
assert result.to_ignore == desired
|
||||
assert result.to_cancel == []
|
||||
assert result.to_place == []
|
||||
|
||||
|
||||
def test_alwaysreplace() -> None:
|
||||
existing = [
|
||||
mango.Order.from_basic_info(mango.Side.BUY, price=Decimal(1), quantity=Decimal(10)),
|
||||
mango.Order.from_basic_info(mango.Side.SELL, price=Decimal(2), quantity=Decimal(20))
|
||||
]
|
||||
desired = [
|
||||
mango.Order.from_basic_info(mango.Side.BUY, price=Decimal(3), quantity=Decimal(30)),
|
||||
mango.Order.from_basic_info(mango.Side.SELL, price=Decimal(4), quantity=Decimal(40))
|
||||
]
|
||||
|
||||
model_state = fake_model_state()
|
||||
actual = AlwaysReplaceOrderReconciler()
|
||||
result = actual.reconcile(model_state, existing, desired)
|
||||
|
||||
assert result.to_keep == []
|
||||
assert result.to_ignore == []
|
||||
assert result.to_cancel == existing
|
||||
assert result.to_place == desired
|
||||
|
|
Loading…
Reference in New Issue