Files
Multi_Swarm_Coevolutive/poc_trading_swarm.md
T
Adriano eb6b52ff04 Initial commit: framework concettuale + design strategico PoC
Stato iniziale del progetto Multi_Swarm_Coevolutive:

- 00_documento_zero.md: framework concettuale (Renaissance → swarm
  co-evolutivo LLM, tre layer cognitivi, decisione strategica A/B/C).
- coevolutive_swarm_system.md: design Filone A (sistema completo,
  co-evoluzione 4 popolazioni, 12-18 mesi).
- poc_trading_swarm.md: design Filone B (PoC trading focalizzato,
  3-4 mesi, scope semplificato).
- docs/superpowers/specs/2026-05-09-decisione-strategica-design.md:
  decisione strategica B3 (PoC trading incrementale a 3 fasi con
  gate go/no-go), prodotta tramite skill brainstorming.
- .gitignore: pattern Python, editor, secrets, artefatti runtime
  (runs.db, series/, dataset binari) non versionati.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:19:55 +02:00

29 KiB
Raw Blame History

PoC Trading Swarm — Validazione Strategica

Autore: Adriano Dal Pastro Data: Maggio 2026 Status: Design document — pre-implementazione Versione: 0.1 Documento correlato: coevolutive_swarm_system.md (sistema completo)


1. Razionale della deviazione

Invece di committere 12-18 mesi al sistema co-evolutivo completo descritto nel documento principale, partiamo con un proof-of-concept strategico focalizzato su trading, con architettura semplificata, per validare empiricamente se l'idea di base funziona prima di investire nel sistema full.

Cosa il PoC valida:

  1. Lo swarm produce strategie che superano il null hypothesis statistico (Deflated Sharpe Ratio significativo)?
  2. Le strategie sono qualitativamente diverse o cloni leggeri?
  3. Le strategie sopravvivono al regime change out-of-sample?
  4. Quanto del successo viene da modelli costosi vs economici (ablation multi-tier)?
  5. Lo swarm batte una baseline statistica tradizionale (random forest + feature engineering)?

Tempo target: 3-4 mesi a impegno significativo. Budget LLM target: $2-4K.

Decisione post-PoC:

  • Se passa tutti i 5 test → procedere con sistema completo (documento principale)
  • Se passa parzialmente → iterare sul PoC, identificare bottleneck
  • Se non passa → riformulare. Forse l'edge degli LLM agents è in altri domini, non in pattern discovery numerico

2. Architettura semplificata

2.1 Cosa cambia rispetto al sistema completo

Aspetto Sistema completo PoC
Popolazioni evolventi 4 (3 layer + protocollo) 1 (solo Hypothesis)
Hypothesis layer Evolve via GA Evolve via GA (K=50)
Falsification layer Evolve via GA Hand-crafted, 1 agente fisso
Adversarial layer Evolve via GA Hand-crafted, 1 agente fisso
Protocollo Co-evolve Fisso, designed manualmente
Domini di applicazione Multipli Solo trading BTC/ETH
Idiom emergence No
Speciation Versione semplificata (clustering base)
Tier multi-model Sì (S/A/B/C/D) Sì (semplificato a B/C principalmente)
Human-in-the-loop Strutturato ogni 20 gen Review settimanale informale

Filosofia: massimizzare apprendimento, minimizzare complessità implementativa.

