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 · "
|
print(f"\n {n_ok}/{len(r['protection'])} anni di sinistro superati · "
|
||||||
f"fallimenti consecutivi in corso: {r['consec_fail']}")
|
f"fallimenti consecutivi in corso: {r['consec_fail']}")
|
||||||
if r["alerts"]:
|
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"])})
|
{f"alert {i+1}": a for i, a in enumerate(r["alerts"])})
|
||||||
for a in r["alerts"]:
|
for a in r["alerts"]:
|
||||||
print(f" ALERT: {a}")
|
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).
|
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
|
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).
|
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 [
|
return [
|
||||||
tp01_sleeve(weight=0.75),
|
tp01_sleeve(weight=B.W_TP01),
|
||||||
skyhook_sleeve(weight=0.25),
|
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
|
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.
|
# Costruzione ordine: side, reduce_only, flip, close, soglia minima.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user