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)
|
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(
|
order_reconciler = mango.marketmaking.ToleranceOrderReconciler(
|
||||||
args.existing_order_tolerance, args.existing_order_tolerance)
|
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 .modelstatebuilder import WebsocketModelStateBuilder as WebsocketModelStateBuilder
|
||||||
from .modelstatebuilderfactory import ModelUpdateMode as ModelUpdateMode
|
from .modelstatebuilderfactory import ModelUpdateMode as ModelUpdateMode
|
||||||
from .modelstatebuilderfactory import model_state_builder_factory as model_state_builder_factory
|
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 NullOrderReconciler as NullOrderReconciler
|
||||||
from .orderreconciler import OrderReconciler as OrderReconciler
|
from .orderreconciler import OrderReconciler as OrderReconciler
|
||||||
from .reconciledorders import ReconciledOrders as ReconciledOrders
|
from .reconciledorders import ReconciledOrders as ReconciledOrders
|
||||||
|
|
|
@ -58,3 +58,21 @@ class NullOrderReconciler(OrderReconciler):
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return """« NullOrderReconciler »"""
|
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 decimal import Decimal
|
||||||
|
|
||||||
from mango.marketmaking.orderreconciler import NullOrderReconciler
|
from mango.marketmaking.orderreconciler import NullOrderReconciler, AlwaysReplaceOrderReconciler
|
||||||
|
|
||||||
from ..fakes import fake_model_state
|
from ..fakes import fake_model_state
|
||||||
|
|
||||||
|
@ -23,3 +23,25 @@ def test_nulloperation() -> None:
|
||||||
|
|
||||||
assert result.to_keep == existing
|
assert result.to_keep == existing
|
||||||
assert result.to_ignore == desired
|
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