2.2 Schema architetturale

                ┌───────────────────────────────────┐
                │   PROTOCOLLO FISSO (S-expression) │
                │   ~15 verbi designed manualmente  │
                └─────────────┬─────────────────────┘
                              │
                              ▼
   ┌──────────────────────┐
   │  HYPOTHESIS SWARM    │   ← UNICO layer che evolve
   │  K=50 agenti         │
   │  Tier mix: B/C       │
   │  GA: tournament,     │
   │  speciation base,    │
   │  novelty bonus       │
   └──────────┬───────────┘
              │ ipotesi formalizzate
              ▼
   ┌──────────────────────┐
   │ FALSIFICATION (hand) │   ← FISSO
   │ 1 agente Tier-B      │
   │ Funzione: traduce    │
   │ ipotesi in regole +  │
   │ chiama backtest +    │
   │ valuta con DSR       │
   └──────────┬───────────┘
              │ strategie validate
              ▼
   ┌──────────────────────┐
   │ ADVERSARIAL (hand)   │   ← FISSO
   │ 1 agente Tier-A      │
   │ Funzione: red team   │
   │ con checklist statica│
   │ (lookahead, regime,  │
   │ crowding)            │
   └──────────┬───────────┘
              │ strategie sopravvissute
              ▼
   ┌──────────────────────┐
   │   FITNESS LOOP       │
   │   Update agent_fitness│
   │   Selezione + GA     │
   └──────────────────────┘
              │
              ▼
        Generazione N+1

3. Le quattro trappole del backtesting su crypto

Queste sono le killer specifiche del dominio. Vanno mitigate by design, non come afterthought.

3.1 Look-ahead bias subdolo

Problema: molti dati "storici" su crypto sono in realtà revisionati ex-post.

  • Funding rates: spesso medie giornaliere ricalcolate, non valori real-time storici
  • On-chain metrics (MVRV, NUPL, SOPR): formule che cambiano nel tempo, applicate retroattivamente
  • Liste top-N token: survivorship bias massiccio
  • Sentiment storico: ricostruzioni post-hoc, non disponibili in tempo reale a quei momenti

Mitigazione:

  • Ogni feature deve avere un campo availability_lag: quante ore dopo il timestamp T la feature era effettivamente disponibile
  • Backtest engine rifiuta di usare feature prima del lag
  • Documentazione esplicita di come/quando ogni feature è stata raccolta
  • Preferire fonti che pubblicano archivi real-time (Kaiko, Tardis.dev, Amberdata) a quelle ricostruite

3.2 Multiple testing su scala industriale

Problema: con 10000 strategie testate, ~100 superano p<0.01 per puro caso. Senza correzione, il sistema produce sempre "vincitori" illusori.

Mitigazione:

  • Deflated Sharpe Ratio (DSR) come fitness primaria, non Sharpe naive
  • Tracking del numero totale di strategie testate fino a generazione N (impatta DSR)
  • Bonferroni-style correction quando si seleziona "top strategies" da reporting
  • Hold-out set finale mai toccato durante evoluzione per validation finale

3.3 Regime dependency

Problema: BTC/ETH hanno regimi macro molto diversi. Una strategia che funziona 2018-2024 può essere semplicemente "long-only momentum con leva". OOS 2026 fallisce.

Periodi di regime distintivi:

  • 2017: bull mania retail (escluso dal dataset, troppo anomalo)
  • 2018-2019: bear lungo
  • 2020-2021: DeFi summer + bull istituzionale + COVID
  • 2022: collapse cycle (LUNA, FTX, Celsius)
  • 2023-2024: ripresa + ETF spot
  • 2025-2026: post-ETF, regime nuovo

Mitigazione:

  • Walk-forward con purged cross-validation (López de Prado 2018)
  • Train su finestra mobile, test su successiva, gap di purging in mezzo per evitare leakage
  • Fitness penalizza strategie che funzionano solo su 1-2 regimi
  • OOS finale obbligatoriamente su periodo diverso dal training

3.4 Backtest ≠ live execution

Problema: anche backtest perfetto ha gap col live.

  • Slippage non lineare con size (su crypto particolarmente)
  • Fees variabili (maker/taker, volume rebates)
  • Funding rate sui perp può mangiarsi l'edge
  • Liquidità evapora nei momenti che contano
  • API outages, exchange downtime

Mitigazione:

  • Modello di slippage realistico (Almgren-Chriss o simile, non costante)
  • Fees accurate (struttura tier per exchange)
  • Funding payments simulati per posizioni perp
  • Cap su size per evitare strategie che funzionano solo a $100, non a $100K

