← Zurück zu den Artikeln
July 5, 2026
5 min read

Das Fidelity-Gate: Grob-zu-fein-Backtesting täuscht dich schneller – es sei denn, der billige Proxy rankt genauso wie die teure Auswertung

Das Fidelity-Gate: Grob-zu-fein-Backtesting täuscht dich schneller – es sei denn, der billige Proxy rankt genauso wie die teure Auswertung
#Algorithmisches Trading
#Backtest
#Multi-Fidelity
#Hyperband
#ASHA
#Sukzessive Halbierung
#Overfitting
#Validierung
Part 6 of 10 · Collection
High-Performance Backtest Engines

Teil der Serie „Backtests ohne Illusionen".

Jede ernsthafte Parametersuche stößt an dieselbe Wand: Der Suchraum ist riesig, und jede ehrliche Auswertung ist teuer. Eine Multi-Timeframe-Strategie mit einem Dutzend Schwellenwerten und drei Indikatorperioden, ausgewertet über einen Walk-Forward-Split mit mehreren Folds, kann pro Konfiguration Sekunden kosten. Zehntausend Konfigurationen sind Stunden. Also suchst du nach einer Abkürzung, und die Abkürzung ist immer derselbe Gedanke: billig auswerten, nur die Überlebenden zum teuren Test befördern. Zehntausend Configs auf einem Fold screenen, die besten paar Hundert behalten, diese auf allen Folds laufen lassen. Auf Stundenkerzen screenen, nur für die Finalisten bis auf 1-Sekunden-Kerzen herunterbrechen.

Das ist Grob-zu-fein-Suche – Drill-Down, Multi-Fidelity, Sukzessive Halbierung, Hyperband, ASHA – und sie ist eine der wirklich guten Ideen in der Optimierung. Sie kann aus einem Tag Rechenzeit eine Stunde machen. Wir nutzen sie. Aber sie verbirgt eine Falle, die so leise ist, dass die meisten, die sie einsetzen, nie darauf prüfen, und die Falle ist diese: Die gesamte Methode setzt voraus, dass dein billiger Proxy die Konfigurationen genauso rankt wie die teure Auswertung. Wenn nicht, suchst du nicht schneller. Du wirfst deine zukünftigen Gewinner am ersten Gate weg und beförderst Rauschen – du täuschst dich nur schneller selbst.

Dieser Artikel handelt von der einen Messung, die dir sagt, ob dein Drill-Down real ist oder eine Täuschung. Wir haben sie an unserer eigenen Multi-Timeframe-Suche durchgeführt, und die Antwort war unangenehm: Bei der billigsten Fidelity rankte unser Proxy die Konfigurationen fast zufällig (Spearman ρ ≈ 0.03). Hätten wir bei dieser Fidelity aggressiv geprunt – wozu jeder Standard-ASHA-Default einlädt –, hätten wir die späteren Gewinner bereits in der ersten Runde verworfen. Die Lösung ist ein verpflichtendes Gate, das vor der Suche läuft: die Rangkorrelation messen und sich weigern, unterhalb der Fidelity zu prunen, bei der sie vertrauenswürdig ist.

Was Multi-Fidelity-Suche eigentlich ist

Eine Grob-zu-fein-Suchkaskade: Tausende billige Low-Fidelity-Configs werden links breit gescreent, nur die besten Überlebenden werden nach rechts durch zunehmend teurere vollständige Auswertungen befördert – Sukzessive Halbierung verengt ein breites smaragdgrünes Feld von Kandidaten auf wenige leuchtende Finalisten

Die Familie dieser Methoden hat eine Form. Du definierst eine Fidelity (auch Ressource oder Budget genannt): einen Regler von billig zu teuer, der an seinem Maximum das wahre Ziel liefert. Dann lässt du Konfigurationen bei niedriger Fidelity laufen, rankst sie, behältst den besten Anteil und lässt nur diese Überlebenden bei höherer Fidelity erneut laufen – wiederholst, bis eine kleine Zahl von Finalisten bei voller Fidelity ausgewertet wurde.

