Passa al contenuto principale

Guida allo stile dei grafici

Questo è il riferimento canonico su come appare un "buon" grafico Blocklens. Distilla le regole espresse nei circa 70 template integrati (chart-templates), nei template inizializzati nel DB (template-seeds) e nel comportamento di rendering di the chart renderer.

Due tipi di destinatari:

  1. Autori frontend / di template — applica queste regole quando progetti nuovi template o dati di inizializzazione.
  2. La skill lab-author di Buddy — carica una copia condensata di queste regole affinché le configurazioni dei grafici generate dall'AI corrispondano al linguaggio visivo del catalogo curato.

Se una regola qui sotto contraddice ciò che un template fa attualmente, vince il template per ragioni di retrocompatibilità, ma il nuovo lavoro dovrebbe seguire questa guida.


1. Assi

1.1 Il prezzo sempre sull'asse Y destro, scala logaritmica

Ogni template che sovrappone il prezzo di BTC colloca il prezzo su un asse destro separato con scale: "log". La metrica primaria va sull'asse sinistro. Collegare il prezzo visivamente ma separarlo numericamente mantiene leggibili sia le metriche a rapida crescita (holdings, AUM, supply) sia il prezzo.

Eccezione: i template dei modelli di prezzo (realized_price, transferred_price) collocano il prezzo sullo stesso asse del modello, così gli utenti possono confrontare due prezzi su un'unica scala. Quell'asse è logaritmico.

1.2 Le metriche che condividono un'unità condividono un asse

  • lth_supply + sth_supply → un asse sinistro (entrambe in BTC).
  • lth_mvrv + sth_mvrv → un asse sinistro (entrambi rapporti).
  • Funding rate (%) a sinistra, prezzo (USD) a destra — unità diverse, assi diversi.

Non sovrapporre due metriche con intervalli molto diversi sullo stesso asse lineare. La serie più piccola risulterà visivamente compressa.

1.3 Confronto tra cicli: allLeftAxis: true + scala logaritmica

I template di cycle-performance (ad es. cycle-perf-low, cycle-perf-ath, cycle-perf-halving) forzano allLeftAxis: true con yAxes: [{ side: "left", scale: "log" }]. Più cicli si sovrappongono sullo stesso asse logaritmico, così la crescita esponenziale è confrontabile tra i cicli.

1.4 Colore dell'etichetta dell'asse

  • Più serie di colori diversi che condividono un asse → l'etichetta dell'asse è grigio scuro neutro #6b7280.
  • Singola metrica che possiede un asse → l'etichetta può ereditare il colore di quella metrica (usato raramente; il grigio è l'impostazione predefinita sicura).

2. Selezione della scala

Usa lineareUsa logaritmica
Supply, flussi, conteggi, valori in USD, market capPrezzo di BTC (sempre)
Rapporti (MVRV, SOPR), percentuali, funding rateIndici azionari quando mostrati da soli (SPY/QQQ/IWM)
Delta giornalieri, variazioni netteModelli di prezzo (realized_price, transferred_price)
Tutto ciò che oscilla in un intervallo limitatoSovrapposizioni di cycle-performance

Se una metrica copre più di ~2 ordini di grandezza nella finestra visibile, preferisci la scala logaritmica.


3. Tipo di grafico per metrica

StileQuandofillOpacity
areaHoldings, supply, flussi cumulativi, AUM, coorti impilate0.3
lineRapporti (MVRV, SOPR), tassi (funding), sovrapposizioni di prezzo0.1
barDelta giornalieri / a 30 giorni (flussi netti, supply 30D Δ)0.5
candlestickSolo OHLC

Le barre su un asse logaritmico risultano illeggibili — mantieni le barre lineari.


4. Palette di colori

4.1 Per dominio

DominioElementoHex
Sovrapposizione prezzoPrezzo BTC (neutro)#6b7280
SupplyLTH#2563eb
SupplySTH#dc2626
Supplyterza coorte#fbbf24 / #FFBB28
ETFholdings#f59e0b
ETFAUM#3b82f6
ETFflusso netto#10b981
ETFflusso cumulativo#059669
ETFdominanza#8b5cf6
ETFholdings USA#3b82f6
ETFrealized price#dc2626 / #ea580c
DATholdings totali#F7931A (colore brand Bitcoin)
DATsocietà quotate#0088FE
DATgoverni#FF4444
DATsocietà private#FFBB28
DATvariazione netta#82ca9d
DATdominanza#ff7300
Fundingrate#3b82f6
Fundingspread#f97316
Fundingzona di surriscaldamentorgba(239,68,68,0.1)
Fundingzona di capitolazionergba(34,197,94,0.1)
Macrorendimenti (neutro)#6b7280
Macroinflazione#f59e0b
MacroVIX / rischio#ef4444
Ciclo 1→4viola → blu → verde → arancione#8b5cf6#3b82f6#22c55e#f97316

4.2 Colorazione multi-metrica