4. Dataset Specification

4.1 Coverage

  • Asset: BTC, ETH (focus iniziale)
  • Periodo: 2018-01-01 → 2025-12-31
  • Train/OOS split: train 2018-2023, OOS validation 2024, OOS final hold-out 2025
  • Frequenza base: 1-hour bars (compromesso tra granularità e gestibilità)
  • Frequenze derivate: 4h, 1d aggregate per features di lungo periodo

4.2 Feature catalog

Price/Volume (sempre disponibili real-time, lag=0):

  • OHLCV su 1h, 4h, 1d
  • Returns log su orizzonti multipli
  • Volatility realized (Garman-Klass, Parkinson, RV)
  • Volume profile, VWAP

Derivatives (lag tipicamente 5-15min):

  • Funding rates (Bybit, Binance, Hyperliquid, Deribit)
  • Open Interest (per exchange e aggregato)
  • Put/Call ratio (Deribit options)
  • Implied volatility surface (Deribit)
  • Skew, term structure
  • Liquidations (volume e direzione)

On-chain (lag tipicamente 1-6 ore per finalization):

  • Active addresses
  • Transaction count + volume
  • Exchange inflows/outflows (Glassnode-style)
  • Miner flows
  • Whale transactions (>$1M)
  • MVRV, NUPL, SOPR (con cautela su revisionalità)

Macro context (lag variabile):

  • DXY, gold, S&P 500, yield 10Y (per correlazioni)
  • Crypto-specific: BTC dominance, ETH/BTC ratio, total market cap
  • Stablecoin supply (USDT, USDC, DAI)

Sentiment (lag variabile, qualità incerta):

  • Funding rate come proxy sentiment
  • Open Interest variations come proxy speculation
  • (Skip Twitter/social per ora — qualità storica troppo bassa)

4.3 Data sources

Preferiti (real-time archivi):

  • Tardis.dev (derivatives, order book, trades — premium)
  • Kaiko (institutional grade — premium)
  • Amberdata (multi-source)

Backup gratuiti/cheap:

  • CCXT historical (OHLCV affidabile)
  • Binance/Bybit/Deribit API direct (con cautela su gap)
  • CoinGlass (derivatives aggregati, qualità media)
  • Glassnode free tier (on-chain, limitato)

Da evitare:

  • Aggregatori che non documentano metodologia
  • Source che hanno cambiato formula nel tempo senza versioning

4.4 Storage

CREATE TABLE features (
    timestamp TIMESTAMPTZ NOT NULL,
    asset TEXT NOT NULL,
    feature_name TEXT NOT NULL,
    value DOUBLE PRECISION,
    availability_lag_seconds INT NOT NULL,  -- CRITICO
    source TEXT,
    version TEXT,  -- per gestire cambi di metodologia
    PRIMARY KEY (timestamp, asset, feature_name)
);

CREATE INDEX idx_feat_time ON features (timestamp);
CREATE INDEX idx_feat_asset_name ON features (asset, feature_name);

Considerare TimescaleDB se le query temporali diventano colli di bottiglia.


5. Backtest Engine

5.1 Requisiti

  • Determinismo: stesso input, stesso output, sempre
  • Velocità: target ≥100 backtest/sec su CPU normale (per gestire 50 agenti × 10 ipotesi/gen)
  • Anti-leakage by design: rifiuta feature prima di availability_lag
  • Walk-forward integrato: non opzionale, parte del flow base
  • Realistic execution: slippage, fees, funding

5.2 Architettura

Linguaggio: Python+NumPy per il PoC. Rust+PyO3 solo se diventa bottleneck (probabile in fase scaling, non necessario per PoC).

API base:

