Strasmore Research
Formazione Matt ConnorDi Matt Connor

Imparare il quant trading da un libro open source

Un libro open source presenta l’intero percorso del quant trading: dati, segnali, backtest e ordini. Ecco cosa insegna ogni fase e cosa vale per le azioni USA.

Un libro open source sul trading quantitativo è un programma didattico pubblico e gratuito: l’intero percorso, dai dati grezzi all’invio di un ordine reale, descritto nella sequenza con cui lo affronta un principiante. Il manoscritto di XQuant: Everyone Can Be a Quantitative Trader, pubblicato su GitHub da xingwudao, è un esempio chiaro, con 686 stelle ad agosto 2026, e i suoi nove capitoli seguono il percorso comune a quasi tutti i programmi di formazione quantitativa. Questa pagina segue quel percorso fase per fase, identifica il problema specifico che si presenta in ciascuna fase e indica quali parti restano valide nel passaggio dalle azioni A cinesi alle azioni statunitensi.

Che cosa contiene un libro open source sul quant trading?

Eliminando il branding da qualsiasi syllabus per principianti, restano cinque fasi, in quest’ordine: acquisire e pulire i dati, costruire un segnale a partire da essi, testare quel segnale sui dati storici, decidere la dimensione della posizione, quindi inviare l’ordine e sostenere i costi. L’indice di XQuant, alla revisione del commit 016b66e del 14 luglio 2026, copre gli stessi temi in nove capitoli.

  • Preparazione, poi capitolo uno: eseguire una strategia completa dall’inizio alla fine.
  • Capitolo due, che cosa acquistare: iniziare con tre ETF.
  • Capitolo tre, quanto acquistare: tre metodi di asset allocation, messi a confronto.
  • Capitolo quattro, quando fare trading: ribilanciamento, stop loss, take profit.
  • Capitolo cinque, come valutare se una strategia è valida: quattro prospettive.
  • Capitolo sei, non festeggiare troppo presto: prevenire l’overfitting.
  • Capitolo sette, dall’ideale alla realtà: eseguire le operazioni.
  • Capitolo otto, la vita dopo il lancio: monitoraggio, diagnosi, iterazione.
  • Capitolo nove, trovare nuove opportunità: un’introduzione alla ricerca sui factor.

L’ordine merita attenzione. Il position sizing compare nel capitolo tre, prima di entrambi i capitoli dedicati al backtest, mentre la ricerca sui factor arriva per ultima. I percorsi di autoapprendimento seguono di solito l’ordine opposto: prima un’idea basata su un factor, poi un backtest, e mai una regola di sizing. Il repository di esercizi complementare (333 stelle, alla stessa data) è organizzato attorno a specifiche scritte delle attività, non a codice già completato; il lettore indica a un assistente AI come implementarle. Saper leggere codice che non si è scritto resta la competenza da cui dipende tutto ciò che segue, perché ogni errore successivo si nasconde dentro un dettaglio dell’implementazione.

Prima fase: acquisire i dati, poi definire l’universo

La pulizia è la metà visibile del lavoro sui dati: prints errati, sessioni mancanti, rettifiche per split e dividendi. Scegliere quali titoli studiare è la metà invisibile. È qui che entra il survivorship bias, prima ancora che esista una riga di codice della strategia. Prendi ogni ticker statunitense su cui è stato eseguito un trade durante una settimana di giugno, per ciascun anno, e verifica quanti erano ancora scambiati nella stessa settimana del 2026.

QueryTicker USA scambiati in una settimana di giugno e quanti erano ancora scambiati a giugno 2026
L'esatto SQL dietro ogni numero
WITH june_week AS (
    SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS year,
           ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE toMonth(toTimeZone(window_start, 'America/New_York')) = 6
      AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 10 AND 16
      AND toYear(toTimeZone(window_start, 'America/New_York')) BETWEEN 2016 AND 2026
      AND volume > 0
    GROUP BY year, ticker
),
survivors AS (
    SELECT ticker FROM june_week WHERE year = 2026
)
SELECT year,
       uniqExact(ticker) AS tickers_traded,
       uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors)) AS still_trading_2026,
       round(100 * uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors))
             / uniqExact(ticker), 1) AS still_trading_pct
FROM june_week
GROUP BY year
ORDER BY year
Run this yourself