Sukzessive Halbierung (Jamieson & Talwalkar, 2016) ist der Kern: N Configs bei der Mindestressource starten, die besten 1/η behalten, die Ressource mit η multiplizieren, wiederholen. Hyperband (Li et al., 2018) verpackt die sukzessive Halbierung in eine äußere Schleife, die über verschiedene Startressourcen hedgt, sodass du nicht raten musst, wie aggressiv geprunt werden soll. ASHA (Li et al., 2020) ist die asynchrone, parallelfreundliche Version. Die Eliminierungsrate η ist der eine gemeinsame Regler; der kanonische Standard ist η = 3 – auf jeder Stufe das obere Drittel behalten, das Budget verdreifachen.

Die Fidelity selbst kann so ziemlich alles sein, was von billig zu teuer verläuft und gegen die Wahrheit konvergiert:

  • Anzahl der Walk-Forward-Folds. Auswertung auf 1 Fold, dann 2, dann 3, bis hin zu K. Das ist die Fidelity, die wir im Folgenden untersuchen, weil sie für einen Backtest mit rollierendem Out-of-Sample-Split die natürliche ist.
  • Kerzenauflösung. Auf 1-Stunden-Bars screenen, auf 1-Minute befördern, nur für Finalisten bis auf 1-Sekunde oder Roh-Trades herunterbrechen. Das ist die Idee des adaptiven Drill-Downs, angewandt auf die Suche statt auf die Fill-Simulation.
  • Länge der Historie, Epochen, Dataset-Subsample – die klassischen ML-Fidelities.

In einem Backtest sind Folds und Auflösung die beiden, die zählen, und – das ist der Punkt des ganzen Artikels – sie sind nicht gleich sicher. Eine der beiden hat einen Bias, der still und leise die falschen Parameter auswählt, egal wie sorgfältig man sie gated.

Die eine Annahme, auf der alles ruht

Der stille Kollaps des Drill-Downs: ein billiges Low-Fidelity-Ranking, das dem teuren vollständigen Ranking widerspricht, sodass die wahren smaragdgrünen Gewinner am ersten Gate weggeprunt werden, während rot-oranges Rauschen nach oben befördert wird – und niemals ein Fehler geworfen wird

Schreib auf, was sukzessive Halbierung tatsächlich braucht, um korrekt zu sein. Sie braucht nicht, dass die billige Fidelity den richtigen Zielwert liefert – niemanden kümmert, dass ein Fold einen anderen Sharpe meldet als sechs Folds. Sie braucht etwas Schwächeres, aber weitaus Spezifischeres: Die billige Fidelity muss Konfigurationen genauso ranken wie die teure. Wenn Config A bei voller Fidelity Config B schlägt, sollte A auch bei niedriger Fidelity tendenziell B schlagen. Das ist alles. Und das ist zugleich alles, worauf es ankommt.

Formal ist die Größe, die darüber entscheidet, ob Drill-Down funktioniert, die Rangkorrelation zwischen dem Low-Fidelity- und dem High-Fidelity-Ziel über den Konfigurationsraum hinweg. Ist diese Korrelation hoch, sind die Überlebenden der billigen Runde dieselben Configs, die auch die teure Runde gewonnen hätten, und du hast Rechenzeit gratis gespart. Ist sie niedrig, ist die billige Runde ein Zufallsfilter: Sie verwirft gute Configs und befördert schlechte, und du hast dein Budget dafür ausgegeben, dich schneller zu einer schlechteren Antwort vorzuarbeiten. Es gibt keine mittlere η-Einstellung, die dich rettet – ein schlechter Proxy, sanft geprunt, lässt trotzdem Gewinner durchsickern; aggressiv geprunt verblutet er sie regelrecht.

Das Scheitern ist auf die übliche Weise unsichtbar. Die Suche läuft durch, meldet einen Champion, der Champion sieht In-Sample gut aus. Kein Fehler wird geworfen. Du entdeckst erst, dass der Proxy gelogen hat, wenn der Champion Out-of-Sample zerfällt – und bis dahin hast du das Scheitern der Strategie zugeschrieben, nicht der Suche, die sie ausgewählt hat. Die Disziplin ist also dieselbe, bei der diese Serie immer wieder landet: Miss das, was die Methode voraussetzt, bevor du der Methode vertraust. Für Drill-Down ist das zu Messende die Rangkorrelation, und die Messung ist billig.