class BacktestEngine:
    def run(self, 
            strategy: StrategySpec,
            features: FeatureSet,
            time_range: tuple[datetime, datetime],
            walk_forward_config: WFConfig) -> BacktestResult:
        ...
    
    def run_with_dsr(self,
                     strategy: StrategySpec,
                     ...) -> tuple[BacktestResult, DSRStats]:
        ...

@dataclass
class StrategySpec:
    entry_rules: list[Rule]      # condizioni di ingresso
    exit_rules: list[Rule]       # condizioni di uscita
    sizing: SizingRule           # position sizing
    instruments: list[str]       # BTC, ETH, BTC-PERP, etc.
    constraints: list[Constraint] # max leverage, max DD, etc.

@dataclass
class BacktestResult:
    pnl_curve: pd.Series
    sharpe: float
    sortino: float
    max_drawdown: float
    n_trades: int
    win_rate: float
    avg_holding_time: timedelta
    fees_paid: float
    funding_paid: float
    slippage_cost: float
    regime_breakdown: dict[str, float]  # PnL per regime

5.3 Execution model

Slippage:

slippage = base_spread + impact_factor * (size / avg_volume_5min) ^ 0.5

Calibrato su book reale per BTC/ETH. Più alto in regimi di alta volatilità.

Fees:

  • Maker: 0.02% (tipico)
  • Taker: 0.05% (tipico)
  • Tier per volume non simulato nel PoC (assume tier base)

Funding (per perp):

  • Pagato/ricevuto ogni 8 ore
  • Calcolato su mark price × position size × funding rate

Constraints automatiche:

  • Max leverage (configurabile, default 5x per il PoC)
  • Margin call simulati realisticamente
  • Liquidations forzate se margin scende sotto threshold

5.4 Walk-forward purged CV

Time:    |---------train-----------|gap|----test----|---next gap---|--next test--|
Window 1: [2018-01 ──────── 2020-06] [2020-07 ──── 2020-12]
Window 2:           [2018-07 ──── 2021-06] [2021-07 ──── 2021-12]
Window 3:                     [2019-01 ── 2022-06] [2022-07 ── 2022-12]
...
  • Training window: 30 mesi
  • Gap (purging): 1 mese (evita leakage da event horizon)
  • Test window: 6 mesi
  • Step: 6 mesi
  • Embargo: ulteriori 2 settimane post-test prima del prossimo training (López de Prado embargo)

