Strasmore Research
Lernen Matt ConnorVon Matt Connor

Quant Trading lernen mit einem Open-Source-Buch

Ein Open-Source-Buch zum quantitativen Trading zeigt den kompletten Lehrplan: was jede Stufe vermittelt, wo Einsteiger meist aufhören und was sich auf US-Aktien übertragen lässt.

Ein Open-Source-Buch zum quantitativen Trading ist ein kostenloser, öffentlich zugänglicher Lehrplan: der gesamte Weg von den Rohdaten bis zur Order im Live-Handel, dargestellt in der Reihenfolge, in der ein Einsteiger ihm begegnet. Das Manuskript zu XQuant: Everyone Can Be a Quantitative Trader, veröffentlicht auf GitHub von xingwudao, ist mit 686 Stars (Stand: August 2026) ein sauberes Beispiel dafür, und seine neun Kapitel durchlaufen den Bogen, den fast jedes Quant-Curriculum durchläuft. Diese Seite verfolgt diesen Bogen Schritt für Schritt, benennt den spezifischen Fehler, der an jeder Station lauert, und markiert, welche Teile die Reise von chinesischen A-Aktien zu US-Aktien überstehen.

Was enthält ein Open-Source-Quant-Trading-Buch?

Entfernt man das Branding von jedem Einsteiger-Lehrplan, bleiben fünf Stufen in dieser Reihenfolge übrig: Daten beschaffen und bereinigen, daraus ein Signal bilden, dieses Signal an der Historie testen, entscheiden, wie hoch der Einsatz ausfällt, dann die Order senden und die Kosten begleichen. Das Inhaltsverzeichnis von XQuant, gelesen im Commit 016b66e vom 14. Juli 2026, deckt denselben Stoff in neun Kapiteln ab.

  • Vorbereitung, dann Kapitel eins: eine vollständige Strategie von Anfang bis Ende durchlaufen.
  • Kapitel zwei, was gekauft wird: Start mit drei ETFs.
  • Kapitel drei, wie viel gekauft wird: drei Allokationsmethoden im Vergleich.
  • Kapitel vier, wann gehandelt wird: Rebalancing, Stop-Loss, Take-Profit.
  • Kapitel fünf, Beurteilung, ob eine Strategie taugt: vier Perspektiven.
  • Kapitel sechs, nicht zu früh feiern: Overfitting vermeiden.
  • Kapitel sieben, vom Idealfall zur Realität: Trades ausführen.
  • Kapitel acht, das Leben nach dem Start: Monitoring, Diagnose, Iteration.
  • Kapitel neun, neue Gelegenheiten finden: eine Einführung in die Faktorforschung.

Die Reihenfolge verdient Aufmerksamkeit. Die Positionsgrößenbestimmung kommt in Kapitel drei, vor beiden Backtest-Kapiteln, und die Faktorforschung kommt zuletzt. Autodidaktische Wege verlaufen meist umgekehrt: zuerst eine Faktoridee, dann ein Backtest, eine Regel zur Positionsgröße nie. Das begleitende Übungs-Repository (333 Sterne, gleiches Datum) ist um schriftliche Aufgabenspezifikationen herum organisiert statt um fertigen Code, wobei der Leser einen KI-Assistenten anweist, diese umzusetzen. Code zu lesen, den man nicht selbst geschrieben hat, bleibt die Fähigkeit, die über alles Folgende entscheidet, denn jeder nachfolgende Fehler verbirgt sich in einem einzelnen Implementierungsdetail.

Schritt eins: Daten beschaffen, dann das Universum definieren

Bereinigung ist die sichtbare Hälfte der Datenarbeit: fehlerhafte Kurse, fehlende Handelssitzungen, Anpassungen für Splits und Dividenden. Die Auswahl, welche Titel untersucht werden, ist die unsichtbare Hälfte – und genau hier entsteht der Survivorship Bias, noch bevor eine einzige Zeile Strategie-Code existiert. Nehmen Sie jeden US-Ticker, der in einer Woche im Juni gehandelt wurde, Jahr für Jahr, und fragen Sie, wie viele davon in derselben Woche des Jahres 2026 noch gehandelt wurden.

