Per ogni servizio: ruolo, status rilevato automaticamente, decisioni di design e task. Tutto editabile dal web.
Sorgenti dati: Binance WS+REST, FRED, DefiLlama, Alternative.me, Coingecko. Nessuna persistenza propria.
systemd hydra-v6-data-source: inactive · sorgente: assente
async for msg in binance_ws.stream(klines_universe): # real-time
queue.put(normalize_kline(msg))
every 60s: # REST pollers
for src in [funding, open_interest, long_short]:
for r in fetch(src): queue.put(normalize(r))
every 300s:
for src in [fear_greed, dxy, stablecoin_supply]:
for r in fetch(src): queue.put(normalize(r))
while batch := queue.drain(max=500):
server_log.upsert(batch) # delega la persistenza
Binance WS+REST, FRED, DefiLlama, Alternative.me, Coingecko. Il servizio normalizza e inoltra; la persistenza e' delegata a SERVER LOG (PostgreSQL).
Motivazione: Separazione netta ingest/storage; evita duplicazione dati.
creata 28/06/2026 · modificata 28/06/2026 18:10
Implementare il collector v6 e poi fermare i servizi v4 (hydra-ws-collector, hydra-candle-aggregator, hydra-fingerprint).
PostgreSQL append-only, retention 180gg piena, audit trail. 17 tabelle create.
systemd hydra-v6-server-log: inactive · sorgente: assente
def upsert(batch):
for table, rows in partition_by_table(batch).items():
execute_values(
f"INSERT INTO {table} (...) VALUES %s "
"ON CONFLICT (pk) DO UPDATE SET ...", rows, page_size=1000)
daily 04:00: # retention 180gg
for t in candle_tables:
DELETE FROM t WHERE open_time < now_ms() - days(180)
DB hydra_v6 append-only come audit trail. 17 tabelle gia' create. Retention 180gg a regime.
Motivazione: Tracciabilita' completa e riproducibilita' delle decisioni.
creata 28/06/2026 · modificata 28/06/2026 18:10
Definire e schedulare il job di retention append-only a 180 giorni.
5 detector (pump, dump, volume_spike, funding_extreme, liquidity_drop). Frequenza 1min su tutti i 200+ asset.
systemd hydra-v6-live-scanner: inactive · sorgente: assente
every 60s:
for sym in universe: # 200+ asset
c = candles_1m.last_n(sym, 60)
if ret(c, 5m) > PUMP_PCT: emit("pump", sym, sev="warning")
if ret(c, 5m) < -DUMP_PCT: emit("dump", sym, sev="warning")
if zscore(c.volume, 60) > VOL_Z: emit("volume_spike", sym)
if funding_z21(sym) >= FUND_Q: emit("funding_extreme", sym)
if liquidity_drop(sym) > LIQ_PCT: emit("liquidity_drop", sym)
Detector: pump, dump, volume_spike, funding_extreme, liquidity_drop. Frequenza 1 minuto su tutti i 200+ asset. Output in live_events.
Motivazione: Copertura ampia e reattiva su eventi di mercato.
creata 28/06/2026 · modificata 28/06/2026 18:10
Definire il sottoinsieme di asset su cui far girare i detector.
creata 28/06/2026 · modificata 28/06/2026 18:10
Filtrare lo universe di asset su cui far girare i 5 detector del LIVE SCANNER.
30 indicatori Tier 1+2+3 (RSI, EMA, Returns, ATR, Vol, Volume, Momentum, Bollinger, VWAP, Beta, Funding+z21, Funding slope, OI). TF 1h/4h/1d.
systemd hydra-v6-server-stat: inactive · sorgente: assente
every 1h:
for sym in universe:
for tf in [1h, 4h, 1d]:
c = candles[tf].last_n(sym, 250)
feats = {
"rsi14": rsi(c,14), "ema": ema(c,[9,21,50,200]),
"atr14": atr(c,14), "ret": returns(c),
"boll": bollinger(c,20,2), "vwap": vwap(c),
"beta": beta(c, btc), "funding_z21": z(funding(sym),21),
"funding_slope": slope(funding(sym)), "oi": oi(sym),
}
feature_store.put(sym, tf, feats)
RSI, EMA 9/21/50/200, Returns, ATR, Vol, Volume, Momentum, Bollinger, VWAP, Beta, Funding+z21, Funding slope, OI. Timeframes 1h/4h/1d. Skip MACD/Stochastic/Ichimoku/Fibonacci.
Motivazione: Indicatori con edge potenziale; esclusi quelli ridondanti/ritardati.
creata 28/06/2026 · modificata 28/06/2026 18:10
Implementare SERVER STAT: 30 indicatori Tier 1+2+3 su 1h/4h/1d.
15 moduli (Cat A-E). Score 0-1 continuo. Frequenza 1h. Auto-validazione pesi mensile.
systemd hydra-v6-server-analyz: inactive · sorgente: assente
| Cat | Modulo | Peso | Logica | Finding |
|---|---|---|---|---|
| A | Funding Q90 Defensive | 3.0 | Funding z21 >= Q90 -> posizione defensive/short ~7gg | #11: ret medio -4.59% a 7gg, walk-forward 10/10 |
| B | Funding x Regime | 1.0 | Funding condizionato al regime di mercato | candidato (da validare) |
| B | DXY in Bear | 1.0 | Forza del DXY come filtro nei regimi bear | candidato (da validare) |
| B | Volatility filtering | 1.0 | Filtra/scala i segnali per regime di volatilita' | candidato (da validare) |
| C | Momentum 30d | 0.3 | Momentum classico a 30 giorni | classico, edge debole |
| C | Mean reversion RSI | 0.3 | RSI < 35 -> reversione attesa | classico, edge debole |
| C | Trend EMA | 0.3 | Cross / pendenza delle EMA | classico, edge debole |
| D | Regime detector | contesto | Classifica bull / bear / range | feature di contesto |
| D | Volatility regime | contesto | Classifica volatilita' alta / bassa | feature di contesto |
| D | Drawdown current | contesto | Drawdown corrente dell'asset | feature di contesto |
| E | TimesFM | 0.5-1.5 | Foundation model di forecasting time-series | ML |
| E | Chronos | 0.5-1.5 | Foundation model di forecasting time-series | ML |
| E | HMM | 0.5-1.5 | Hidden Markov Model per regime | ML |
| E | Hurst | 0.5-1.5 | Esponente di Hurst (persistenza/mean-reversion) | ML |
| E | LSTM | 0.5-1.5 | Rete ricorrente per forecasting | ML |
every 1h:
for sym in universe:
scores = {m.name: m.evaluate(sym, features[sym]) for m in MODULES} # 15 moduli
agg = sum(scores[m.name]*WEIGHT[m.cat] for m in MODULES) / sum_weights
direction = "short" if defensive_edge(sym) else "long" # edge Funding Q90
analyz_signals.insert(sym, signal_type=top(scores),
direction=direction, score=agg, payload=scores)
monthly:
WEIGHT = walk_forward_revalidate(history) # auto-validazione pesi
Cat A Edge (peso 3.0): Funding Q90 Defensive. Cat B Candidati (1.0): Funding x Regime, DXY in Bear, Volatility filtering. Cat C Classici (0.3): Momentum 30d, Mean reversion RSI, Trend EMA. Cat D Contesto: Regime detector, Vol regime, Drawdown. Cat E ML (0.5-1.5): TimesFM, Chronos, HMM, Hurst, LSTM. Freq 1h.
Motivazione: Pesi proporzionali alla forza dell'edge; auto-validazione mensile.
creata 28/06/2026 · modificata 28/06/2026 18:10
Funding Rate z21 >= Q90 -> return medio -4.59% a 7 giorni. Walk-forward 10/10 asset robusti. Unico driver sopravvissuto su 4 candidati.
Motivazione: Edge statisticamente robusto, base della Cat A peso 3.0.
creata 28/06/2026 · modificata 28/06/2026 18:10
Implementare il primo modulo analyzer (edge Cat A), poi i moduli 2-15 (Fase 4).
Decisore Pure Rule-Based (no Claude API). Execution interno separato. Universe 200+ token v5.
systemd hydra-v6-agent-ai: inactive · sorgente: assente
on new analyz_signals:
for sig in analyz_signals.fresh():
if not passes_filters(sig.symbol): continue # universe filter
if sig.score >= ENTRY_TH and not open(sig.symbol):
size = position_size(equity, RISK_PCT)
decisions.insert("buy", sig); paper_open(sig.symbol, size)
for pos in paper_positions.open():
if exit_rule(pos): # TP / SL / holding max / decay score
decisions.insert("close", pos, reason=exit_reason(pos))
paper_close(pos)
Decisore deterministico rule-based. Execution interno separato. Universe 200+ token v5. Filtri: vol_24h>1M, eta'>30gg, storia>60gg, spread<0.5%, blacklist RNDR/FET.
Motivazione: Determinismo e zero costi API ricorrenti (lezione ORACLE v5).
creata 28/06/2026 · modificata 28/06/2026 18:10
Da definire: condizioni precise di entry/exit, holding period massimo, logica di position sizing.
creata 28/06/2026 · modificata 28/06/2026 18:10
Definire entry/exit, holding period, position sizing; portare in paper mode.
Auditor investigativo. Health 5min. Analisi perdite per-trade. Opportunita' giornaliera. Nessuna notifica.
systemd hydra-v6-server-quality: inactive · sorgente: assente
every 5min: # health
h = collect_heartbeats()
if stale(h): quality_reports.insert("health", status="critical", details=h)
daily:
for trade in closed_trades(yesterday):
attr = attribute_pnl(trade) # perche' ha perso/guadagnato
quality_reports.insert("loss_analysis", scope=trade.id, details=attr)
missed = scan_missed_opportunities()
quality_reports.insert("opportunity", details=missed)
Health check 5min. Analisi perdite per-trade. Opportunita' giornaliera. Feedback solo via report, NESSUNA notifica push.
Motivazione: Strumento di analisi, non di alerting; evita rumore operativo.
creata 28/06/2026 · modificata 28/06/2026 18:10
Da definire il benchmark contro cui valutare le performance.
creata 28/06/2026 · modificata 28/06/2026 18:10
Scegliere il benchmark di confronto per valutare le performance.
Container Docker isolato. 8 trigger. Market sell. Restart manuale.
systemd hydra-v6-emergency: inactive · sorgente: assente
loop: # container isolato
if now - last_heartbeat > 5min: trip("heartbeat")
if drawdown() >= 0.20: trip("drawdown_20")
if daily_loss() >= 0.07: trip("daily_loss_7")
if max_position_pct() >= 0.10: trip("position_10")
if orders_per_min() > LIMIT: trip("order_rate")
if btc_move_10min() <= -0.05: trip("flash_crash_btc")
if exchange_error(): trip("exchange_error")
if quality_critical(): trip("quality_critical")
def trip(reason):
market_sell_all(); emergency_actions.insert(reason); halt() # restart MANUALE
Container Docker isolato. 8 trigger: heartbeat 5min, drawdown 20%, daily loss 7%, position max 10%, orders/min, flash crash BTC -5%/10min, exchange error, QUALITY critical. Azione: market sell. Restart manuale.
Motivazione: Isolamento per resilienza; kill-switch indipendente dal core.
creata 28/06/2026 · modificata 28/06/2026 18:10
Le 8 soglie trigger vanno affinate con dati reali.
creata 28/06/2026 · modificata 28/06/2026 18:10
Docker isolato + affinamento delle 8 soglie trigger.