Es messen: das Fidelity-Gate

Das Fidelity-Gate als Kontrollpunkt: Bevor einer Stufe vertraut wird, werden rund zweihundert zufällige Configs auf jeder Fidelity-Ebene bewertet, und die Rangkorrelation zwischen dem billigen Proxy und der vollständigen Auswertung wird an einem leuchtenden Tor gemessen, das sich erst öffnet, wenn beide Rankings übereinstimmen

Das Gate ist ein kleines Experiment, das du einmal vor der eigentlichen Suche auf demselben Raum durchführst, den du gleich durchsuchen wirst. Der Ablauf:

  1. Ein paar Hundert Konfigurationen zufällig aus dem Parameterraum ziehen (wir verwenden ~200 – genug für eine stabile Spearman-Schätzung, billig genug, um es sich zu leisten).
  2. Jede davon auf jeder Fidelity-Stufe auswerten: bei 1 Fold, 2 Folds, … bis zu den vollen K Folds. Bei einer Fold-Anzahl-Fidelity ist das nahezu kostenlos, weil die Folds, die man für die billigen Stufen berechnet, in der teuren wiederverwendet werden – ein kumulativer Durchschnitt.
  3. Für jede Stufe r die Spearman-Rangkorrelation zwischen dem r-Fold-Ranking und dem vollen K-Fold-Ranking über diese ~200 Configs berechnen.
  4. Die erste Stufe, bei der ρ eine Schwelle überschreitet (wir verwenden ρ ≥ 0.5), ist die flachste Fidelity, bei der du prunen darfst. Darunter ist das Ranking zu verrauscht, um vertrauenswürdig zu sein; dort darfst du keine Configs eliminieren.

Das Ganze sind ein paar Dutzend Zeilen. Das Herzstück:

def fidelity_check(cache, n_probe, seed=7):
    """Spearman ρ: cumulative mean over the first r folds (in FOLD_ORDER)
    vs the full K-fold objective, on n_probe random configs."""
    rng = np.random.default_rng(seed)
    k = len(FOLDS)
    per_fold = np.empty((k, n_probe))
    order_win = np.array([list(FOLDS[fi]) for fi in FOLD_ORDER], np.int64)
    for j in range(n_probe):
        p = _unit_to_params(rng.random(len(PNAMES)))       # random config
        scores, *_ = eval_group(cache, p, _sp_of(p)[None, :], order_win, False)
        per_fold[:, j] = scores[0]                          # score on each fold
    cums = np.cumsum(per_fold, axis=0) / np.arange(1, k + 1)[:, None]  # r-fold mean
    rhos = []
    for r in range(1, k):
        rho = spearmanr(cums[r - 1], cums[-1]).statistic    # r folds vs all K
        rhos.append(0.0 if math.isnan(rho) else rho)
    return rhos

Ein bewusstes Detail sei angemerkt: Die Folds werden in FOLD_ORDER genommen, einer verschachtelten Reihenfolge, die frühe und späte Ausschnitte des Kalenders abwechselt (Fold 0, dann ein mittlerer Fold, dann Fold 1, dann ein späterer, …). Das ist enorm wichtig und Gegenstand eines späteren Abschnitts: Es bedeutet, dass „1 Fold" ein einzelner Ausschnitt ist, der die Mitte der Historie überspannt, und „2 Folds" ein früher plus ein später Ausschnitt sind – niemals ein zusammenhängendes aktuelles Fenster. Die billige Fidelity wird billiger, indem man weniger Folds nutzt, nicht aktuellere.

Ergebnisse: Ein Fold rankt fast zufällig

Rangkorrelation steigt mit der Fold-Anzahl: eine ansteigende Kurve von Spearman rho, die bei einem Fold nahe einem Münzwurf-Streudiagramm beginnt und sich bis zu fünf Folds zu nahezu perfekter Übereinstimmung aufsteilt, mit einer horizontalen Gate-Linie in der Mitte, unterhalb derer Pruning verboten und oberhalb derer es erlaubt ist

