From 829ebc7f98d4e24fd014cd2a3dd40d4ec4593ce2 Mon Sep 17 00:00:00 2001 From: "Adriano (goldrake)" Date: Sun, 27 Sep 2026 15:17:42 +0000 Subject: [PATCH] book: min_order_usd da config nel report (#35 A7) book_report costruiva l'ordine con min_usd=5.0 fisso invece di leggere min_order_usd da config/live.json, come fa gia' scripts/live/book_execute.py (default 5.0 se assente). Oggi config = 5, nessun cambio di comportamento. Co-Authored-By: Claude Sonnet 5 --- src/live/book.py | 3 ++- tests/test_leva_tetto.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/live/book.py b/src/live/book.py index 05d8fa4..69b742e 100644 --- a/src/live/book.py +++ b/src/live/book.py @@ -305,6 +305,7 @@ def book_report(offline: bool = False, equity_override: float | None = None, live_feed: se True usa il feed 5m fresco effimero per SKH01 (src/live/livefeed.fresh_5m) -> segnale 230m all'ultima barra chiusa, per l'esecuzione reale. Default False (feed certificato, deterministico: dashboard/test). TP01 resta sul certificato (รจ giornaliero).""" + cfg = json.loads(CONFIG.read_text()) if CONFIG.exists() else {} sh = shadow_report(offline=offline, equity_override=equity_override) equity = sh["equity"] # registra l'equity reale quando e' leggibile: e' cio' che rende sicuro il cap di @@ -351,7 +352,7 @@ def book_report(offline: bool = False, equity_override: float | None = None, net = book_net_target(tp_frac, sign, equity, cap, scala=scala) cur = float(a_rec["position_usd"]) mark = a_rec["mark"] - order = build_book_order(inst, net, cur, mark, min_usd=5.0) + order = build_book_order(inst, net, cur, mark, min_usd=float(cfg.get("min_order_usd", 5.0))) if order: orders.append(order) assets.append(dict( diff --git a/tests/test_leva_tetto.py b/tests/test_leva_tetto.py index ecaaebe..5e5154a 100644 --- a/tests/test_leva_tetto.py +++ b/tests/test_leva_tetto.py @@ -126,3 +126,15 @@ def test_T6_regola_leva_margine_positivo_a_scala_1_25(db, monkeypatch, tmp_path) r = J.lettura(db, _voce(libro=lb, pnl=_pnl())) riga = next(x for x in r if x["id"] == "leva") assert "1.25x" in riga["testo"] and "margine 0.05x" in riga["testo"] + + +# ---------------------------------------------------------------- A7 (#35): min_order_usd da config + +def test_A7_build_book_order_rispetta_min_usd_di_config(): + """book_report legge min_order_usd da config (default 5.0 se assente, come book_execute.py). + Qui si verifica direttamente build_book_order, che e' il punto dove il valore viene usato: + con min_usd=20 un delta di $10 non genera ordine, con min_usd=5 (il default di oggi) si.""" + order_stretto = B.build_book_order("BTC_USDC-PERPETUAL", 100.0, 90.0, 50000.0, min_usd=20.0) + assert order_stretto is None # |delta|=10 < 20: sotto soglia col tetto alzato + order_default = B.build_book_order("BTC_USDC-PERPETUAL", 100.0, 90.0, 50000.0, min_usd=5.0) + assert order_default is not None # |delta|=10 >= 5: lo stesso caso, oggi, genera ordine