feat: paper trading live su Deribit testnet — squeeze+ML ibrida
Sistema completo: client Cerbero MCP, signal engine (squeeze + GBM), paper trader con gestione posizioni, stop loss, log JSONL. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
"""Mostra lo stato del paper trader."""
|
||||
from __future__ import annotations
|
||||
import sys
|
||||
sys.path.insert(0, ".")
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
from src.live.cerbero_client import CerberoClient
|
||||
|
||||
LOG_DIR = Path("data/paper_trades")
|
||||
|
||||
print("=" * 50)
|
||||
print(" PAPER TRADER STATUS")
|
||||
print("=" * 50)
|
||||
|
||||
# Status file
|
||||
status_path = LOG_DIR / "status.json"
|
||||
if status_path.exists():
|
||||
with open(status_path) as f:
|
||||
status = json.load(f)
|
||||
print(f"\n In posizione: {status['in_position']}")
|
||||
if status["in_position"]:
|
||||
print(f" Direzione: {status['direction']}")
|
||||
print(f" Entry price: {status['entry_price']}")
|
||||
print(f" Entry time: {status['entry_time']}")
|
||||
print(f" Barre tenute: {status['bars_held']}")
|
||||
print(f" Ultimo update: {status['last_update']}")
|
||||
else:
|
||||
print("\n Nessun file di stato trovato.")
|
||||
|
||||
# Account
|
||||
print("\n--- ACCOUNT DERIBIT TESTNET ---")
|
||||
c = CerberoClient()
|
||||
try:
|
||||
acc = c.get_account_summary()
|
||||
print(f" Equity: {acc['equity']:.2f}")
|
||||
print(f" Balance: {acc['balance']:.2f}")
|
||||
print(f" PnL: {acc['total_pnl']:.2f}")
|
||||
except Exception as e:
|
||||
print(f" Errore: {e}")
|
||||
|
||||
# Posizioni
|
||||
try:
|
||||
pos = c.get_positions()
|
||||
print(f"\n Posizioni aperte: {len(pos)}")
|
||||
for p in pos:
|
||||
print(f" {p}")
|
||||
except Exception as e:
|
||||
print(f" Errore: {e}")
|
||||
|
||||
# Ultimi log
|
||||
print("\n--- ULTIMI LOG ---")
|
||||
log_files = sorted(LOG_DIR.glob("trades_*.jsonl"))
|
||||
if log_files:
|
||||
with open(log_files[-1]) as f:
|
||||
lines = f.readlines()
|
||||
for line in lines[-10:]:
|
||||
entry = json.loads(line)
|
||||
print(f" [{entry['timestamp'][:19]}] {entry['event']}")
|
||||
else:
|
||||
print(" Nessun log trovato.")
|
||||
|
||||
# Statistiche trade
|
||||
all_trades = []
|
||||
for lf in log_files:
|
||||
with open(lf) as f:
|
||||
for line in f:
|
||||
entry = json.loads(line)
|
||||
if entry["event"] == "CLOSED":
|
||||
all_trades.append(entry)
|
||||
|
||||
if all_trades:
|
||||
wins = sum(1 for t in all_trades if t.get("pnl_pct", 0) > 0)
|
||||
total = len(all_trades)
|
||||
total_pnl = sum(t.get("pnl_pct", 0) for t in all_trades)
|
||||
print(f"\n--- STATISTICHE ---")
|
||||
print(f" Trade chiusi: {total}")
|
||||
print(f" Win rate: {wins/total*100:.0f}%")
|
||||
print(f" PnL totale: {total_pnl:.2f}%")
|
||||
Reference in New Issue
Block a user