Hier ist, was das Gate meldete, ausgeführt an zwei unserer Multi-Timeframe-Setups. Die Zahl ist Spearman ρ zwischen dem r-Fold-Ranking und dem vollen K-Fold-Ranking über ~200 zufällige Configs – wie treu das Ranking bei billiger Fidelity das Ranking bei voller Fidelity vorhersagt.

Folds r Multi-TF-Lauf Ein härteres Regime
1 +0.43 +0.03
2 +0.67 +0.43
3 +0.78 +0.78
4 +0.82
5 +0.91 +0.91

Lies zuerst die Spalte für das härtere Regime, denn sie ist die alarmierende. Bei einem Fold ist ρ = 0.03. Das ist keine schwache Korrelation; es ist keine Korrelation – das Ein-Fold-Ranking von zweihundert Konfigurationen ist statistisch nicht von einem Durchmischen zu unterscheiden. Ein Lauf mit sukzessiver Halbierung, der (wie die meisten standardmäßig) so konfiguriert ist, dass er bei min_resource = 1 mit dem Pruning beginnt, würde in diesem Regime seinen ersten und aggressivsten Schnitt auf Basis eines Münzwurfs machen. Die Configs, die letztlich bei voller Fidelity gewinnen würden, haben eine 50/50-Chance, die allererste Runde zu überleben. Bis du die Fidelity erreichst, bei der das Ranking etwas bedeutet (ρ = 0.78 bei drei Folds), sind die meisten von ihnen schon verschwunden.

Die Multi-TF-Spalte ist milder, macht aber denselben Punkt auf andere Weise. Selbst dort gibt ein Fold ρ = 0.43 – unterhalb unseres 0.5-Gates. Das sieht nach einer anständigen Korrelation aus, und genau das ist die Gefahr: 0.43 ist hoch genug, um dich einzulullen, und niedrig genug, um deine besten Configs durchsickern zu lassen. Erst bei zwei Folds (ρ = 0.67) wird das Ranking vertrauenswürdig.

Zwei Dinge lassen sich daraus verallgemeinern. Erstens: ρ bei einem Fold ist regimeabhängig und unzuverlässig – wir haben je nach Setup Werte zwischen 0.03 und 0.43 gemessen, und in keinem der beiden Fälle hat ein einzelner Fold die Messlatte gerissen. Zweitens: ρ steigt monoton und schnell – bei drei Folds liegen beide Setups bei 0.78, und bei fünf konvergieren sie auf 0.91. Das Signal ist da; du musst nur genug Fidelity aufwenden, um es zu sehen. Die Aufgabe des Gates ist es, genau die Stufe zu finden, an der „genug" beginnt – und Pruning darunter zu verbieten.

Warum ein einzelner Fold so verrauscht ist

Das Rauschen ist kein Bug in unserer Fold-Konstruktion; es ist intrinsisch, und zu verstehen, warum, bewahrt dich davor, es auf die falsche Weise zu „reparieren". Ein einzelner Walk-Forward-Fold ist ein kurzes Fenster – Wochen eines einzigen Marktregimes. Der Score einer Strategie auf diesem Fenster wird dominiert davon, wie gut ihre Parameter zufällig zu diesem Regime passen, was nur locker damit zusammenhängt, wie gut sie generalisieren. Zwei Configs, die sich in ihrer Qualität wirklich unterscheiden, können auf einem einzelnen Fold die Plätze tauschen, nur weil eine von ihnen einen Trend erwischt hat, den dieser Fold zufällig enthielt. Das Ziel auf einem Fold ist ein Schätzer mit hoher Varianz für das Ziel, das dich eigentlich interessiert, und Rangkorrelation ist genau das, was hohe Varianz zuerst zerstört – du kannst den Mittelwert eines Schätzers erhalten, während sein Ranking reines Rauschen ist.