Dei 8224 ticker scambiati in quella settimana di 2016, 50% erano ancora scambiati nella stessa settimana di 2026. Gli altri erano stati acquisiti, coinvolti in una fusione, ridenominati o delistati. Un backtest costruito sull’elenco attuale dei titoli studia solo quelli che sono sopravvissuti e attribuisce una performance alla strategia per aver detenuto società selezionate a posteriori. Un feed per principianti ti fornirà quell’elenco dei sopravvissuti senza alcuna avvertenza: la guida alle API gratuite per i dati del mercato azionario spiega quali dati questi feed forniscono e quali invece non includono.

Fase due: trasformare i dati in un segnale

Un segnale è una regola che assegna un punteggio a un titolo in un determinato momento. Un fattore è un segnale che si ritiene valido contemporaneamente per molti titoli. Momentum, value e bassa volatilità sono gli esempi da manuale. In questa fase, il rischio è testare regole finché una non funziona. Venti varianti di un crossover tra medie mobili applicate a un solo indice per un decennio produrranno sempre una vincitrice. Sarà quella che si è adattata meglio al rumore. Le difese sono poco spettacolari: fissare la regola prima di misurarla, tenere da parte una porzione della storia che non si osserva mai, contare tutte le varianti provate e preferire un numero inferiore di parametri modificabili. XQuant dedica un intero capitolo a questo tema prima della ricerca sui fattori. È l’ordine corretto.

Fase tre: il backtest, dove si fermano i più principianti

Questa è la fase che conclude la maggior parte dei progetti autodidatti, e li conclude in silenzio, con una curva dell’equity dall’aspetto eccellente. Il survivorship bias, illustrato sopra, è il primo dei due errori. Il look-ahead bias è il secondo: la strategia utilizza un dato che l’orologio non aveva ancora fornito quando l’ordine avrebbe dovuto essere inserito. La versione più comune consiste nel calcolare una regola usando il prezzo di chiusura odierno ed eseguire l’ordine allo stesso prezzo di chiusura. Misurate la distanza che questa ipotesi ignora.

QueryDistanza media dalla chiusura di una sessione all’apertura della successiva, mensile
L'esatto SQL dietro ogni numero
WITH sessions AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMin(open, window_start) AS session_open,
           argMax(close, window_start) AS session_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'NVDA')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-08-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
gaps AS (
    SELECT ticker,
           session,
           toFloat64(session_open) AS open_px,
           toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
    FROM sessions
)
SELECT formatDateTime(toStartOfMonth(session), '%Y-%m') AS month,
       formatDateTimeInJodaSyntax(toStartOfMonth(session), 'MMMM yyyy') AS month_label,
       round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'SPY'), 1) AS spy_gap_bps,
       round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'NVDA'), 1) AS nvda_gap_bps
FROM gaps
WHERE prev_close > 0
GROUP BY month, month_label
HAVING countIf(ticker = 'SPY') > 0 AND countIf(ticker = 'NVDA') > 0
ORDER BY month
Run this yourself

In July 2026, la distanza media tra una chiusura e il successivo prezzo di apertura è stata pari a 40.8 basis point per SPY e a 107.4 per NVDA. Un basis point equivale a un centesimo di punto percentuale. Tutti i 24 mesi del panel, a partire da August 2024, si collocano sopra lo zero. Un backtest che prende la decisione alla chiusura ed esegue l’ordine a quella stessa chiusura incassa gratuitamente tale distanza su ogni trade; nessun ordine live lo fa. Il look-ahead bias nel backtesting analizza il meccanismo, mentre perché i titoli azionari registrano gap overnight spiega il gap in sé.

Quarta fase: decidere quanto acquistare

Il problema, in questo caso, è l’assenza di una regola. La maggior parte dei trader autodidatti non definisce mai una regola per il position sizing. Di conseguenza, finisce per averne una casuale: di solito investire lo stesso importo in ogni titolo o utilizzare tutta la liquidità disponibile. Investire lo stesso importo non significa assumere lo stesso rischio.

