Leer quant trading met een open-sourceboek
Een open-sourceboek over quant trading beschrijft het volledige leerplan, van data tot live order. Ontdek wat elke fase leert en wat werkt voor Amerikaanse aandelen.
Een open-sourceboek over quant trading is een gratis openbaar leerplan. Het beschrijft het volledige traject van ruwe data tot een live order, in de volgorde waarin een beginner ermee in aanraking komt. Het manuscript van XQuant: Everyone Can Be a Quantitative Trader, dat xingwudao op GitHub heeft gepubliceerd, is met 686 sterren per augustus 2026 een helder voorbeeld. De negen hoofdstukken volgen de lijn die vrijwel elk quant-leerplan volgt. Deze pagina doorloopt die lijn stap voor stap, benoemt de specifieke fout die in elke fase kan optreden en geeft aan welke onderdelen de overstap van Chinese A-shares naar Amerikaanse aandelen doorstaan.
Wat bevat een open-sourceboek over quant trading?
Haal de branding van elk beginnerscurriculum weg en er blijven vijf stappen over, in deze volgorde: data verzamelen en opschonen, daaruit een signal bouwen, dat signal aan de hand van historische gegevens testen, bepalen hoe groot de positie moet zijn, en vervolgens de order versturen en de kosten betalen. De inhoud van XQuant, gelezen op commit 016b66e van 14 juli 2026, behandelt dezelfde onderwerpen in negen hoofdstukken.
- Voorbereiding, daarna hoofdstuk één: één volledige strategie van begin tot eind uitvoeren.
- Hoofdstuk twee, wat te kopen: beginnen met drie ETF's.
- Hoofdstuk drie, hoeveel te kopen: drie allocatiemethoden met elkaar vergelijken.
- Hoofdstuk vier, wanneer te handelen: rebalancing, stop loss, take profit.
- Hoofdstuk vijf, beoordelen of een strategie goed is: vier perspectieven.
- Hoofdstuk zes, vier niet te vroeg feest: overfitting voorkomen.
- Hoofdstuk zeven, van ideaal naar werkelijkheid: trades uitvoeren.
- Hoofdstuk acht, het leven na de lancering: monitoren, diagnosticeren en itereren.
- Hoofdstuk negen, nieuwe kansen vinden: een introductie tot factoronderzoek.
De volgorde verdient aandacht. Position sizing komt in hoofdstuk drie, vóór beide hoofdstukken over backtesting, en factoronderzoek komt als laatste. Zelfstudietrajecten verlopen meestal anders: eerst een factoridee, daarna een backtest en nooit een sizingregel. De bijbehorende oefenrepository (333 sterren, op dezelfde datum) is georganiseerd rond uitgeschreven taakomschrijvingen in plaats van voltooide code. De lezer geeft een AI-assistent opdracht om die te implementeren. Code lezen die u niet zelf hebt geschreven blijft de vaardigheid die alles hieronder bepaalt, omdat elke volgende fout verborgen zit in één implementatiedetail.
Fase één: verzamel de data en definieer vervolgens het universum
Het opschonen is de zichtbare helft van dataverwerking: foutieve prints, ontbrekende sessies en aanpassingen voor splitsingen en dividenden. Bepalen welke namen u onderzoekt, is de onzichtbare helft. Daar ontstaat survivorship bias, nog voordat er ook maar één regel strategiecode bestaat. Neem elk Amerikaans ticker-symbool waarin gedurende één week in juni, voor elk afzonderlijk jaar, een trade werd uitgevoerd. Ga vervolgens na hoeveel daarvan in dezelfde week van 2026 nog werden verhandeld.
De exacte SQL achter elk getal
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 yearVan de 8224 ticker-symbolen waarin in die week van 2016 werd gehandeld, werden er in dezelfde week van 2026 nog 50% verhandeld. De overige bedrijven werden overgenomen, fuseerden, kregen een nieuwe naam of werden van de beurs gehaald. Een backtest die is opgebouwd met de huidige lijst onderzoekt alleen de namen die het hebben gered. De strategie wordt dan beoordeeld op het aanhouden van bedrijven die achteraf zijn geselecteerd. Een beginnersfeed levert u die lijst van overlevende bedrijven zonder waarschuwing. De handleiding voor de gratis API voor beursdata behandelt welke gegevens dergelijke feeds wel en niet bevatten.
Fase twee: gegevens omzetten in een signaal
Een signaal is een regel die een aandeel op een bepaald moment een score geeft. Een factor is een signaal waarvan u verwacht dat het tegelijk voor veel aandelen geldt. Momentum, value en low volatility zijn de klassieke voorbeelden. In deze fase bestaat het risico dat u regels blijft testen totdat er één werkt. Twintig varianten van een moving-average crossover op één index over één decennium leveren altijd een winnaar op. Dat is de variant die de ruis het best heeft gevolgd. De beschermingsmaatregelen zijn weinig spectaculair: leg de regel vast voordat u deze meet, houd een deel van de historische gegevens achter dat u nooit bekijkt, tel elke geteste variant mee en geef de voorkeur aan minder instelbare parameters. XQuant behandelt dit in een volledig hoofdstuk vóór het factoronderzoek. Dat is de juiste volgorde.
Fase drie: de backtest, waar de meeste beginners stoppen
Dit is de fase waarin de meeste zelf aangeleerde projecten eindigen. Dat gebeurt stilletjes, met een aantrekkelijk oplopende equity curve. Survivorship bias is de eerste van de twee fouten. Look-ahead bias is de tweede: de strategie gebruikt een cijfer dat op het moment waarop de order zou worden geplaatst nog niet beschikbaar was. De meest voorkomende variant is een regel die wordt berekend op basis van de slotkoers van vandaag en tegen diezelfde slotkoers wordt uitgevoerd. Meet de afstand die deze aanname overslaat.
De exacte SQL achter elk getal
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 monthIn July 2026 bedroeg de gemiddelde afstand tussen de ene slotkoers en de volgende openingsprint 40.8 basis points voor SPY en 107.4 voor NVDA. Eén basis point is een honderdste van een procentpunt. Alle 24 maanden in het panel, vanaf August 2024, liggen boven nul. Een backtest die op de slotkoers een beslissing neemt en tegen diezelfde slotkoers wordt uitgevoerd, incasseert die afstand gratis bij elke trade. Geen enkele live order doet dat. Look-ahead bias bij backtesting ontleedt het mechanisme, en waarom aandelen 's nachts gaps vertonen legt de gap zelf uit.
Fase vier: bepaal hoeveel u moet kopen
Het probleem hier is het ontbreken van een regel. De meeste autodidactische traders leggen nooit een regel voor position sizing vast. Daardoor hebben zij er toch een, meestal per ongeluk: een gelijk dollarbedrag per naam of het beschikbare cashbedrag. Gelijke dollarbedragen betekenen niet gelijk risico.
De exacte SQL achter elk getal
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 DESCIn de twaalf maanden tot en met 31 juli 2026 bewoog COIN met een geannualiseerde volatiliteit van 68%, tegenover 12.7% voor SPY, dat zich aan het rustige uiteinde van het panel bevond. De slechtste sessie sloot 13.34% onder de vorige slotkoers, terwijl de slechtste dag voor SPY 2.69% bedroeg. Hetzelfde dollarbedrag in elke naam koopt zeer verschillende dagelijkse bewegingen. Het is die beweging, en niet het signaal, die een beginner daadwerkelijk ervaart. position sizing volgens het Kelly-criterium beschrijft één formeel antwoord. concentratierisico laat zien hoe het informele antwoord eruitziet.
Fase vijf: uitvoering en de kosten die een backtest vergeet
Twee kosten, waarvan er één zichtbaar is. Commissies en wettelijke heffingen verschijnen op het rekeningoverzicht. Slippage niet: dit is het verschil tussen de prijs op het scherm en de prijs waartegen u daadwerkelijk handelt. De ondergrens is de bid-ask spread, de afstand tussen de beste koop- en verkoopkoers op dat moment. Kopers betalen de ask en verkopers slaan op de bid, waardoor een volledige transactie de spread tweemaal kruist. De spread is niet constant.
De exacte SQL achter elk getal
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_timeHet paneel omvat 16 halfuurblokken van één vrijdag, van het 09:00-blok vóór de openingsbel tot het 16:30-blok na de slotbel. De spread van AAPL bedroeg 10.53 basis points in het eerste blok en 3.27 in het laatste, terwijl die voor KO 28.87 en 8.04 bedroeg. De krapste quotes van de dag staan in het midden van de grafiek, tussen deze twee uiteinden. Een strategie die bij de opening handelt in twee van de meest liquide namen op de markt betaalt andere kosten dan dezelfde strategie rond het middaguur. Een backtest met een aanname van nul kosten berekent geen van beide correct. De bid-ask spread bepaalt het bedrag, waarom spreads bij de opening breder worden verklaart de curve, en wat het kost om in een aandeel te handelen telt een volledige heen-en-we transactie op. Tussen een schone backtest en echt geld zit nog één stap: paper trading voordat u echt geld inzet.
Welke onderdelen van een A-share-curriculum zijn overdraagbaar naar Amerikaanse aandelen?
XQuant en vergelijkbare methoden zijn ontwikkeld voor Chinese A-shares en ETF’s. De methode blijft in essentie intact: de volgorde van de fasen, de definities, de discipline rond overfitting, de gewoonte om kosten als afzonderlijke post op te nemen in plaats van als bijzaak, en elk onderdeel van de berekening van de positiegrootte. Price bars blijven price bars. Wat niet overdraagbaar is, is het regelgevingskader eromheen.
- Voor A-shares geldt daadwerkelijk een T+1-beperking: aandelen die vandaag zijn gekocht, kunnen pas in de volgende sessie worden verkocht. T+1 in de VS is een settlement-conventie en blokkeert niets intraday, hoewel de pattern day trader-regel margin accounts met minder dan $25.000 beperkt tot drie day trades binnen vijf werkdagen.
- Aandelen op de Chinese hoofdmarkt mogen maximaal 10% per dag bewegen; voor de groeimarkten geldt 20%. Amerikaanse aandelen kennen geen dagelijkse limiet. Daar ontstaan handelsonderbrekingen door volatility bands en nieuwsgerelateerde halts.
- Orders in A-shares worden uitgevoerd in lots van 100 aandelen. Veel Amerikaanse brokers voeren orders uit in fractionele aandelen. Daardoor verandert ook wat een sizing-regel kan uitdrukken.
- China heft stamp duty aan de verkoopzijde. Amerikaanse verkopers betalen kleine regulatory fees van een andere omvang en met een andere structuur.
- De sessiestructuur verschilt eveneens, inclusief een middagpauze in Shanghai en Shenzhen. De handelsuren van de Amerikaanse aandelenmarkt lopen aaneengesloten door en eindigen met een closing auction.
Elke kosten- of timingconstante die u vanuit een cursus in uw eigen code overneemt, vormt een bug die wacht op de eerste live order.
Pin de referentie, niet de README
De repository bevat per augustus 2026 geen releases met tags. Daarom is een commit de duurzame bronverwijzing: 016b66e, gedateerd 14 juli 2026. Dat is relevant voor een boek dat nog wordt geschreven. Hoofdstuknummers veranderen, README-bestanden worden herschreven, koppen verschuiven en een link die naar hoofdstuk zeven verwees, verwijst ongemerkt naar iets anders. Vermeld de commit en de datum, noteer de titel van het hoofdstuk dat u hebt gelezen in plaats van het nummer, en uw notities blijven een jaar later controleerbaar. Het manuscript is gepubliceerd onder CC BY-NC-SA 4.0; voor de buildscripts geldt de MIT-licentie. Diezelfde discipline vormt de laatste les van de syllabus: een strategie die u niet opnieuw kunt uitvoeren met een vastgezette data snapshot is een verhaal, geen resultaat.
Veelgestelde vragen
Kunt u quant trading leren uit een gratis open-sourceboek?
Voor het overzicht wel. Met een open manuscript kunt u elke bewering aan de bron toetsen. Wat een boek niet kan bieden, zijn de data, kosten en regels van uw eigen markt. Precies daar houdt een syllabus die voor één beurs is geschreven op aan te sluiten bij uw broker.
In welke fase van een quant-curriculum haken de meeste beginners af?
Bij de backtest. Daar zitten twee fouten die het resultaat flatteren: survivorship door een achteraf samengesteld universum en look-ahead door te vullen tegen een prijs die op dat moment nog niet was geprint. Slechts 50% van de tickers die in die jun week van 2016 werden verhandeld, was tien jaar later nog actief.
Wat is het verschil tussen survivorship bias en look-ahead bias?
Survivorship bias is een universumprobleem: de geteste namen zijn geselecteerd omdat ze zijn blijven bestaan. Look-ahead bias is een timingprobleem: de strategie gebruikt een getal dat nog niet bestond op het moment waarop de order zou worden ingelegd. Het eerste vergroot de selectie, het tweede verbetert de fill kunstmatig.
Werkt een quant-cursus voor Chinese A-shares voor Amerikaanse aandelen?
De methode wel. De marktregels niet. Behoud de volgorde van de fasen, de discipline rond overfitting en de kostenberekening. Vervang vervolgens de data-infrastructuur, de verkoopbeperking van T+1, de dagelijkse prijslimieten en de lotgroottes door Amerikaanse equivalenten voordat er geld wordt ingezet.
Elk paneel hierboven is een opgeslagen query met de SQL eronder. Open een paneel, vervang de tickers of datums en voer de query zelf uit op de Strasmore-terminal.