Weitere Folds mitteln diese Varianz herunter. Jeder Fold ist eine teilweise unabhängige Stichprobe von Marktbedingungen; der r-Fold-Mittelwert ist ein Schätzer mit geringerer Varianz, und sein Ranking konvergiert gegen das Ranking bei voller Fidelity. Genau das ist der Anstieg ρ = 0.03 → 0.43 → 0.78 → 0.91: nicht, dass sich das Ziel ändert, sondern dass sich seine Rang-Schätzung stabilisiert, während sich regimespezifisches Glück herausmittelt. Die Lehre daraus ist, dass Fidelity bei einem Backtest im Grunde davon handelt, wie viele unabhängige Regime man gesampelt hat – und eines reicht fast nie aus, um darauf zu ranken.

Das erklärt auch, warum das härtere Regime bei 0.03 beginnt, während der Multi-TF-Lauf bei 0.43 startet. Im härteren Regime ist der einzelne Fold regimespezifischer – die Ein-Fold-Scores der Configs werden stärker von Glück und weniger von dauerhaftem Edge getrieben, sodass sie näher am Zufall ranken. Das Gate liest diesen Unterschied automatisch und reagiert, indem es mehr Folds verlangt, bevor es pruned. Du musst nicht im Voraus wissen, in welchem Regime du dich befindest; du misst.

Das Gate im Code: die Mindest-Fidelity automatisch anheben

Der Output des Gates ist eine einzelne Ganzzahl: min_resource, die flachste Fidelity, bei der ASHA prunen darf. Die Regel ist mechanisch – die Stufen durchgehen und die erste nehmen, deren ρ die Schwelle überschreitet:

RHO_GATE = 0.5
min_res = len(FOLDS)                      # default: pruning OFF (full fidelity)
rhos = fidelity_check(cache, n_probe=200) # [ρ@1, ρ@2, …, ρ@(K-1)]
passing = [r for r, rho in enumerate(rhos, 1) if rho >= RHO_GATE]
if passing:
    min_res = passing[0]                  # first rung that clears the gate

pruner = SuccessiveHalvingPruner(min_resource=min_res, reduction_factor=3)

Verfolgen wir das durch die beiden Läufe. Im Multi-TF-Setup scheitert ρ@1 = 0.43 am Gate, aber ρ@2 = 0.67 besteht, sodass min_resource automatisch auf 2 angehoben wird: ASHA lässt jede Config auf mindestens zwei Folds laufen, bevor sie irgendetwas eliminieren darf, und prunt von dort an normal weiter. Im härteren Regime scheitern sowohl ρ@1 = 0.03 als auch ρ@2 = 0.43; ρ@3 = 0.78 ist die erste, die besteht, sodass min_resource zu 3 wird. Und der entscheidende Fallback: Wenn keine Stufe 0.5 erreicht, ist passing leer und min_resource bleibt bei K – Pruning wird vollständig abgeschaltet, und die Suche degradiert elegant zu einer schlichten Full-Fidelity-Suche statt zu einer schnellen, falschen. Ein Drill-Down, das seinen Proxy nicht beweisen kann, verweigert schlicht das Pruning.

Das ist die gesamte Philosophie in einer Zeile Kontrollfluss. Der Standard jeder Bibliothek für sukzessive Halbierung ist „prune ab min_resource = 1, vertraue der billigen Stufe". Das Gate ersetzt das durch „prune ab der ersten Stufe, die die Daten als vertrauenswürdig ausweisen, und wenn keine das tut, prune gar nicht". Es kostet eine einmalige ~200-Config-Probe im Voraus und verwandelt Drill-Down von einem Akt des Glaubens in eine gemessene Entscheidung. Die Eliminierungsrate η = 3 bleibt unverändert; das Gate rührt nicht daran, wie hart du prunst, sondern nur, wie früh du damit anfangen darfst.

