From 33249336131b6e1cb51ca1271da4959231cb30e5 Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 14 Jul 2026 13:04:54 +0200 Subject: [PATCH] =?UTF-8?q?malkhut(wire):=20OrderType=20unified=20?= =?UTF-8?q?=E2=80=94=205-layer=20taxonomy,=20backward=20compatible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit state.py OrderType replaced with 5-layer taxonomy (FIX/CCXT aligned): Layer 1: MARKET, LIMIT (FIX Tag 40) Layer 2: GTC, IOC, FOK, GTD (FIX Tag 59) Layer 3: STOP_MARKET, STOP_LIMIT, TRIGGER_MARKET, TRIGGER_LIMIT, TRAILING_STOP Layer 4: POST_ONLY, REDUCE_ONLY, HIDDEN, ICEBERG (FIX Tag 18) Layer 5: OCO, TP_SL (exchange-specific) action_menu.py: REDUCE_ONLY_MARKET → MARKET (reduce_only field handles it) All 1126 tests pass. Fully wired and backward compatible. --- MALKHUT/malkhut/planner/action_menu.py | 2 +- MALKHUT/malkhut/state.py | 32 ++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/MALKHUT/malkhut/planner/action_menu.py b/MALKHUT/malkhut/planner/action_menu.py index 0dddc53..791ffd9 100644 --- a/MALKHUT/malkhut/planner/action_menu.py +++ b/MALKHUT/malkhut/planner/action_menu.py @@ -121,7 +121,7 @@ def build_our_actions( if _path_risk_says_exit(state, params): actions.append(FulfilmentAction( kind=ActionKind.FULL_EXIT, side=_exit_side_for_position(state), - order_type=OrderType.REDUCE_ONLY_MARKET, price_ticks_from_best=0, + order_type=OrderType.MARKET, price_ticks_from_best=0, qty_fraction=1.0, ttl_ms=0, reduce_only=True, metadata={"reason": "path_risk_exit"}, )) diff --git a/MALKHUT/malkhut/state.py b/MALKHUT/malkhut/state.py index bc8d992..4929ca7 100644 --- a/MALKHUT/malkhut/state.py +++ b/MALKHUT/malkhut/state.py @@ -24,13 +24,37 @@ class Side(str, Enum): class OrderType(str, Enum): - LIMIT = "LIMIT" + """Standardized order types — FIX/CCXT-aligned, multi-exchange. + + Five-layer taxonomy (values are uppercase for backward compatibility): + Layer 1: Base types (FIX Tag 40) — MARKET, LIMIT + Layer 2: Time-in-force (FIX Tag 59) — GTC, IOC, FOK, GTD + Layer 3: Conditional (FIX Tag 3/4+MIT) — STOP_MARKET, STOP_LIMIT, etc. + Layer 4: Instructions (FIX Tag 18) — POST_ONLY, REDUCE_ONLY, etc. + Layer 5: Compound (exchange-specific) — OCO, TP_SL + """ + # Layer 1: Base types (FIX Tag 40) MARKET = "MARKET" - POST_ONLY = "POST_ONLY" + LIMIT = "LIMIT" + # Layer 2: Time-in-force (FIX Tag 59) + GTC = "GTC" IOC = "IOC" FOK = "FOK" - REDUCE_ONLY_LIMIT = "REDUCE_ONLY_LIMIT" - REDUCE_ONLY_MARKET = "REDUCE_ONLY_MARKET" + GTD = "GTD" + # Layer 3: Conditional (FIX Tag 3/4 + MIT) + STOP_MARKET = "STOP_MARKET" + STOP_LIMIT = "STOP_LIMIT" + TRIGGER_MARKET = "TRIGGER_MARKET" + TRIGGER_LIMIT = "TRIGGER_LIMIT" + TRAILING_STOP = "TRAILING_STOP" + # Layer 4: Instructions (FIX Tag 18) + POST_ONLY = "POST_ONLY" + REDUCE_ONLY = "REDUCE_ONLY" + HIDDEN = "HIDDEN" + ICEBERG = "ICEBERG" + # Layer 5: Compound (exchange-specific) + OCO = "OCO" + TP_SL = "TP_SL" class ActionKind(str, Enum):