AbfrageUS-Ticker aus einer Juniwoche und Anteil, der im Juni 2026 noch gehandelt wurde
Das exakte SQL hinter jeder Zahl
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

Von den 8224 Tickern, die in jener Woche des Jahres 2016 gehandelt wurden, wurden 50% in derselben Woche des Jahres 2026 noch gehandelt. Die übrigen wurden übernommen, fusioniert, umbenannt oder delistet. Ein Backtest, der auf der heutigen Zusammensetzung aufbaut, untersucht nur die Titel, die es geschafft haben, und belohnt eine Strategie dafür, dass sie im Nachhinein ausgewählte Unternehmen hält. Ein Einsteiger-Feed liefert Ihnen diese Überlebensliste ohne Warnhinweis: Der Leitfaden zur kostenlosen API für Aktienmarktdaten beschreibt, was diese Feeds abdecken und was nicht.

Stufe zwei: Aus Daten ein Signal machen

Ein Signal ist eine Regel, die eine Aktie zu einem bestimmten Zeitpunkt bewertet, und ein Faktor ist ein Signal, von dem man annimmt, dass es gleichzeitig für viele Aktien gilt. Momentum, Value und niedrige Volatilität sind die Lehrbuchbeispiele. Der Fehler in dieser Phase besteht darin, Regeln so lange zu testen, bis eine funktioniert. Zwanzig Varianten eines Crossover-Signals aus gleitenden Durchschnitten, getestet an einem Jahrzehnt eines einzigen Index, liefern immer einen Gewinner – und dieser Gewinner ist derjenige, der am besten zum Rauschen passte. Die Gegenmaßnahmen sind unspektakulär: die Regel festlegen, bevor man sie misst; einen Teil der Historie zurückhalten, den man nie ansieht; jede getestete Variante mitzählen; und weniger einstellbare Parameter bevorzugen. XQuant widmet dem Thema ein ganzes Kapitel, noch vor der Faktorforschung – das ist die richtige Reihenfolge.

Stufe drei: der Backtest, wo die meisten Anfänger aufhören

Dies ist die Stufe, an der die meisten Projekte von Autodidakten enden – und zwar still, mit einer beeindruckenden Eigenkapitalkurve. Survivorship Bias, oben beschrieben, ist der erste der beiden Fehler. Look-ahead Bias ist der zweite: Die Strategie verwendet eine Zahl, die zum Zeitpunkt der Orderaufgabe von der Uhr noch nicht geliefert worden war. Die häufigste Variante ist eine Regel, die aus dem heutigen Schlusskurs berechnet und zu ebendiesem Schlusskurs ausgeführt wird. Messen Sie die Distanz, die diese Annahme überspringt.

AbfrageDurchschnittlicher Abstand vom Schlusskurs zur nächsten Eröffnung, monatlich
Das exakte SQL hinter jeder Zahl
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 betrug der durchschnittliche Abstand zwischen einem Schlusskurs und dem nächsten Eröffnungskurs 40.8 Basispunkte für SPY und 107.4 für NVDA. Ein Basispunkt ist ein Hundertstel eines Prozentpunkts. Alle 24 Monate im Panel, beginnend bei August 2024, liegen über null. Ein Backtest, der auf Basis des Schlusskurses entscheidet und zu eben diesem Schlusskurs ausführt, vereinnahmt diese Distanz bei jedem Trade kostenlos – und keine Live-Order tut das je. Look-ahead Bias beim Backtesting seziert diesen Mechanismus, und warum Aktien über Nacht Kurslücken bilden erklärt die Kurslücke selbst.

Stufe vier: Entscheiden, wie viel gekauft wird

Der Fehler besteht hier im Fehlen einer Regel. Die meisten autodidaktischen Trader legen nie eine Regel für die Positionsgröße fest – dadurch haben sie trotzdem eine, nur zufällig: meist gleiche Dollarbeträge je Titel oder schlicht das gerade verfügbare Kapital. Gleiche Dollarbeträge bedeuten nicht gleiches Risiko.

AbfrageZwölf Monate Tagesbewegungen: annualisierte Volatilität und schlechteste Sitzung, acht Werte
Das exakte SQL hinter jeder Zahl
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