Eine ehrliche Anmerkung, die im Code oben sichtbar wird: Das Anheben von min_resource frisst an der Beschleunigung. Bei 3 Folds statt 1 zu prunen bedeutet, dass jede Config – auch die, die du verwerfen wirst – für drei Folds bezahlt. Das ist der Preis der Korrektheit, und es ist der richtige Tausch: Eine 2-fach kleinere Beschleunigung bei einer Suche, die echte Gewinner findet, schlägt eine 6-fache Beschleunigung bei einer Suche, die sie verwirft. Das Gate macht diesen Tausch explizit, statt ihn zu verstecken.

Die falsche billige Achse: kürzere Historie ist eine Falle

Es gibt eine billige Fidelity, die verlockend, naheliegend und verzerrt (biased) ist, und es lohnt sich, sie beim Namen zu nennen, weil jeder zuerst danach greift: kürzere Historie. Configs auf dem letzten Monat screenen, die Überlebenden auf die vollen zwei Jahre befördern. Das ist trivial billig und fühlt sich an wie derselbe Gedanke wie weniger Folds. Ist es aber nicht.

Weniger Folds und kürzere Historie unterscheiden sich auf eine entscheidende Weise. Eine Fold-Anzahl-Fidelity, richtig gemacht, überspannt weiterhin den gesamten Kalender – sie sampelt ihn nur gröber. Eine Kürzere-Historie-Fidelity sampelt ein Teilintervall des Kalenders dicht. Und ein Teilintervall der Markthistorie ist ein spezifisches Regime. Wenn du Configs auf dem letzten Monat rankst, bekommst du keine verrauschte, aber unverzerrte Schätzung ihres Rankings über die gesamte Periode; du bekommst eine verzerrte Schätzung, die systematisch Configs bevorzugt, die auf das Regime des letzten Monats getunt sind. Erhöhe die Stichprobengröße, so viel du willst – mittle über mehr Configs, mehr Trials –, und der Bias schrumpft nicht, weil es keine Varianz ist. Du wirst die Configs befördern, die am besten zum Screening-Fenster passen, und genau das sind diejenigen, die am ehesten auf ein vorübergehendes Regime overfittet sind.

Deshalb durchläuft unsere Fidelity die Folds in einer verschachtelten statt in einer chronologischen Reihenfolge. Bei K Folds, verteilt über die gesamte Historie, ist „1 Fold" ein einzelner Ausschnitt nahe der Mitte, „2 Folds" sind ein früher und ein später Ausschnitt, „3 Folds" verteilen sich auf früh/mittel/spät – jede Fidelity-Ebene, selbst die billigste, sampelt über den vollen Kalender. Der billige Proxy ist eine grobe Sicht auf die gesamte Periode, niemals eine scharfe Sicht auf einen Ausschnitt davon. Diese Verschachtelung ist es, was die Fold-Anzahl-Fidelity lediglich verrauscht macht (heilbar durch das Gate) statt verzerrt (was kein Gate reparieren kann – ein hohes ρ gegen ein verzerrtes Ziel bestätigt nur, dass du zuverlässig die regime-passende Config auswählen wirst). Wenn dein einziger Weg, eine Fidelity billiger zu machen, darin besteht, sie aktueller zu machen, hast du keine gültige Fidelity. Mach sie stattdessen gröber.

Auflösung als die ehrliche billige Achse

Die andere billige Achse vermeidet den Bias vollständig und ist der natürliche Partner zum adaptiven Drill-Down, den wir für die Fill-Simulation beschrieben haben: Kerzenauflösung. Den gesamten Raum auf 1-Stunden-Bars screenen, Überlebende auf 1-Minute befördern und nur für die Handvoll Finalisten bis auf 1-Sekunde oder Roh-Trades herunterbrechen. Gröbere Kerzen über dieselbe volle Historie sind billiger auszuwerten – weniger Bars, schnellere Indikator-Durchläufe, schnellere Simulation – und anders als ein kürzeres Fenster ist eine grobe Sicht auf den gesamten Kalender unverzerrt: Sie sieht jedes Regime, nur mit weniger Intrabar-Detail.