QueryDodici mesi di movimenti giornalieri: volatilità annualizzata e peggior sessione, otto titoli
L'esatto SQL dietro ogni numero
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(close, window_start) AS session_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'KO', 'JNJ', 'MSFT', 'AAPL', 'NVDA', 'TSLA', 'COIN')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-08-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
rets AS (
    SELECT ticker,
           toFloat64(session_close) AS close_px,
           toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
    FROM daily
)
SELECT ticker,
       round(stddevSamp(close_px / prev_close - 1) * sqrt(252) * 100, 1) AS annualized_vol_pct,
       round(abs(min(close_px / prev_close - 1)) * 100, 2) AS worst_day_pct
FROM rets
WHERE prev_close > 0
GROUP BY ticker
ORDER BY annualized_vol_pct DESC
Run this yourself

Nei dodici mesi terminati il 31 luglio 2026, COIN ha registrato una volatilità annualizzata pari a 68%, contro 12.7% di SPY, il titolo più stabile del panel. Nella sua peggiore seduta, ha chiuso a 13.34% al di sotto della chiusura precedente, mentre la perdita giornaliera peggiore di SPY è stata pari a 2.69%. Investire lo stesso importo in ciascun titolo espone a oscillazioni giornaliere molto diverse. È l’oscillazione, non il segnale, l’esperienza che un principiante vive realmente. position sizing secondo il criterio di Kelly illustra una risposta formale, mentre rischio di concentrazione mostra la struttura di quella informale.

Fase cinque: esecuzione e costi che un backtest dimentica

Due costi, uno visibile. Commissioni e oneri regolamentari compaiono nell’estratto conto. Lo slippage no: è la differenza tra il prezzo visualizzato sullo schermo e quello effettivamente ottenuto. Il suo limite inferiore è lo spread bid-ask, cioè la distanza tra la migliore quotazione in acquisto e la migliore quotazione in vendita in quell’istante. Gli acquirenti pagano l’ask e i venditori colpiscono il bid, quindi un round trip attraversa lo spread due volte. Lo spread non è costante.

QuerySpread quotato medio per mezz’ora ET: AAPL e KO, venerdì 17 luglio 2026
L'esatto SQL dietro ogni numero
WITH quotes AS (
    SELECT ticker,
           toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE) AS bucket,
           toFloat64(ask_price - bid_price) / toFloat64((ask_price + bid_price) / 2) * 10000 AS spread_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('AAPL', 'KO')
      AND sip_timestamp >= toDateTime('2026-07-17 13:00:00')
      AND sip_timestamp < toDateTime('2026-07-17 21:00:00')
      AND bid_price > 0
      AND ask_price > bid_price
)
SELECT formatDateTime(bucket, '%H:%i') AS et_time,
       round(avgIf(spread_bps, ticker = 'AAPL'), 2) AS aapl_spread_bps,
       round(avgIf(spread_bps, ticker = 'KO'), 2) AS ko_spread_bps
FROM quotes
WHERE spread_bps > 0 AND spread_bps < 500
GROUP BY et_time
HAVING countIf(ticker = 'AAPL') > 0 AND countIf(ticker = 'KO') > 0
ORDER BY et_time
Run this yourself

Il pannello copre 16 intervalli di mezz’ora di un venerdì, dall’intervallo 09:00 precedente all’apertura a quello 16:30 successivo alla chiusura. Nel primo intervallo AAPL aveva uno spread di 10.53 punti base e nell’ultimo di 3.27, mentre KO si attestava rispettivamente a 28.87 e 8.04. Le quotazioni più strette della giornata si trovano nella parte centrale del grafico, tra questi due estremi. Una strategia che opera in apertura su due dei titoli più liquidi del mercato sostiene un costo diverso rispetto alla stessa strategia eseguita a metà giornata; un backtest che ipotizza costi pari a zero non considera né l’uno né l’altro. Lo spread bid-ask determina il valore, perché gli spread si ampliano in apertura spiega la curva, mentre quanto costa negoziare un titolo calcola il costo di un round trip completo. Tra un backtest pulito e il denaro reale resta un ultimo passaggio: il paper trading prima di investire denaro reale.

Quali parti di un curriculum sulle azioni A sono applicabili alle azioni statunitensi?