In den zwölf Monaten bis zum 31. Juli 2026 bewegte sich COIN mit einer annualisierten Volatilität von 68%, gegenüber 12.7% für SPY am ruhigen Ende der Vergleichsgruppe. Die schlechteste Einzelsitzung schloss 13.34% unter dem vorherigen Schlusskurs, während der schlechteste Tag für SPY bei 2.69% lag. Der gleiche Dollarbetrag in jedem Titel kauft sehr unterschiedliche Tagesschwankungen, und die Schwankung – nicht das Signal – ist das, was ein Anfänger tatsächlich erlebt. Kelly-Kriterium zur Positionsgrößenbestimmung liefert eine formale Antwort darauf, und Konzentrationsrisiko zeigt die Form der informellen Variante.

Stufe fünf: Ausführung und die Kosten, die ein Backtest übersieht

Zwei Kostenarten, aber nur eine ist sichtbar. Kommissionen und Aufsichtsgebühren erscheinen auf der Abrechnung. Slippage nicht: Sie ist die Differenz zwischen dem Kurs auf dem Bildschirm und dem Kurs, den man tatsächlich erhält. Ihre Untergrenze bildet der Bid-Ask-Spread, der Abstand zwischen dem besten Geldkurs und dem besten Briefkurs in diesem Moment. Käufer zahlen den Briefkurs, Verkäufer erhalten den Geldkurs, sodass ein Round Trip ihn zweimal überquert. Der Spread ist nicht konstant.

AbfrageDurchschnittlicher Spread je ET-Halbstunde: AAPL und KO, Freitag, 17. Juli 2026
Das exakte SQL hinter jeder Zahl
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

Das Panel umfasst 16 halbstündige Zeitfenster eines Freitags, vom 09:00 Zeitfenster vor der Eröffnungsglocke bis zum 16:30 Zeitfenster nach Handelsschluss. AAPL notierte in jenem ersten Zeitfenster mit einer Spanne von 10.53 Basispunkten und im letzten mit 3.27; bei KO lagen die Werte bei 28.87 und 8.04. Die engsten Kurse des Tages liegen in der Mitte des Charts, zwischen diesen beiden Enden. Eine Strategie, die zur Eröffnung zwei der liquidesten Werte des Marktes handelt, zahlt andere Kosten als ihre Mittagsvariante, und ein Backtest, der von kostenloser Ausführung ausgeht, bildet keinen der beiden Fälle korrekt ab. Der Bid-Ask-Spread definiert die Kennzahl, warum Spreads zur Eröffnung breiter werden erklärt den Kurvenverlauf, und was der Handel einer Aktie tatsächlich kostet addiert einen vollständigen Round Trip. Zwischen einem sauberen Backtest und echtem Geld liegt noch ein weiterer Schritt: Papierhandel vor dem Einsatz von echtem Geld.

Welche Teile eines Curriculums für A-Aktien lassen sich auf US-Aktien übertragen?

XQuant und vergleichbare Anbieter sind für chinesische A-Aktien und ETFs geschrieben. Die Methode lässt sich unverändert übertragen: die Reihenfolge der Phasen, die Definitionen, die Disziplin gegen Overfitting, die Gewohnheit, Kosten von Anfang an als festen Posten statt als nachträglichen Gedanken einzurechnen, sowie die gesamte Rechenlogik der Positionsgrößenbestimmung. Kursbalken sind Kursbalken. Was sich nicht übertragen lässt, ist das Regelwerk drumherum.

  • A-Aktien unterliegen einer echten T+1-Beschränkung: Heute gekaufte Aktien können erst in der nächsten Handelssitzung verkauft werden. Das US-amerikanische T+1 ist lediglich eine Abwicklungskonvention und blockiert innerhalb eines Handelstags nichts, wobei die Pattern-Day-Trader-Regel Margin-Konten unter 25.000 $ auf drei Day-Trades in fünf Werktagen begrenzt.
  • A-Aktien im Hauptsegment werden bei einer Tagesbewegung von 10% gestoppt, im Wachstumssegment bei 20%. Für US-Aktien gibt es keine Tagesobergrenze; Handelsunterbrechungen ergeben sich stattdessen aus Volatilitätsbändern und nachrichtenbedingten Handelsstopps.
  • Orders für A-Aktien werden in Losgrößen von 100 Aktien gehandelt. Viele US-Broker ermöglichen den Handel mit Bruchstückaktien, was verändert, was eine Positionsgrößen-Regel überhaupt abbilden kann.
  • China erhebt eine Stempelsteuer auf der Verkaufsseite. US-Verkäufer zahlen stattdessen kleine regulatorische Gebühren anderer Art und Größenordnung.
  • Die Handelssitzungsstruktur unterscheidet sich, unter anderem durch eine Mittagspause in Shanghai und Shenzhen. Die Handelszeiten des US-Aktienmarkts verlaufen durchgehend und enden mit einer Schlussauktion.

