sleeves+edge_watch: pesi derivati da book (import locale), titolo kill corretto (#35 B12)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -140,7 +140,7 @@ def main() -> int:
|
||||
print(f"\n {n_ok}/{len(r['protection'])} anni di sinistro superati · "
|
||||
f"fallimenti consecutivi in corso: {r['consec_fail']}")
|
||||
if r["alerts"]:
|
||||
notify("🚨 EDGE WATCH — criterio di kill scattato sul book LIVE",
|
||||
notify("🚨 EDGE WATCH — criterio di kill scattato sul book (serie backtest dei sleeve, non il P&L eseguito)",
|
||||
{f"alert {i+1}": a for i, a in enumerate(r["alerts"])})
|
||||
for a in r["alerts"]:
|
||||
print(f" ALERT: {a}")
|
||||
|
||||
@@ -400,8 +400,14 @@ def deribit_book_sleeves() -> list[Sleeve]:
|
||||
e VRP01 (opzioni modellate). FULL Sharpe ~1.78 / HOLD ~1.17 / DD ~9% (research; SKH01 daily-step).
|
||||
Pensato per il deploy reale a basso capitale: stesso conto, stesso feed, ribilanciamento
|
||||
periodico (vedi src.portfolio.portfolio.rebalance_sim + scripts/portfolio/run_deribit_book.py).
|
||||
TP01 e' gia' armato live; SKH01 e' il candidato 2a gamba (da validare codice d'esecuzione)."""
|
||||
TP01 e' gia' armato live; SKH01 e' il candidato 2a gamba (da validare codice d'esecuzione).
|
||||
|
||||
I pesi si DERIVANO da src.live.book (P1): due letterali qui erano una seconda dichiarazione,
|
||||
libera di divergere dal book vero (#35 B12). Import locale: book importa questo modulo
|
||||
(_skyhook_positions) a livello di modulo -> un import in testa qui creerebbe un ciclo (come
|
||||
fa usde.py con book)."""
|
||||
from src.live import book as B # lazy: vedi nota sul ciclo qui sopra
|
||||
return [
|
||||
tp01_sleeve(weight=0.75),
|
||||
skyhook_sleeve(weight=0.25),
|
||||
tp01_sleeve(weight=B.W_TP01),
|
||||
skyhook_sleeve(weight=B.W_SKH),
|
||||
]
|
||||
|
||||
@@ -150,6 +150,27 @@ def test_weights_match_backtest_sleeves():
|
||||
assert abs((W_TP01 + W_SKH) - 1.0) < 1e-12
|
||||
|
||||
|
||||
def test_deribit_book_sleeves_deriva_i_pesi_da_book_non_li_ridichiara():
|
||||
"""#35 B12 — P1: stesso pattern di test_r0909_libro_nei_crolli.test_P1_i_pesi_sono_QUELLI_del_book_live_non_una_copia.
|
||||
`test_weights_match_backtest_sleeves` sopra passerebbe anche con due letterali per coincidenza
|
||||
di valore (0.75/0.25 riscritti a mano): qui si verifica l'IDENTITA' con B.W_TP01/B.W_SKH e
|
||||
che il letterale non sia piu' nella fonte di `deribit_book_sleeves`."""
|
||||
import inspect
|
||||
import re
|
||||
|
||||
import src.live.book as B
|
||||
from src.portfolio.sleeves import deribit_book_sleeves
|
||||
|
||||
pesi = {s.name.split("_")[0]: s.weight for s in deribit_book_sleeves()}
|
||||
assert pesi["TP01"] is B.W_TP01 or pesi["TP01"] == B.W_TP01
|
||||
assert pesi["SKH01"] is B.W_SKH or pesi["SKH01"] == B.W_SKH
|
||||
|
||||
src = inspect.getsource(deribit_book_sleeves)
|
||||
assert "from src.live import book" in src, "i pesi devono derivare da src.live.book (P1)"
|
||||
assert not re.search(r"weight\s*=\s*0\.75", src), "peso TP01 ancora cablato"
|
||||
assert not re.search(r"weight\s*=\s*0\.25", src), "peso SKH01 ancora cablato"
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Costruzione ordine: side, reduce_only, flip, close, soglia minima.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user