Auflösung und Folds sind komplementäre Fidelity-Achsen, und das Fidelity-Gate gilt für beide. Bevor du einem 1-Stunden-Screen vertraust, führe dieselbe Probe durch: Nimm ~200 Configs, bewerte sie bei 1h und bei 1m, und miss die Rangkorrelation. Ist ρ(1h, 1m) hoch, ist das Screening auf Stunden sicher, und du hast dir eine große Beschleunigung ehrlich erkauft. Ist es niedrig – was passiert, wenn der Edge der Strategie in Intrabar-Struktur lebt, die Stundenkerzen verwischen –, dann ist Stunden-Screening für diese Strategie ein Zufallsfilter, und das Gate sagt dir, feiner anzufangen. Die Regel ändert sich nie: Du darfst bei einer Fidelity nur prunen, nachdem du gemessen hast, dass ihr Ranking mit der Wahrheit übereinstimmt.

Die beiden Achsen versagen zudem auf entgegengesetzte Weise, was nützlich ist. Grobe Auflösung verliert Intrabar-Information; weniger Folds verlieren Cross-Regime-Information. Eine Momentum-Strategie auf Tageshorizonten mag auf Stundenkerzen perfekt ranken, braucht aber viele Folds, um Regime-Glück herauszumitteln; eine Scalping-Strategie mag bei wenigen Folds gut ranken, zerfällt aber oberhalb von 1-Sekunden-Auflösung. Das Gate, pro Achse ausgeführt, sagt dir, bei welcher Fidelity du es dir für diese Strategie leisten kannst, billig zu sein – statt eine Antwort anzunehmen, die zufällig bequem ist.

Wo die Einsparungen tatsächlich herkommen

Ein Vorbehalt, der Drill-Down ehrlich hält: Eine Fidelity spart Rechenzeit nur dort, wo die Kosten tatsächlich anfallen. In unserer Multi-Timeframe-Engine ist der teure Teil das Vorberechnen der Indikatoren – die Multi-Timeframe-HMA- und Separations-Signale –, das einmal pro Konfiguration bezahlt wird, bevor irgendein Fold läuft. Die Pro-Fold-Simulation auf den gecachten Signalen ist vergleichsweise billig. Pruning nach Fold-Anzahl spart also nur die Simulationskosten, nicht die dominierenden Indikatorkosten; die Fold-Anzahl-Fidelity ist real, aber ihre Obergrenze liegt niedriger, als das rohe Fold-Verhältnis vermuten lässt.

Die Auflösungsachse hingegen greift die dominierenden Kosten direkt an: Gröbere Kerzen bedeuten weniger Bars, auf denen Indikatoren berechnet werden müssen, sodass sowohl das teure Precompute als auch die billige Simulation zusammen schrumpfen. Das ist kein Detail – es entscheidet, welches Drill-Down es wert ist, gebaut zu werden. Bevor du in eine Multi-Fidelity-Suche investierst, frag dich, wo deine Sekunden hingehen. Wenn 90% Indikator-Precompute sind, das über Folds hinweg geteilt wird, bringt eine Fold-Anzahl-Fidelity wenig und eine Auflösungs-Fidelity viel. Profile zuerst; die richtige billige Achse ist die, die die Kosten entfernt, die du tatsächlich hast, und sie muss trotzdem das Gate bestehen.

Wo das anknüpft

Das Fidelity-Gate sitzt an einer bestimmten Stelle in der Kette der Backtest-Hygiene dieser Serie:

  • Es liegt vor der Overfitting-Kontrolle. Ein Drill-Down, das auf einem schlechten Proxy prunt, ist ein neuer Weg, um zu overfitten – du lässt eine verrauschte frühe Stufe deine Finalisten auswählen. Der Champion muss trotzdem Deflated Sharpe und PBO überstehen, und die Anzahl der Trials, die in diese Gates einfließt, muss jeden geprunten Trial einschließen, nicht nur die Überlebenden – Pruning befreit einen Trial nicht vom Multiple-Testing-Ledger.
  • Es teilt seinen Feind mit der Plateau-Analyse: Eine Config, die einen Fold oder ein Screening-Fenster gewinnt und sonst nirgends, ist dasselbe regime-passende Artefakt, das beide Werkzeuge zurückweisen sollen. Das Gate weigert sich, auf einem solchen Fold zu selektieren; die Plateau-Analyse weigert sich, einem Champion zu vertrauen, der auf einem einzigen steht.
  • Es setzt darunter den ehrlichen Walk-Forward-Split voraus – Folds, die den gesamten Kalender überspannen, Out-of-Sample beiseitegelegt – und es ist das Such-Zeit-Gegenstück zum Drill-Down, das wir für die Fill-Simulation gebaut haben: dasselbe Grob-zu-fein-Prinzip, angewandt darauf, welche Configs man auswertet, statt darauf, wie präzise man sie füllt.
  • Und es hängt absolut davon ab, dass die Fidelity auf jeder Stufe leck-frei ist. Wenn die billige Stufe einen Look-Ahead-Bias hat, den die teure nicht hat, misst ρ die Übereinstimmung mit einem kontaminierten Ziel, und das Gate zertifiziert ein Leck. Rangkorrelation messen, ja – aber auf einem ehrlichen Ziel.