Jede Kosten- oder Timing-Konstante, die einfach aus einem Kurs in den eigenen Code kopiert wird, ist ein Bug, der nur auf die erste Live-Order wartet.

Die Referenz fixieren, nicht die README

Das Repository weist Stand August 2026 keine getaggten Releases auf, daher ist der belastbare Referenzpunkt ein Commit: 016b66e, datiert auf den 14. Juli 2026. Das ist wichtig für ein Buch, das noch geschrieben wird. Kapitelnummern verschieben sich, README-Dateien werden neu geschrieben, Überschriften wandern, und ein Link, der auf Kapitel sieben verwies, zeigt still und leise auf etwas anderes. Zitiere den Commit und das Datum, notiere den Titel des gelesenen Kapitels statt seiner Nummer, und deine Notizen bleiben auch ein Jahr später überprüfbar. Das Manuskript ist unter CC BY-NC-SA 4.0 veröffentlicht, die Build-Skripte unter MIT. Dieselbe Disziplin ist die letzte Lektion des Lehrplans selbst: Eine Strategie, die sich nicht aus einem fixierten Daten-Snapshot erneut ausführen lässt, ist eine Geschichte, kein Ergebnis.

FAQ

Kann man quantitatives Trading aus einem kostenlosen Open-Source-Buch lernen?

Für die Landkarte ja, und ein offenes Manuskript lässt jede Behauptung an ihrer Quelle überprüfen. Was ein Buch nicht liefern kann, sind die Daten, Kosten und Regeln des eigenen Marktes – und genau dort hört ein Lehrplan, der für eine einzelne Börse geschrieben wurde, auf, zum eigenen Broker zu passen.

Welche Phase eines Quant-Curriculums bringt die meisten Anfänger zu Fall?

Der Backtest. Dort stecken zwei Fehler, und beide schönen das Ergebnis: der Survivorship-Bias, der aus einem erst im Nachhinein zusammengestellten Anlageuniversum entsteht, und der Look-ahead-Bias, der aus einer Ausführung zu einem Kurs entsteht, den es zu diesem Zeitpunkt noch gar nicht gab. Nur 50% der Ticker, die in jener Juniwoche 2016 gehandelt wurden, wurden ein Jahrzehnt später noch gehandelt.

Was ist der Unterschied zwischen Survivorship-Bias und Look-ahead-Bias?

Survivorship-Bias ist ein Problem des Anlageuniversums: Die getesteten Titel wurden dadurch ausgewählt, dass sie überlebt haben. Look-ahead-Bias ist ein Timing-Problem: Die Strategie verwendet eine Zahl, die zum Zeitpunkt der geplanten Orderaufgabe noch gar nicht existierte. Der erste Fehler bläht die Titelliste auf, der zweite die Ausführung.

Funktioniert ein Quant-Kurs zu chinesischen A-Aktien auch für US-Aktien?

Die Methode funktioniert. Die Marktregeln nicht. Behalten Sie die Reihenfolge der Phasen, die Disziplin gegen Overfitting und die Kostenrechnung bei, und ersetzen Sie dann die Dateninfrastruktur, die T+1-Verkaufsbeschränkung, die täglichen Kurslimits und die Losgrößen durch die US-Äquivalente, bevor echtes Geld bewegt wird.


Jedes Panel oben ist eine gespeicherte Abfrage mit dem zugehörigen SQL darunter. Öffnen Sie eines, tauschen Sie die Ticker oder die Datumsangaben aus, und führen Sie es selbst auf dem Strasmore-Terminal aus.

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