Backtesting in Python für Anfänger – mit AI-Code-Generierung
Das hier ist Teil unseres umfassenden Guides Trading-Bot mit Claude bauen und dreht sich um den einen Schritt, an dem die meisten Retail-Trader entweder aufgeben oder sich selbst belügen: den Backtest. Ohne ihn ist jede Strategie nur eine Behauptung. Mit ihm – und mit den richtigen Tools – kann inzwischen jeder, der ein bisschen Python lesen kann, in einem Wochenende prüfen, ob seine Idee überhaupt eine Edge hat.
Die gute Nachricht 2026: du musst dafür nicht mehr selbst Code schreiben. Claude generiert dir einen lauffähigen Backtest in unter einer Minute, sobald du deine Strategie sauber beschrieben hast. Die noch bessere Nachricht: die zwei produktivsten Frameworks (Backtesting.py und VectorBT) sind beide kostenlos. Die schlechte Nachricht: 80% der Anfänger-Backtests im Netz sind unbrauchbar, weil sie Look-Ahead-Bias haben, mit Survivorship-verseuchten Daten arbeiten oder nur einen Marktzustand abdecken. Genau das geht der Artikel an.
Wir gehen durch: welche Frameworks 2026 sinnvoll sind und welche du vergessen kannst, wie du Claude so promptest dass am Ende echter Code rauskommt und kein Fantasie-Skript, wie ein erster vollständiger Backtest auf XAUUSD aussieht, welche Kennzahlen wirklich zählen und welche Anfänger-Fallen jede Strategie ruinieren bevor du je live gehst. Code-Snippets sind echt und laufen wie sie da stehen.
Welches Backtest-Framework 2026 sinnvoll ist – und welches nicht mehr
Es gibt gefühlt zwanzig Python-Backtest-Libraries. Realistisch lohnt es sich, drei zu kennen.
Backtesting.py ist die mit Abstand beste Wahl für deinen ersten Backtest. Klein, schnell, exzellent dokumentiert, ein paar hundert Zeilen API die du in einer Stunde verstanden hast. Du extendest eine Strategy-Klasse, implementierst die zwei Methoden init() und next(), kippst Kerzendaten als DataFrame rein, drückst bt.run() – fertig. Das Plot-Output ist ein interaktives Bokeh-Chart mit Trades, Equity-Kurve und Drawdown. Die Library wird aktiv gepflegt, läuft sauber auf Python 3.11/3.12, und Claude kennt die API in- und auswendig. Wenn du keinen spezifischen Grund hast, woanders anzufangen: nimm das.
VectorBT ist das Profi-Tool für Parameter-Sweeps und Robustness-Tests. Wo Backtesting.py einen Backtest auf einmal rechnet, jagt VectorBT in derselben Zeit tausend Varianten durch – komplett vektorisiert auf Pandas/NumPy mit Numba-Beschleunigung. Wenn du herausfinden willst, ob deine Strategie nur bei einer einzigen Parameter-Kombination funktioniert (das ist der häufigste Hidden-Overfit), führt an VectorBT kein Weg vorbei. Die Lernkurve ist steiler, das Mental Model ist Tensor-statt-Loop. Mein Setup: Backtesting.py zum schnellen Prototyping, VectorBT für die Robustness-Phase.
Backtrader war jahrelang der Standard, ist aber 2026 ein Sorgenkind. Der offizielle Repo hat seit Jahren keinen ernsthaften Commit gesehen, Python 3.12+ braucht Workarounds, und neue Features kommen schlicht nicht mehr. Funktioniert, wenn du Tutorials von 2020 nachbaust, aber ich würde keinem Anfänger empfehlen, hier 2026 einzusteigen.
Drei weitere Namen, die du vielleicht hörst: NautilusTrader ist ein hochperformantes Production-Setup in Rust mit Python-Bindings – richtig gut, aber Overkill für deinen ersten Backtest. Freqtrade ist Crypto-spezifisch und kommt mit Live-Execution direkt mit – wenn du nur Crypto tradest, eine valide Abkürzung. QuantConnect/LEAN ist die institutionellste Option für Retail, aber du bindest dich an deren Cloud und Datenformat.
Für den Rest des Artikels nehmen wir Backtesting.py als Default. Die Konzepte übertragen sich aber 1:1 auf die anderen.
Setup in 5 Minuten
Du brauchst Python 3.11+, einen Editor (VS Code reicht), und das hier in deinem Terminal:
pip install backtesting pandas yfinance numpy
yfinance ist nicht zwingend nötig – Yahoo-Finance-Daten sind für Forex und Indizes okay zum Üben, aber nicht produktionsreif (Datenlöcher, keine Tick-Daten, Hochfrequenz-Holes). Für ernsthafte Arbeit zieh dir die Daten aus MetaTrader 5 via MetaTrader5-Python-Library (siehe dazu MetaTrader 5 mit Claude verbinden) oder über Polygon/Databento. Für deinen ersten Test reicht Yahoo.
Test-Script, mit dem du in 30 Sekunden prüfst ob alles installiert ist:
import yfinance as yf
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from backtesting.test import SMA
data = yf.download("GC=F", start="2024-01-01", end="2025-12-31", interval="1d")
data.columns = [c[0] if isinstance(c, tuple) else c for c in data.columns]
class SMACross(Strategy):
n1 = 20
n2 = 50
def init(self):
self.sma1 = self.I(SMA, self.data.Close, self.n1)
self.sma2 = self.I(SMA, self.data.Close, self.n2)
def next(self):
if crossover(self.sma1, self.sma2):
self.buy()
elif crossover(self.sma2, self.sma1):
self.position.close()
bt = Backtest(data, SMACross, cash=10_000, commission=.0005)
stats = bt.run()
print(stats)
bt.plot()
Wenn das Script läuft, kriegst du eine Ausgabe mit Return [%], Sharpe Ratio, Max. Drawdown [%], Win Rate [%] und ein Bokeh-Chart, das im Browser aufgeht. Du hast gerade einen 20/50-SMA-Crossover auf Gold-Futures durchgerechnet. Glückwunsch, das ist mehr als 95% der Retail-Trader je gemacht haben.
Die Strategie selbst (SMA-Cross auf 1D Gold) ist übrigens kein Heiliger Gral – sie ist absichtlich simpel, damit du das Framework lernst. Echte Edges sehen anders aus.
Claude den Backtest schreiben lassen – aber richtig
Der größte Hebel: du musst nicht mehr selbst Code schreiben. Du beschreibst Claude deine Strategie sauber, und das Modell baut dir den Backtest. Das funktioniert allerdings nur, wenn dein Prompt präzise ist – sonst ratet das Modell und liefert 200 Zeilen Code, die mit deiner eigentlichen Idee wenig zu tun haben.
Mein Standard-Prompt-Template, das ich über Monate auf Stabilität getestet habe:
Du bist ein quantitativer Backtest-Engineer. Schreib mir
einen vollständigen, lauffähigen Backtest mit der Python-
Library `backtesting.py` für folgende Strategie:
SYMBOL: XAUUSD (Gold-Futures, Ticker "GC=F" über yfinance)
TIMEFRAME: 1h
ZEITRAUM: 2023-01-01 bis 2025-12-31
STARTKAPITAL: 10.000 USD
COMMISSION: 0.05% pro Trade
ENTRY-LOGIK:
- EMA-20 kreuzt EMA-50 nach oben
- RSI(14) ist zwischen 40 und 60 (kein Overbought)
- ATR(14) > Median(ATR(14), 100) (mind. mittlere Vola)
EXIT-LOGIK:
- Stop-Loss: 1.5 × ATR(14) unter Entry
- Take-Profit: 3.0 × ATR(14) über Entry (1:2 RR)
- Trailing-Stop sobald 1 × ATR im Profit
POSITION-SIZING:
- Fixed-Fractional, Risk-per-Trade = 1% des Equity
OUTPUT:
- Return [%], Sharpe, Sortino, Max-DD, Win-Rate, Profit-Factor
- Plot der Equity-Kurve
WICHTIG:
- Nutze .I() für alle Indikatoren (vektorisierte Init)
- Keine look-ahead Operationen
- Kommentare auf Deutsch, Variablennamen englisch
- Wenn etwas an meiner Spec unklar ist, frag nach – rate nicht
Was du an diesem Prompt nicht weglassen darfst: die expliziten Werte. "Eine RSI-Strategie auf Gold" gibt dir Müll. Symbol, Timeframe, Zeitraum, Kapital, Commission, exakte Entry-/Exit-Regeln, Position-Sizing-Modell, gewünschte Output-Metriken – alles. Der letzte Satz ("frag nach, rate nicht") ist ein psychologisch wirksamer Trick, der Claude dazu bringt, fehlende Spezifikationen abzufragen statt zu hadern.
Was rauskommt, ist meistens zu 85–90% korrekt. Der Rest ist Iteration: "Der RSI-Filter ist falsch herum, ich will Werte über 40 und unter 60, nicht entweder oder", "Die ATR-Berechnung greift auf die aktuelle Bar zu, das ist Look-Ahead, fix das mit shift(1)". Diese Korrektur-Dialoge sind das eigentliche Lernen.
Lead-Magnet-Hinweis
Hol dir das kostenlose AI-Trading-Starter-Bundle: 5 fertige Claude-Prompts inklusive dem oben gezeigten Backtest-Prompt-Template – plus ein PDF mit den 7 häufigsten Backtest-Fehlern und wie du sie abfängst.
Die Kennzahlen, auf die du wirklich schauen musst
Wenn dein erster Backtest läuft, springt dir eine Tabelle mit 20+ Zahlen ins Gesicht. Drei davon zählen, der Rest ist meistens Beiwerk.
Sharpe Ratio ist die populärste, aber missverstandenste Kennzahl. Sie misst Rendite pro Einheit Volatilität – Werte über 1 sind gut, über 2 herausragend, über 3 verdächtig. Wenn dein Backtest 4.7 Sharpe ausspuckt, hast du fast immer ein Overfitting-Problem oder einen Look-Ahead-Bug. Echte Live-Strategien mit Sharpe 2+ sind selten.
Max Drawdown ist die ehrlichere Zahl, weil sie nicht statistisch geglättet ist. Wenn dein Backtest sagt "Return 80%, Max-DD 35%", übersetzt sich das in der Praxis so: du wärst irgendwann auf -35% gesessen und hättest dich gefragt ob die Strategie kaputt ist. Drei von vier Retail-Tradern halten Strategien mit >20% DD psychologisch nicht durch, egal wie hoch der Endgewinn theoretisch ist. Bei FTMO oder anderen Prop-Firms ist 10% DD die harte Grenze.
Profit-Factor (Bruttogewinn / Bruttoverlust) ist die unterschätzteste Kennzahl. Werte unter 1.3 sind fragil – kleine Veränderungen im Setup oder Marktregime kippen die Strategie. Werte über 2.5 mit ausreichend Trades (>100) sind realistisch belastbar. Ein Profit-Factor von 1.8 mit 250 Trades ist meistens robuster als ein PF von 3.5 mit 40 Trades.
Was du nahezu ignorieren kannst: Win-Rate. Eine 35%-Win-Rate-Strategie kann hochprofitabel sein (Trend-Following lebt davon), eine 80%-Win-Rate kann dich ruinieren (wenn der eine Verlierer fünfmal so groß ist wie zehn Gewinner). Win-Rate ist eine Marketing-Zahl, kein Edge-Indikator.
Die fünf Fallen, in die jeder Anfänger tappt
Ich hab das selbst alles erlebt, deshalb in der Reihenfolge nach gefährlich:
Look-Ahead-Bias. Du benutzt im Backtest Daten, die zum Trade-Zeitpunkt noch nicht verfügbar waren. Klassiker: Schluss-Kurs der aktuellen Kerze als Entry-Trigger – live hast du den nicht. Backtesting.py macht das richtig, solange du self.data.Close[-1] nicht in init() referenzierst, aber Custom-Code mit Pandas verschiebt gerne mal versehentlich um einen Index. Faustregel: jede Berechnung, die auf "heute" zugreift, muss in .next() stehen, nicht in .init().
Survivorship-Bias. Du backtestest Aktien, die heute noch existieren. Lehman Brothers, Wirecard, FTX – alle weg, aber dein historischer Aktien-Datensatz enthält sie meistens nicht. Eine "Buy-the-dip"-Strategie auf S&P-500-Aktien rückwirkend gerechnet sieht großartig aus, weil die Bankrotte rausgefiltert wurden. Für Forex/Gold ist das weniger relevant, aber bei Aktien-Backtests musst du Survivorship-bereinigte Datensätze nutzen.
Overfitting. Du optimierst deine 4 Parameter so lange, bis der Backtest schöne Zahlen ausspuckt. Live performed nichts mehr. Lösung: Train/Test-Split (z.B. 2019-2023 zum Optimieren, 2024-2025 zum Validieren) plus Walk-Forward-Analyse. Walk-Forward ist 2026 der De-facto-Standard: du rollst das Optimierungs-Fenster Schritt für Schritt durch die Zeit und prüfst jede Optimierung an einem ungesehenen Folge-Zeitraum. Wenn deine Strategie das übersteht, ist sie deutlich robuster.
Unrealistische Slippage und Spreads. Backtest mit 0% Slippage und 0.01% Spread ist Wunschdenken. Realistisch für Gold (XAUUSD) sind 0.05–0.10% Spread plus 0.02–0.05% Slippage bei aggressiven Entries, mehr bei News-Spikes. Backtesting.py hat einen spread-Parameter im Constructor – nutze ihn. Sonst sieht deine 0.2-Sharpe-Strategie aus wie 0.7-Sharpe.
Zu wenig Trades. Wenn dein Backtest 23 Trades hat, ist das statistisch wertlos – ein einzelner Glückstreffer verzerrt die Zahlen massiv. Faustregel: mindestens 100 Trades, idealerweise 200+, über mindestens zwei verschiedene Marktphasen (Trend und Range). Wenn deine Strategie nur 30 Trades pro Jahr macht, brauchst du 5+ Jahre Backtest-Daten. Wer das ignoriert, läuft mit einer "Strategie" rum, die nichts anderes ist als ein gut sitzendes Random-Sample.
Walk-Forward in 40 Zeilen Code
Walk-Forward ist konzeptuell einfach: zerlege deine Daten in N rollende Fenster. In jedem Fenster: optimiere auf den ersten 70%, teste auf den restlichen 30%. Schreib nur die Test-Performance auf. Am Ende hast du eine Equity-Kurve aus Out-of-Sample-Trades – das ist die realistischste Schätzung dessen, was live passieren würde.
Konzept-Skizze mit Backtesting.py:
import pandas as pd
from backtesting import Backtest
def walk_forward(data, strategy_cls, window=252, step=63):
"""window/step in Trading-Tagen: 252 ≈ 1 Jahr, 63 ≈ 3 Monate"""
results = []
for start in range(0, len(data) - window - step, step):
train = data.iloc[start : start + window]
test = data.iloc[start + window : start + window + step]
# 1. Optimierung auf Train
bt_train = Backtest(train, strategy_cls, cash=10_000, commission=.0005)
opt = bt_train.optimize(n1=range(10, 50, 5),
n2=range(50, 200, 10),
maximize='Sharpe Ratio')
# 2. Optimierte Parameter auf Test anwenden
strategy_cls.n1 = opt._strategy.n1
strategy_cls.n2 = opt._strategy.n2
bt_test = Backtest(test, strategy_cls, cash=10_000, commission=.0005)
stats = bt_test.run()
results.append({
'start': test.index[0],
'sharpe': stats['Sharpe Ratio'],
'return': stats['Return [%]'],
'n1': opt._strategy.n1, 'n2': opt._strategy.n2
})
return pd.DataFrame(results)
Wenn deine Walk-Forward-Equity dauerhaft positiv ist und der durchschnittliche Out-of-Sample-Sharpe über 0.8 bleibt, ist deine Strategie ernsthaft ein Live-Test wert. Wenn die Out-of-Sample-Performance massiv schlechter ist als In-Sample, hast du eindeutig overfittet – kein Drama, das ist Teil des Lernens.
Was du tun solltest, sobald dein erster Backtest läuft
Drei Schritte in dieser Reihenfolge.
Erstens: dieselbe Strategie auf zwei weiteren Symbolen testen. Wenn deine Gold-EMA-Crossover-Strategie auf EURUSD und DAX auch (irgendwie) funktioniert, ist sie kein Curve-Fit auf Gold. Wenn sie nur auf Gold funktioniert, kann es eine echte Gold-spezifische Edge sein – oder Glück. Du musst es wissen.
Zweitens: Parameter-Robustness-Test. Wechsel die SMA-Längen um ±20% und schau, wie sich die Performance verändert. Stabile Strategien zeigen graduelle Verschlechterung, brüchige Strategien fallen vom Sharpe-1.5-Plateau auf -0.3 wenn du n1 von 20 auf 22 ziehst. Genau dafür ist VectorBT da – tausend Varianten in Sekunden.
Drittens: Live-Demo-Trading mindestens 30 Tage. Selbst der ehrlichste Backtest hat blinde Flecken (Broker-spezifische Spreads, Latenz, Wochenend-Gaps die im Daten-Feed glatt erscheinen). Demo-Account auf deinem Broker, gleiche Strategie programmatisch laufen lassen, vergleiche die Demo-Trades mit dem, was der Backtest vorhergesagt hätte. Wenn die Abweichung größer als 20% ist, hast du Modelling-Bugs.
Diesen kompletten Workflow – inklusive sechs vorgerechneter Backtests (XAUUSD-Scalping, EURUSD-Trend, DAX-Open-Range u.a.), Walk-Forward-Templates und der Risk-Layer-Anbindung – haben wir im AI Trading Guide ausgearbeitet. Speziell für die Gold-Strategie lohnt sich XAUUSD Scalping mit AI: Setup und Backtest, wo wir den fertigen Backtest mit echten Slippage-Werten durchgehen.
Den kompletten Backtest-Workflow haben wir aufgeschrieben
Sechs fertige Backtests, Walk-Forward-Code, der gesamte Risk-Layer und das Claude-Prompt-Set – alles in einem 81-seitigen Guide mit funktionierendem Code-Repository.
Häufige Fragen (FAQ)
Brauche ich Python-Vorkenntnisse, um mit Backtesting anzufangen?
Sehr wenig. Du musst Python-Code lesen können – also verstehen, was eine Funktion ist, was ein DataFrame ist, was eine for-Schleife macht. Aktiv programmieren musst du in 2026 kaum mehr selbst: Claude generiert dir den Code, du iterierst per Dialog. Plan trotzdem 10–20 Stunden Python-Grundlagen ein, sonst verstehst du nicht, was der generierte Code tut – und damit auch nicht, wo Bugs sitzen.
Welche Daten kann ich kostenlos zum Backtesten benutzen?
Yahoo Finance über yfinance ist okay für Tagesdaten von Aktien, Indizes und Major-Forex-Paaren. Limits: keine Tick-Daten, gelegentliche Datenlöcher, kein Bid/Ask. Für Forex- und Crypto-Daten in höherer Auflösung sind ccxt (Crypto, kostenlos) und die MetaTrader-5-Python-Library (Forex/CFDs, kostenlos wenn du einen MT5-Demo-Account hast) die bessere Wahl. Für ernsthafte Backtests mit Tick-Daten kommst du um kostenpflichtige Quellen (Polygon, Databento, Dukascopy) nicht herum.
Wie viele Trades brauche ich, damit ein Backtest aussagekräftig ist? Faustregel: mindestens 100, idealerweise 200+ Trades, über mindestens zwei verschiedene Marktphasen (Trend und Range, idealerweise auch eine Vola-Spike-Phase wie März 2020 oder Oktober 2022). Unter 50 Trades sind die Konfidenz-Intervalle so weit, dass du faktisch nichts aussagen kannst.
Ist Backtesting.py oder VectorBT besser für Anfänger? Backtesting.py. Die API ist deutlich einfacher zu lernen (zwei Methoden statt einer Tensor-Welt), die Plots sehen out-of-the-box gut aus, und die Dokumentation ist hervorragend. VectorBT lohnt sich, sobald du Parameter-Sweeps mit hunderten Varianten machst – das kommt aber erst, wenn deine erste Strategie überhaupt läuft.
Wie verhindere ich Overfitting beim Backtesting? Drei harte Maßnahmen: (1) Train/Test-Split, also nie auf demselben Datensatz optimieren und validieren. (2) Walk-Forward-Analyse über mehrere rollende Fenster. (3) Cross-Symbol-Tests: läuft deine Strategie auch auf ähnlichen Instrumenten? Wenn ja, deutlich robuster. Und: weniger Parameter sind besser als mehr. Eine 3-Parameter-Strategie überfittet schwerer als eine 12-Parameter-Strategie.
Was kostet das ganze Setup im Monat? Wenn du Yahoo-Daten nimmst, Backtesting.py auf deinem Laptop laufen lässt und Claude Pro (20 USD/Monat) für die Code-Generierung benutzt: 20 USD/Monat. Sobald du auf API-Backtests mit eigenem Skript-Generator umstellst, kommen 5–15 USD/Monat Anthropic-API-Inferenz dazu. Für die komplette Implementation samt VPS-Setup und Live-Trading-Stack siehe unseren AI Trading Guide.
TL;DR
Backtesting in Python ist 2026 keine Quant-Disziplin mehr – es ist eine Dialog-Disziplin. Backtesting.py installieren, Claude den Code generieren lassen, drei Kennzahlen anschauen (Sharpe, Max-DD, Profit-Factor), fünf Anfänger-Fallen vermeiden (Look-Ahead, Survivorship, Overfitting, unrealistische Kosten, zu wenig Trades), Walk-Forward laufen lassen, dann Cross-Symbol-Test, dann Demo. Wenn deine Strategie diesen Trichter übersteht, ist sie wirklich live-tauglich. Wenn nicht, hast du in einem Wochenende gelernt, was Quants in fünf Jahren lernen – ohne fünf Jahre Geld zu verbrennen.