6. Hypothesis Swarm (l'unico layer che evolve)

6.1 Genome design

@dataclass
class HypothesisAgentGenome:
    # Cognizione
    system_prompt: str
    cognitive_style: str  # "physicist", "biologist", "engineer", "trader_oldschool"...
    
    # Accesso a dati
    feature_access: list[str]  # subset delle feature disponibili
    lookback_window_days: int  # quanto storico vede
    timeframes: list[str]  # ["1h", "4h", "1d"]
    
    # Modello
    model_tier: ModelTier  # B o C principalmente nel PoC
    temperature: float  # 0.6 - 1.2
    
    # Bias di output
    strategy_type_preference: list[str]  # ["mean_reversion", "momentum", "vol_arb", "cross_asset"]
    timeframe_preference: str  # "intraday", "swing", "position"
    
    # Tracking
    parent_ids: list[UUID]
    generation: int
    species_id: UUID

6.2 Output format (nel protocollo fisso)

PROPOSE_STRATEGY(
  id=#strat_47,
  name="vol_skew_momentum",
  
  entry_conditions=[
    AND(
      (deribit_skew_25d > rolling_mean(deribit_skew_25d, 30d) + 1.5*std),
      (btc_funding_8h > 0.01),
      (eth_funding_8h > btc_funding_8h)
    )
  ],
  
  exit_conditions=[
    OR(
      (skew normalized below mean),
      (max_holding > 7d),
      (drawdown > 0.03)
    )
  ],
  
  sizing=KELLY_FRACTIONAL(fraction=0.25),
  instruments=["ETH-PERP-HL"],
  side="long",
  
  rationale="Skew elevato indica fear di puts, funding alto indica long crowding. Cross-section ETH/BTC funding suggerisce ETH outperformance attesa.",
  
  expected_regime="normal volatility, trending",
  expected_failure_modes=["crash con depinning", "regime shift improvviso"]
)

6.3 Operatori genetici

Mutazione del system prompt:

  • LLM-as-mutator (Tier-B): "Modifica questo prompt cambiando un aspetto cognitivo, mantenendo intent"
  • Probabilità: 60% per agente selezionato

Mutazione di feature_access:

  • Add/remove 1-3 feature random
  • Probabilità: 30%

Mutazione di temperature:

  • Gaussiana, σ=0.1, clip [0.3, 1.4]
  • Probabilità: 20%

Crossover:

  • 50/50 di feature_access da due parent
  • Cognitive_style preso da parent migliore
  • System prompt: crossover sezione-by-sezione (role/context/instructions/output_format)
  • Probabilità: 50% per nuova generazione (resto è mutazione)

Mutazione di model_tier:

  • Rara (5%), perché impatta costo
  • Solo C↔B, non promozioni a A senza fitness eccezionale

6.4 Selection

Tournament selection, k=5.

Speciation semplificata:

  • Embedding del system prompt via Voyage o OpenAI ada
  • K-means con K=5-7 cluster
  • Fitness sharing dentro cluster

Elitismo: top 3 agenti per cluster sopravvivono non modificati.

Immigrazione: ogni 10 generazioni, 5 nuovi agenti random vengono inseriti (anti-stagnazione).


7. Falsification Agent (hand-crafted, fisso)

7.1 Ruolo

Prende ipotesi dal swarm, le esegue su backtest engine, riporta risultati con DSR e diagnostica.

NON valuta soggettivamente. Esegue test deterministici e li interpreta.

7.2 Modello

Tier-B (Qwen Max o equivalente). Sufficiente per:

  • Tradurre ipotesi in linguaggio naturale → StrategySpec strutturato
  • Chiamare backtest engine
  • Interpretare output numerico
  • Riportare in protocollo

7.3 System prompt template

Sei un agente di falsification rigoroso. Il tuo ruolo è testare ipotesi 
trading senza pregiudizi e riportare risultati onesti.

Per ogni ipotesi ricevuta:
1. Verifica che le entry/exit conditions siano formalizzabili in regole testabili
2. Verifica che le feature richieste rispettino availability_lag
3. Chiama il backtest engine con configurazione walk-forward standard
4. Calcola Deflated Sharpe Ratio considerando il numero di test fatti finora ({total_trials})
5. Riporta breakdown per regime (bear/bull/sideways)
6. Identifica failure modes osservati nel backtest

Output strict in protocollo S-expression. Nessuna interpretazione narrativa.
Se l'ipotesi non è formalizzabile, ritorna REJECT con motivo specifico.

7.4 Output format

REPORT_BACKTEST(
  target=#strat_47,
  
  metrics=(
    sharpe=1.34,
    deflated_sharpe=0.87,
    p_value=0.04,
    max_drawdown=0.18,
    n_trades=143,
    avg_holding_h=42
  ),
  
  regime_performance=(
    bear_2018=0.42,
    bull_2020=2.1,
    crash_2022=-0.85,
    recovery_2023=1.1
  ),
  
  warnings=[
    "Performance dominated by 2020-2021 regime",
    "DSR significant but multiple testing burden high (8400 strategies tested)"
  ],
  
  verdict=PASS_WITH_WARNINGS  // PASS / FAIL / PASS_WITH_WARNINGS
)

8. Adversarial Agent (hand-crafted, fisso)

8.1 Ruolo

Per ogni strategia che passa Falsification, applica una checklist statica di attacchi epistemici.

Nel PoC NON evolve. Ha vocabolario fisso di attacchi noti dalla letteratura (López de Prado, Bailey, etc.).

8.2 Modello

Tier-A (Sonnet). Qui il reasoning conta — riconoscere lookahead bias subtle richiede capacità.

8.3 Checklist di attacchi

1. Lookahead bias check
   - Tutte le feature usate rispettano availability_lag?
   - Qualche feature è "future-derived" subdolamente?

2. Survivorship bias check
   - La strategia usa universo di asset dinamico?
   - Filtra solo asset sopravvissuti?

3. Regime dependency check
   - Performance concentrata in 1-2 regimi specifici?
   - Cosa succede se rimuovi il regime migliore?

4. Multiple testing severity
   - DSR resta significativo dopo Bonferroni stretto?
   - Confronto con random strategy baseline

5. Crowding plausibility
   - La logica è "ovvia"? Probabilmente già crowded
   - Edge size ragionevole o sospettosamente alto?

6. Implementation friction
   - Slippage assumption realistica per la size?
   - Funding payments inclusi correttamente?
   - Trade frequency compatibile con execution reale?

7. Feature stability
   - Le feature critiche hanno stessa metodologia in tutto il periodo?
   - Source provider ha cambiato formula?

8. Statistical robustness
   - Sharpe sensibile a rimozione top 5% trade?
   - Performance robusta a perturbazioni piccole nei parametri?

8.4 Output

ADVERSARIAL_REVIEW(
  target=#strat_47,
  attacks_passed=[1, 2, 5, 6, 7],
  attacks_failed=[3, 4, 8],
  
  critical_concerns=[
    CONCERN(
      type=regime_dependency,
      severity=high,
      detail="60% of PnL from 2020-2021 bull regime. Removing it gives Sharpe 0.4."
    ),
    CONCERN(
      type=multiple_testing,
      severity=medium,
      detail="DSR significant but only marginally (p=0.04). With 8400 trials, expect ~336 false positives at this level."
    )
  ],
  
  verdict=REJECT  // ACCEPT / ACCEPT_CONDITIONAL / REJECT
)

9. Fitness Function

9.1 Agent fitness (per Hypothesis swarm)

def agent_fitness(agent: HypothesisAgentGenome,
                  episodes: list[Episode]) -> float:
    
    # Quality of contributions
    accepted_strats = [e for e in episodes 
                       if e.adversarial_verdict == "ACCEPT"]
    conditional_strats = [e for e in episodes
                          if e.adversarial_verdict == "ACCEPT_CONDITIONAL"]
    
    quality_score = (
        len(accepted_strats) * 1.0
        + len(conditional_strats) * 0.3
    )
    
    # Average DSR of accepted strategies
    avg_dsr = np.mean([e.dsr for e in accepted_strats]) if accepted_strats else 0
    
    # Cost penalty (proporzionale al tier usato)
    cost_per_episode = TIER_COST[agent.model_tier] * agent.avg_tokens_per_episode
    cost_penalty = cost_per_episode * COST_PENALTY_LAMBDA
    
    # Novelty bonus (semantica delle strategie prodotte)
    novelty_score = compute_novelty(agent, all_agents_in_generation)
    
    # Diversity bonus (strategie diverse, non cloni)
    diversity_score = compute_internal_diversity(agent.strategies)
    
    return (
        quality_score
        + avg_dsr * DSR_WEIGHT
        + novelty_score * NOVELTY_WEIGHT
        + diversity_score * DIVERSITY_WEIGHT
        - cost_penalty
    )

9.2 Pesi iniziali (da calibrare empiricamente)

DSR_WEIGHT = 2.0          # peso forte: vogliamo edge reale
NOVELTY_WEIGHT = 0.5      # bonus moderato per esplorazione
DIVERSITY_WEIGHT = 0.3    # leggero, evita cloni
COST_PENALTY_LAMBDA = 0.1 # da calibrare in base a budget

9.3 Anti-gaming

  • Tracking globale del numero di test fatti per DSR correction
  • Cap su quality_score per evitare gaming via spam di ipotesi banali
  • Adversarial feedback va in fitness (strategie REJECTED penalizzano, non solo non bonificano)
  • Periodic audit umano: ogni 10 generazioni rivedere top 5 strategies, marcare "spurious" se gaming

10. Baseline non-LLM (anti-illusion check)

Critico: il PoC deve includere una baseline statistica tradizionale.

10.1 Specifica baseline

  • Metodo: Random Forest + feature engineering manuale
  • Features: stesso pool del swarm
  • Target: returns N-bar future (predizione regression o classification)
  • Validation: stesso walk-forward purged CV
  • Output: trade signals → backtest engine identico

10.2 Confronto

Metrica Baseline RF Swarm LLM
Best DSR found ? ?
Avg DSR top-10 strategies ? ?
N strategies passing adv. ? ?
Diversity (semantic) ? ?
Total cost ~$50 ~$3K

Interpretazione:

  • Se Swarm batte significativamente Baseline → architettura LLM sta aggiungendo valore
  • Se Swarm pareggia → costo non giustificato per discovery numerica pura
  • Se Swarm perde → l'edge degli LLM agents è altrove (creatività su task non numerici, integrazione semi-strutturata)

Punto importante: anche se Swarm perde su pattern discovery numerico, NON significa che il sistema co-evolutivo completo è inutile. Significa che la value-add è in altri domini (ipotesi macro, integrazione narrative, generalizzazione cross-domain). È informazione preziosa.


11. Roadmap Implementativa (3-4 mesi)

Settimane 1-3: Setup & Dataset

  • Setup repo, environment, dependencies
  • Data sourcing: identificare provider, sottoscrivere se necessario
  • Data ingestion: pipeline dati storici BTC/ETH 2018-2025
  • Storage schema (PostgreSQL/TimescaleDB)
  • Audit di availability_lag per ogni feature
  • Sanity checks: confronto cross-source per validare integrity

Deliverable: dataset completo annotato, query-able, con feature catalog.

Settimane 4-7: Backtest Engine

  • Implementazione walk-forward purged CV
  • Slippage model (Almgren-Chriss)
  • Fees + funding
  • DSR computation
  • Test di non-leakage (deliberately inject lookahead → engine deve catcharlo)
  • Performance optimization (target ≥100 backtest/sec)

Deliverable: backtest engine standalone testato. Strategie semplici (buy & hold, 50/200 SMA crossover) producono risultati noti.

Settimane 8-9: Agenti hand-crafted

  • Falsification agent (Tier-B)
  • Adversarial agent (Tier-A)
  • Protocol fisso (S-expression parser + 15 verbi)
  • Message bus auditato semplificato
  • Test end-to-end con ipotesi hand-crafted

Deliverable: pipeline agente → falsification → adversarial → verdict, funzionante end-to-end con strategie inserite manualmente.

Settimane 10-12: Hypothesis Swarm + GA

  • Population manager (50 agenti)
  • Operatori genetici (mutazione + crossover)
  • Speciation con clustering embedding
  • Fitness computation
  • Tournament selection
  • Evoluzione per 50 generazioni baseline

Deliverable: swarm che evolve, fitness che migliora over generations, output di top strategies.

Settimane 13-14: Baseline + Comparison

  • Implementazione baseline Random Forest
  • Run baseline su stesso dataset/timeframe
  • Tabella comparison
  • Analisi qualitative delle strategie prodotte da entrambi

Deliverable: documento di confronto onesto.

Settimane 15-16: Analisi & Report

  • Run finale su hold-out set 2025
  • Analysis: ablation multi-tier, regime breakdown, diversity analysis
  • Documentazione lessons learned
  • Decision document: procedere con sistema completo, iterare PoC, o pivot

Deliverable: report finale con risposte alle 5 domande di validazione iniziali.


12. Costi PoC

12.1 LLM costs

Fase Calls stimate Tokens stimati Tier mix Costo
Setup + agenti hand ~500 2M A/B ~$50
Test pipeline ~2000 8M B/C ~$30
GA run principale 50 gen × 50 agent × 10 calls × 5K tok = 125M tok mostly C, some B ~$300-500
Repeat runs (3x) (per ablation, tuning) ~$1000-1500
Hold-out validation ~1000 5M A (judge) ~$80
Totale $1500-2500

Più conservativo se aggiungiamo iteration overhead: budget $2-4K.

12.2 Infrastruttura

  • Compute (locale o cloud modesto): ~$200-400 totali
  • Storage (data + logs): ~$50/mese
  • Data subscription (Tardis o Kaiko per derivatives): variabile, $0-500/mese a seconda della qualità richiesta

12.3 Tempo

  • Realistic estimate: 3-4 mesi a 3-4 giorni/settimana effettivi
  • Pessimistic estimate: 5-6 mesi se data sourcing risulta più complesso del previsto

13. Rischi e Mitigazioni

Rischio Probabilità Impatto Mitigazione
Data sourcing più complesso Alta Medio Start con CCXT + Binance free, upgrade dopo
Backtest engine ha bug subtle Alta Critico Test deliberato di lookahead injection
Swarm non batte baseline RF Media Alto È un risultato comunque, non fallimento
Costi over-budget Media Medio Cap hard, monitor settimanale
Time over-budget (5+ mesi) Alta Medio Milestone bi-settimanali, taglio scope se necessario
Convergenza prematura del swarm Media Alto Speciation, novelty bonus, immigrazione
OpenRouter qualità inconsistente Media Basso Fallback policy, monitor success rate

14. Decisioni Aperte

Da risolvere prima di Fase 1:

  1. Asset focus: solo BTC, solo ETH, o entrambi? (suggerito: entrambi, per cross-asset features)
  2. Data provider primario: pagare Tardis/Kaiko o partire con free sources? (suggerito: free per Fase 1, upgrade se necessario)
  3. Hardware: locale o cloud? (suggerito: locale, dataset ~50-100GB gestibile)
  4. Tier-A budget: quanto reservare a Sonnet per Adversarial? (suggerito: $300-500 cap)
  5. Frequency primaria: 1h confermato o scendere a 15min? (suggerito: 1h, evita overfitting su microstructure)

15. Cosa il PoC NON fa (e va bene)

  • NON evolve il protocollo (sistema completo)
  • NON co-evolve Falsification e Adversarial (sistema completo)
  • NON esplora idiom emergence (sistema completo)
  • NON applica a domini non-trading (sistema completo)
  • NON cerca breakthrough singoli, cerca validazione architetturale
  • NON è un trading bot pronto per capitale reale (mai dopo PoC, paper trading prima)

Il PoC è un esperimento controllato. Il sistema completo è il prodotto. Sono cose diverse, e va bene così.


16. Decision Triggers

Dopo PoC, queste sono le decisioni discrete:

GO al sistema completo se:

  • Swarm produce ≥5 strategie con DSR significativo dopo Adversarial
  • Swarm batte baseline RF di ≥30% in best-DSR e diversity
  • Strategie sopravvivono a OOS 2025 (regime change)
  • Multi-tier ablation conferma valore (no significant loss usando 70% Tier-C)

ITERATE PoC se:

  • Risultati borderline (alcuni indicatori sì, altri no)
  • Bug specifici identificabili (es. GA non diversifica → fix speciation)
  • Architettura sembra giusta ma implementazione perfettibile

PIVOT se:

  • Swarm decisamente perde vs baseline su discovery numerica
  • Ma: considerare pivot verso domini non-numerici (offerte commerciali, code review)
  • O: considerare uso del swarm come generator di ipotesi macro/strutturali, non pattern numerici

Documento da aggiornare durante PoC. Questa è v0.1, scritta prima di qualunque implementazione. Documento principale (sistema completo): coevolutive_swarm_system.md