XQuant e i suoi omologhi sono pensati per le azioni A e gli ETF cinesi. Il metodo resta valido: l’ordine delle fasi, le definizioni, la disciplina contro l’overfitting, l’abitudine a indicare i costi come voce separata anziché considerarli solo in un secondo momento e ogni elemento del calcolo della size. Le barre dei prezzi restano barre dei prezzi. Non si trasferisce, invece, il quadro normativo che le disciplina.

  • Le azioni A sono soggette a una reale restrizione T+1: le azioni acquistate oggi non possono essere vendute fino alla seduta successiva. Negli Stati Uniti, T+1 è una convenzione di regolamento e non impedisce l’operatività intraday, anche se la regola del pattern day trader limita a tre day trade in cinque giorni lavorativi l’operatività dei margin account con meno di 25.000 dollari.
  • Le azioni A del listino principale sono soggette a un limite del 10% sulla variazione giornaliera, che sale al 20% sui listini growth. Le azioni statunitensi non hanno un limite giornaliero analogo; le sospensioni dipendono invece dai volatility band e dagli halt legati alle notizie.
  • Gli ordini sulle azioni A vengono eseguiti in lotti da 100 azioni. Molti broker statunitensi consentono di negoziare frazioni di azione, modificando ciò che una regola di sizing può effettivamente esprimere.
  • La Cina applica una stamp duty sulle vendite. Negli Stati Uniti, i venditori pagano piccole regulatory fee, diverse per entità e struttura.
  • La struttura delle sedute è diversa e a Shanghai e Shenzhen comprende una pausa a metà giornata. Gli orari del mercato azionario statunitense prevedono una negoziazione continua e terminano con un’asta di chiusura.

Qualsiasi costante relativa ai costi o ai tempi copiata da un corso e inserita nel proprio codice è un bug in attesa del primo ordine live.

Fissa il riferimento, non il README

Ad agosto 2026 il repository non contiene release contrassegnate da tag, quindi il riferimento duraturo è un commit: 016b66e, datato 14 luglio 2026. Questo è importante per un libro ancora in fase di scrittura. I numeri dei capitoli cambiano, i file README vengono riscritti, le intestazioni si spostano e un link che puntava al capitolo sette può finire silenziosamente su qualcos’altro. Cita il commit e la data, annota il titolo del capitolo che hai letto invece del numero e le tue note resteranno verificabili anche un anno dopo. Il manoscritto è pubblicato con licenza CC BY-NC-SA 4.0, mentre gli script di build sono distribuiti con licenza MIT. La stessa disciplina costituisce l’ultima lezione del syllabus: una strategia che non puoi rieseguire a partire da uno snapshot dei dati fissato è una storia, non un risultato.

FAQ

Si può imparare il trading quantitativo da un libro open source gratuito?

Per la mappa generale, sì. Inoltre, un manoscritto aperto consente di verificare ogni affermazione alla fonte. Un libro non può però fornire i dati, i costi e le regole del proprio mercato. È proprio a questo punto che un programma pensato per una sola borsa smette di corrispondere a quello del proprio broker.

Quale fase di un percorso di trading quantitativo mette più in difficoltà i principianti?

Il backtest. In questa fase si annidano due errori, entrambi favorevoli al risultato: il survivorship bias, dovuto a un universo costruito a posteriori, e il look-ahead bias, dovuto all'inserimento di un ordine a un prezzo che il mercato non aveva ancora registrato. Solo 50% dei ticker scambiati in quella settimana di giugno di 2016 era ancora quotato dieci anni dopo.

Qual è la differenza tra survivorship bias e look-ahead bias?

Il survivorship bias è un problema dell'universo considerato: i titoli sottoposti al test sono stati selezionati perché sono sopravvissuti. Il look-ahead bias è un problema di tempistica: la strategia utilizza un dato che non esisteva ancora quando l'ordine avrebbe dovuto essere inserito. Il primo gonfia l'elenco dei titoli, il secondo gonfia il prezzo di esecuzione.

Un corso di trading quantitativo sulle azioni A cinesi funziona per le azioni statunitensi?

Il metodo sì. Le regole di mercato no. Mantieni l'ordine delle fasi, la disciplina contro l'overfitting e la contabilizzazione dei costi. Prima di impiegare capitale, sostituisci però la gestione dei dati, la restrizione alla vendita T+1, i limiti di prezzo giornalieri e i lotti con gli equivalenti statunitensi.


Ogni pannello qui sopra è una stored query con il relativo SQL. Aprine uno, sostituisci i ticker o le date ed eseguilo sul terminale Strasmore.

#quant#learning path#backtesting#open source#beginners