Quando due coorti correlate appaiono insieme (LTH/STH, USA/non-USA, quotate/private), usa la coppia consolidata (blu + rosso per LTH/STH), così gli utenti imparano un unico modello mentale. Non reinventare le palette per ogni grafico.


5. Linee e aree di riferimento

Usale solo quando la soglia ha un'interpretazione chiara:

  • Funding rate > 20% → area ombreggiata in rosso, etichetta "Surriscaldamento".
  • Funding rate < -10% → area ombreggiata in verde, etichetta "Capitolazione".
  • SOPR = 1.0 → linea di riferimento al punto di pareggio (opportunità — non ancora nei template).
  • MVRV = 1.0 → linea di riferimento alla parità del fair value.

Evita le linee decorative prive di significato numerico. Una o due annotazioni per grafico al massimo.

"referenceAreas": [
{ "y1": 20, "y2": 100, "yAxisId": "axis-left", "fill": "rgba(239,68,68,0.1)", "label": "Overheated" },
{ "y1": -100, "y2": -10, "yAxisId": "axis-left", "fill": "rgba(34,197,94,0.1)", "label": "Capitulation" }
]

6. Intervalli di date predefiniti

PresetQuando
ALLMetriche di tendenza a lungo termine — supply, valutazione, sovrapposizioni di cicli, qualsiasi cosa con una lunga storia che gli utenti vogliono vedere per intero.
1YMetriche rumorose in cui le viste pluriennali oscurano il segnale — flussi netti giornalieri, variazione netta DAT, funding spread.
1W / 1MMai come predefinito — sono livelli di zoom guidati dall'utente.

7. Costanti di stile

Usale ovunque a meno che non vi sia una ragione specifica del grafico per non farlo:

  • strokeWidth: 2 per tutte le linee.
  • fillOpacity: 0.3 per le aree, 0.1 per le sovrapposizioni di linea, 0.5 per le barre.
  • Formato instanceId: {metricId}-{seq} (ad es. price-1, lth_supply-1). Resta stabile tra una modifica e l'altra.

8. Convenzioni di denominazione

  • Nome del grafico — locuzione nominale, con le iniziali maiuscole come l'intestazione di una colonna. ≤60 caratteri. Niente emoji.
    • Buono: BTC LTH Supply with 30D Change, ETF Net Flow vs. Price
    • Cattivo: 📈 Bitcoin Long-Term Holders!!! (2024)
  • Descrizione — una frase che descrive ciò che il grafico mostra e l'insight che fa emergere.
    • Buono: Long-term holder supply with 30-day delta bars to surface accumulation and distribution waves.

9. Anti-pattern

Rifiutali quando esamini un template o una configurazione generata dall'AI:

  • Singola metrica su un layout a due assi — l'asse vuoto è spazio sprecato.
  • Più di 4 serie su un asse senza impilamento — visivamente illeggibile.
  • Mescolare intervalli molto diversi su un singolo asse lineare (ad es. conteggi da 1-2M con prezzo da 20k-100k) — la serie più piccola è invisibile.
  • Prezzo di BTC su un asse lineare quando abbinato a una metrica ad alta crescita — il prezzo dominerà visivamente.
  • Linee di riferimento decorative prive di significato numerico — aggiungono rumore, non segnale.
  • Barre su una scala logaritmica — risultano illeggibili.
  • Palette su misura per ogni grafico — interrompe le associazioni di colore apprese dall'utente.

10. Riferimento rapido per la skill lab-author

Quando Buddy costruisce una configurazione di grafico a partire dal linguaggio naturale:

  1. Risolvi gli ID delle metriche tramite search_metrics / get_metric. Conferma che il grade di ciascuna metrica rientri nel tier dell'utente.
  2. Decidi il layout degli assi:
    • Il prezzo di BTC è una delle serie? → prezzo a destra con scale: "log", primaria a sinistra.
    • Le metriche rimanenti condividono un'unità? → stesso asse. Unità diverse? → assi diversi.
  3. Scegli gli stili di grafico secondo il §3.
  4. Scegli i colori secondo il §4.1 — usa la palette consolidata per il dominio.
  5. Scegli la scala secondo il §2.
  6. Scegli l'intervallo di date secondo il §6.
  7. Aggiungi linee/aree di riferimento solo quando la soglia ha un significato chiaro (§5).
  8. Applica le costanti di stile (§7) e le convenzioni di denominazione (§8).
  9. Esegui la checklist degli anti-pattern (§9) prima di salvare.

11. Dove risiedono i template

  • Statici (frontend)chart-templates. ~70 template caricati all'avvio dell'app.
  • Database (tabella templates) — template curati inizializzati da template-seeds ed esposti tramite the templates API.
  • Creati dall'utente (tabella user-charts) — l'argomento del resto di questa guida. Salvati tramite l'interfaccia di Lab, tramite il fork di un template o tramite lo strumento MCP save_chart di Buddy.

La forma JSON della configurazione (metrics, formulas, yAxes, dateRange, referenceLines, referenceAreas, ecc.) è identica in tutte e tre le fonti — vedi the chart config in the Lab API client per la definizione TypeScript e the API schema per lo schema Pydantic.