Die vereinigende Idee ist, wieder einmal, diejenige, die diese Serie nicht müde wird zu wiederholen: Ein Backtest ist ein statistisches Experiment, und jede Abkürzung darin ist eine Hypothese, die du zu testen verpflichtet bist. Die Hypothese des Drill-Downs ist „billiges Ranking ≈ teures Ranking". Sie ist mit ~200 Configs testbar. Teste sie.

Kernpunkte

  1. Grob-zu-fein-Suche ruht auf einer Annahme: der billige Proxy rankt Configs wie der teure. Nicht derselbe Wert – dasselbe Ranking. Ist die Rangkorrelation niedrig, verwirft aggressives Pruning deine zukünftigen Gewinner und befördert Rauschen. Du suchst schneller in Richtung einer schlechteren Antwort.
  2. Miss es, bevor du ihm vertraust. Zieh ~200 zufällige Configs, bewerte sie auf jeder Fidelity-Stufe und berechne Spearman ρ zwischen jeder billigen Stufe und dem Full-Fidelity-Ranking. Das sind ein paar Dutzend Zeilen und eine billige Probe.
  3. Ein Fold rankt fast zufällig. Wir haben ρ@1 je nach Regime zwischen 0.03 (ein Münzwurf) und 0.43 (immer noch unter Vertrauensschwelle) gemessen; es steigt auf 0.67, 0.78, 0.82 und 0.91, je mehr Folds hinzukommen. Der Standard min_resource = 1 jedes Standard-ASHA ist für einen Backtest meist falsch.
  4. Die Mindest-Fidelity automatisch auf die erste Stufe anheben, bei der ρ ≥ 0.5, und wenn keine besteht, gar nicht prunen. Das Gate ergab min_resource = 2 für ein Setup und 3 für ein härteres; der Fallback degradiert elegant zur Full-Fidelity-Suche. Korrektheit kostet etwas Beschleunigung – zahl sie.
  5. Die billige Achse danach wählen, ob sie verzerrt ist, nicht danach, ob sie billig ist. Kürzere Historie ist verzerrt – sie wählt regime-passende Parameter aus, und keine Stichprobengröße behebt das. Nutze weniger Folds über den gesamten Kalender (verschachtelt, nicht zusammenhängend) oder gröbere Auflösung über die volle Periode. Und setz die billige Achse dort ein, wo deine Kosten tatsächlich liegen.

Drill-Down ist eine der besten Beschleunigungen im Backtesting und eine der leichtesten, die sich in einen schnelleren Weg verwandeln lässt, sich selbst zu täuschen. Der Unterschied zwischen beidem ist eine einzige Zahl, die du messen kannst, bevor die Suche beginnt. Wenn dein Proxy nicht beweisen kann, dass er wie die Wahrheit rankt, ist er kein Proxy – er ist ein Zufallszahlengenerator mit einem plausiblen Kostenprofil.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Dem Markt einen Schritt voraus

Abonniere unseren Newsletter für exklusive KI-Trading-Einblicke, Marktanalysen und Plattform-Updates.

Wir respektieren deine Privatsphäre. Jederzeit abbestellbar.