Design der Zielfunktion: Die Metrik, die Sie optimieren, wählt heimlich Ihre Strategie
Teil der Serie "Backtests ohne Illusionen".
📄 Dieser Artikel ist zu einem Forschungspaper herangewachsen. Jede Zahl unten stammt aus einem deterministischen Skript, das kontrollierte Ground Truth aufbaut — einen synthetischen Markt mit einem bekannten Edge in einem moderaten Signalband und fat-tailed Noise überall — und dann eine Schwellenwertsuche unter sechs verschiedenen Zielfunktionen durchführt und out of sample misst, welche Strategie jede Zielfunktion tatsächlich auswählt. Lesen Sie das Paper online (interaktive Version + PDF) unter objective-design.marketmaker.cc, Code und Daten unter github.com/suenot/objective-design-degeneracy.
Sie wollen die beste Strategie. Also führen Sie eine Suche durch — sweepen einen Schwellenwert, ein Lookback, eine Stop-Distanz, und behalten die Einstellung mit der höchsten Bewertung. Die Suche endet und liefert Ihnen einen Gewinner. Vernünftig. Standard. Das ist genau das, was jeder Optimizer, jede Grid Search und jeder Hyperparameter-Tuner auf der Welt tut.
Aber schauen Sie sich das Verb an: höchste Bewertung. Höchste bei was? Bevor die Suche irgendetwas krönen kann, mussten Sie ihr eine einzige zu maximierende Zahl übergeben — eine Zielfunktion. PnL. Sharpe. Sharpe auf den gehandelten Bars. Return-over-Max-Drawdown. Sie haben eine davon eingetippt, wahrscheinlich ohne viel Nachdenken, und dann hat die Suche eine Million Auswertungen damit verbracht, genau das zu tun, worum Sie gebeten haben.
Diese eine Wahl ist keine Formalität. Sie ist die gesamte Entscheidung. Die Suche findet nicht "eine gute Strategie" — so etwas gibt es abstrakt nicht. Sie findet die Strategie, die den von Ihnen gewählten Skalar maximiert, und verschiedene Skalare zeigen auf völlig unterschiedliche Strategien bei den gleichen Daten. Die Zielfunktion ist die heimliche Hand am Lenkrad, und meistens schaut niemand hin.
Hier ist der gesamte Artikel in einer Tabelle. Eine Schwellenwertsuche, ein synthetischer Markt mit einem echten, bekannten Edge, sechs Zielfunktionen — und die sechs Strategien, die sie auswählen, gemessen auf Out-of-Sample-Daten:
| Zielfunktion (was die Suche maximiert) | Mittlere Marktexposure | In-Sample Sharpe | Out-of-Sample Sharpe | Entartete Gewinner |
|---|---|---|---|---|
| Raw PnL | 0.859 | 1.76 | 1.61 | 0% |
| Full-Timeline Sharpe | 0.740 | 1.82 | 1.71 | 0% |
| Per-Trade ("aktiver") Sharpe | 0.286 | 1.00 | 0.70 | 57% |
| Exposure Floor () | 0.740 | 1.82 | 1.71 | 0% |
| Trade-Count Shrinkage (conf_k) | 0.523 | 1.54 | 1.31 | 20.7% |
| Robust (Floor + conf_k) | 0.675 | 1.78 | 1.70 | 0.2% |
600 unabhängige Seeds, Bars je, 80 Kandidatenschwellenwerte pro Suche, In-Sample und Out-of-Sample unabhängig gezogen. Annualisierter Sharpe (252 Perioden/Jahr). "Entartet" = der gewählte Gewinner ist weniger als 5% der Zeit im Markt, oder erzielt einen nicht-positiven Out-of-Sample-Sharpe. Das wahre Optimum dieses Marktes ist ein annualisierter Out-of-Sample-Sharpe von 1.77.
Lesen Sie die dritte Zeile, bis sie schmerzt. Der Per-Trade-Sharpe — ein Vertreter der gesamten Familie aktivitätsbedingter Metriken (Per-Trade-Sharpe, Expectancy, van Tharps SQN, Win Rate), alle berechnet nur auf den gehandelten Bars — wählt eine Strategie, die Out-of-Sample schlechter ist als die Hälfte der anderen, und tut dies in 57% der Fälle entartet. Es ist keine subtil schlechtere Zielfunktion. Bei diesen Daten ist es eine Falle, und die Suche tappt öfter als in der Hälfte der Fälle hinein. Lesen Sie jetzt die Zeile direkt darüber: der schlichte Full-Timeline Sharpe entartet nie und erzielt Out-of-Sample 1.71. Das ist die Pointe der gesamten Reparatur, früh verraten — die ehrliche Lösung besteht einfach darin, auf der gesamten Zeitreihe zu messen; die raffinierteren Nachrüstungen in den unteren Zeilen erreichen bestenfalls genau diese Zahl, übertreffen sie nie. Dieser Artikel ist die Anatomie dieser Falle und ihrer Reparatur, wobei die Ground Truth durchgehend bekannt ist, sodass "hat die Zielfunktion die richtige Strategie gewählt?" eine Tatsache ist, keine Meinung.
Akt 1 — Die heimliche Entscheidung: Goodharts Gesetz ist die Suche

1975 schrieb der Ökonom Charles Goodhart einen Satz, der alles andere überdauert hat, was er getan hat:
"Any observed statistical regularity will tend to collapse once pressure is placed upon it for control purposes."
Die populäre Paraphrase, meist Marilyn Strathern zugeschrieben, ist prägnanter: wenn ein Maß zum Ziel wird, hört es auf, ein gutes Maß zu sein.
Eine Parametersuche ist die reinste denkbare Instanz von Goodharts Gesetz. Die Zielfunktion ist das Maß. Die Suche ist der Druck — Tausende, Millionen von Versuchen, dieses Maß so hoch wie möglich zu treiben. Und der Suche ist es völlig egal, was Sie mit dem Maß gemeint haben. Sie kümmert sich nur um die Zahl. Wenn es irgendeine Möglichkeit gibt, die Zahl groß zu machen, die nichts mit einem echten, handelbaren Edge zu tun hat — selten handeln, meistens flach bleiben, ein paar glückliche Ausreißer erwischen — wird die Suche diesen Weg finden, weil das Finden des Maximums das Einzige ist, wofür sie gebaut ist.
Das ist derselbe Fehler, den die AI-Safety-Literatur Reward Hacking nennt: ein Agent, der eine Proxy für das optimiert, was Sie wollen, wird jede Lücke zwischen Proxy und Ziel ausnutzen. Ihre Suche ist dieser Agent. "Sharpe Ratio" ist diese Proxy. "Eine Strategie, der ich zutraue, im nächsten Quartal echtes Geld zu handeln" ist das Ziel. Die Lücke dazwischen ist der Ort, an dem die gesamte Disziplin lebt.
Um zu beobachten, wie sich die Lücke öffnet, brauchen wir eine Welt, in der wir die Wahrheit kennen. Also bauen wir eine.
Der Markt. In jeder Periode kommt ein Prädiktor (ein standardnormales Signal) an, gefolgt von der Rendite , die er teilweise vorhersagt. Der Edge ist real, aber begrenzt — er existiert nur innerhalb eines moderaten Signalbands und verschwindet außerhalb davon:
Zwei Designentscheidungen sind wichtig. Erstens lebt der Edge im moderaten Band: extreme Signale tragen keine prädiktive Information, also sollte eine Strategie die Mitte handeln und die Ränder überspringen. Zweitens ist das Noise fat-tailed (Student- mit 4 Freiheitsgraden, die Art von schwerem Tail, den echte Renditen tatsächlich haben) — aber diese Zutat dient hier der Realismus, nicht dem Mechanismus. Es ist verlockend zu sagen, dass die Fat Tails die Falle erst möglich machen, und genau das haben wir angenommen, bis wir die Kontrolle durchgeführt haben: eine Gaussian-Noise-Version dieses Marktes (gaussian_control in den Ergebnissen, 300 Seeds) reproduziert die Falle praktisch unverändert — die Per-Trade-Zielfunktion entartet unter Gaussian Noise immer noch 55.7% der Zeit gegenüber 57.0% mit Fat Tails, und ihr Out-of-Sample-Sharpe ist 0.71 gegenüber 0.70. Die Falle hat also nichts mit Fat Tails zu tun. Es ist ein reiner Small-Sample-plus-Selection-Effekt: Nehmen Sie das Maximum über ~20 Low-Exposure-Schwellenwerte eines Sharpe, der auf einer Handvoll Beobachtungen berechnet wurde, und irgendeine glückliche Ecke wird immer spektakulär aussehen. Jede Rauschverteilung tut dies; eine Strategie, die nur für wenige Bars im Markt ist, kann durch reines Glück ein paar günstige Bewegungen mitnehmen und eine In-Sample-Zahl posten, die nichts bedeutet. Wir behalten die Fat Tails, weil echte Renditen sie haben, nicht weil die Falle sie braucht.
Die Strategie. Eine einparametrige Familie. Handeln Sie in Richtung des Signals, wann immer sein Betrag unter einem Schwellenwert liegt, ansonsten flach bleiben:
Ein winziges handelt nur bei den kleinsten, unauffälligsten Signalen — eine seltene-Trade-Lotterie, fast nie im Markt. Ein nahe der Bandkante erfasst den gesamten realen Edge und ist gut exponiert. Ein riesiges handelt alles, einschließlich der Out-of-Band-Bars, die keinen Edge tragen und nur Rauschen hinzufügen.
def gen_dataset(T, rng, beta=0.30, band=1.0, tail_df=4):
s = rng.standard_normal(T)
edge = beta * np.where(np.abs(s) <= band, s, 0.0) # edge ONLY inside |s| <= 1
t = rng.standard_t(tail_df, T) / np.sqrt(tail_df / (tail_df - 2.0)) # fat tails, unit var
return s, edge + t
def simulate(s, r, theta):
pos = np.where(np.abs(s) <= theta, np.sign(s), 0.0) # trade the band, skip outliers
strat = pos * r
active = pos != 0.0
exposure = active.mean() # fraction of bars in a position
sharpe_full = strat.mean() / strat.std(ddof=1) # on the WHOLE timeline
sharpe_active = strat[active].mean() / strat[active].std(ddof=1) # on ONLY the active bars
return dict(exposure=exposure, n_trades=int(active.sum()),
sharpe_full=sharpe_full, sharpe_active=sharpe_active, pnl=strat.sum())
Weil wir den Markt selbst gebaut haben, können wir die Wahrheit direkt berechnen — durchschnittliche Performance bei jedem Schwellenwert über alle 600 Seeds, Out-of-Sample. Das wahre Optimum liegt bei : direkt an der Kante des Signalbands, etwa 70% der Zeit im Markt (abgeleitet: ein standardnormales Signal fällt mit Wahrscheinlichkeit innerhalb ), mit einem annualisierten Out-of-Sample-Sharpe von 1.77. Das ist die Zahl, die jede Zielfunktion zu finden versucht. Behalten Sie sie im Blick: θ≈1.04, OOS Sharpe 1.77, etwa 70% der Zeitreihe im Markt. Alles, was eine Zielfunktion auswählt und weit davon entfernt ist, ist ein Versagen der Zielfunktion, nicht ein schwieriger Markt.
Akt 2 — Die Falle: acht glückliche Trades, ein Sharpe von 21, eine Fata Morgana

Lassen wir nun eine naive Zielfunktion auf eine konkrete Ziehung dieses Marktes los — Seed 6. Vollständige Offenlegung zum Seed: Es war nicht die erste Ziehung oder eine zufällige. Wir haben Seeds nach einem besonders krass entarteten Per-Trade-Gewinner durchsucht und genau diesen ausgewählt, damit der Mechanismus unmöglich zu übersehen ist. Das Ergebnis, das er zeigt, ist durchaus typisch — wie Akt 3 bestätigen wird, wählt die Per-Trade-Zielfunktion in 56% aller Seeds eine Lotterie mit unter 5% Exposure — aber die Magnitude von Seed 6 liegt am extremen Ende dieser Verteilung. Lesen Sie es als besonders krasse Instanz eines häufigen Versagens, nicht als typische. Wir optimieren den Per-Trade-Sharpe: das Sharpe Ratio, berechnet nur auf den Bars, in denen die Strategie tatsächlich in einer Position ist. Das ist etwas extrem Natürliches zu berichten. "Wenn sie handelt, wie gut sind ihre Trades?" Es fühlt sich an, als würde es Skill von Untätigkeit isolieren. Es tut das Gegenteil.
Hier ist die Strategie, die der Per-Trade-Sharpe bei Seed 6 krönt:
- Schwellenwert — er handelt nur bei den allerkleinsten Signalen.
- Marktexposure 0.4% — flach 99.6% der Zeit.
- Acht Trades. Acht. Über 2000 Bars.
- In-Sample Per-Trade annualisierter Sharpe: 21.09.
- In-Sample Full-Timeline-Sharpe: 0.82.
- Out-of-Sample Full-Timeline-Sharpe: 0.13.
Die Per-Trade-Metrik zeigt 21.09 — eine Zahl, die keine echte Strategie je erzielt hat, die Art von Zahl, die einen Fonds an den Start bringen würde. Und sie ist eine vollständige Illusion. Diese acht Trades haben zufällig ein paar günstige Bewegungen erwischt; gemessen nur über diese acht Bars ist das Verhältnis von Mittelwert zu Standardabweichung astronomisch. Aber auf der gesamten Zeitreihe — wo die Strategie 99.6% der Zeit flach ist — trägt dieser "Edge" praktisch nichts bei: ein Full-Timeline-Sharpe von 0.82 In-Sample, der auf frischen Daten auf 0.13 zusammenbricht. Der von der Zielfunktion gewählte Gewinner ist für alle praktischen Handelszwecke flach.
Und es ist nicht einmal ein echter Edge bei diesem Schwellenwert. Erinnern Sie sich an den Markt: Der Edge lebt im Band , und liegt genau in der Mitte, wo das Signal am schwächsten ist. Die wahre Out-of-Sample-Kurve bei ist −0.01 — nicht von null unterscheidbar (abgeleitet aus der Ground-Truth-Kurve). Die Suche hat keinen kleinen echten Edge gefunden. Sie hat acht glückliche Rauschziehungen gefunden und sie als Sharpe von 21 berichtet.
Das ist die Falle im Kleinen: der Per-Trade-Sharpe belohnt die Strategie dafür, so selten wie möglich zu handeln, denn je weniger Bars man hält, desto leichter ist es, dass ein paar davon Glück haben, und die Metrik fragt nie "aber warst du überhaupt im Markt?" Die Magnitude von Seed 6 ist herausgepickt — wir haben gezielt nach einem krassen gesucht — aber ihre Art ist es nicht. Über alle 600 Seeds hinweg wählt der Per-Trade-Sharpe in 57% von ihnen einen entarteten Gewinner (einen, der kaum handelt oder Out-of-Sample verliert), und speziell eine Lotterie mit unter 5% Exposure in 56%. Die typische entartete Auswahl ist viel milder als Seed 6s Sharpe von 21: gemittelt über alle 600 Seeds hat der Gewinner der Per-Trade-Zielfunktion einen In-Sample-Per-Trade-Sharpe von 4.58 und eine mittlere Exposure von 0.286 — immer noch die meiste Zeit flach, nur nicht 99.6% flach. Seed 6 dramatisiert den Mechanismus; die 56% sind der Teil, der Sie beunruhigen sollte. Mehr als die Hälfte der Zeit gibt Ihnen diese alltägliche Metrik ein Lotterielos und nennt es eine Strategie.
Akt 3 — Die statistische Wahrheit: sechs Zielfunktionen, 600 Seeds

Ein Seed beweist nichts; er illustriert nur. Um eine Zielfunktion zu messen, müssen wir fragen, was sie im Durchschnitt auswählt, über viele unabhängige Märkte, und diese Auswahl auf Daten bewerten, die die Suche nie gesehen hat. Also: 600 Seeds, jeder eine unabhängige Ziehung des Marktes; bei jedem läuft die 80-Schwellenwert-Suche unter jeder Zielfunktion; erfasst wird die Exposure, der In-Sample- und Out-of-Sample-Sharpe der jeweiligen Auswahl, und ob diese Auswahl entartet war.
| Zielfunktion | Mittlere Exposure | In-Sample Sharpe | Out-of-Sample Sharpe | IS→OOS-Rückgang (abs.) | Entartet |
|---|---|---|---|---|---|
| Raw PnL | 0.859 | 1.76 | 1.61 | 0.15 | 0.0% |
| Full-Timeline Sharpe | 0.740 | 1.82 | 1.71 | 0.11 | 0.0% |
| Per-Trade Sharpe | 0.286 | 1.00 | 0.70 | 0.30 | 57% |
| Exposure Floor () | 0.740 | 1.82 | 1.71 | 0.11 | 0.0% |
| conf_k Shrinkage () | 0.523 | 1.54 | 1.31 | 0.23 | 20.7% |
| Robust (Floor + conf_k) | 0.675 | 1.78 | 1.70 | 0.08 | 0.2% |
Die Spalte "IS→OOS-Rückgang" ist der absolute Fall des annualisierten Sharpe von In-Sample zu Out-of-Sample (z.B. ist ein Rückgang von 0.30), kein Prozentsatz. Und beachten Sie, dass die Zeile "Exposure Floor" byteidentisch mit "Full-Timeline Sharpe" ist: das ist kein Zufall, und Akt 5 erklärt warum.
Drei Tatsachen springen ins Auge, und jede ist eine Lektion.
Der Per-Trade-Sharpe ist die einzige naive Zielfunktion, die entartet. Ihre mittlere Exposure ist 0.286 — sie wählt Strategien, die die meiste Zeit flach sind — und ihr In-Sample-Sharpe von 1.00 fällt um 0.30 auf ein Out-of-Sample von 0.70, das schlechteste im Feld. Beachten Sie das Zeichen: ihre In-Sample-Zahl (1.00) ist nicht einmal beeindruckend, aber bei jedem einzelnen Seed wird sie bereitwillig eine Per-Trade-Zahl von 21 berichten. Der Durchschnitt gleicht sich aus, weil die glücklichen Fenster in zufällige Richtungen zeigen; was bis Out-of-Sample übrig bleibt, sind nur 0.70, und 57% der einzelnen Auswahlen sind schlicht Müll.
Exposure-bewusste Zielfunktionen sind von Natur aus sicher. Raw PnL und Full-Timeline Sharpe entarten nie (0.0%). Der Grund ist strukturell: beide werden über die gesamte Zeitreihe gemessen, sodass eine Strategie, die 99.6% der Zeit flach ist, unter ihnen fast nichts verdient. Man kann eine Full-Timeline-Metrik nicht durch seltenes Handeln austricksen — flach zu bleiben wird direkt und automatisch bestraft, weil flache Bars im Nenner stehen. Das ist die wichtigste Idee des gesamten Artikels, und wir kommen in Akt 6 darauf zurück.
Raw PnL ist sicher, aber nicht optimal — es über-exponiert. Schauen Sie genau hin: die mittlere Exposure von Raw PnL ist 0.859, die höchste von allen, und ihr Out-of-Sample-Sharpe (1.61) liegt eine Stufe unter dem Full-Timeline Sharpe (1.71) und dem wahren Optimum (1.77). PnL belohnt im Markt zu sein, also treibt die Suche zu hoch (bei Seed 6 wählt Raw PnL gegenüber dem optimalen 1.04), was Out-of-Band-Bars hereinzieht, die keinen Edge tragen und nur Rauschen hinzufügen. Sie explodiert nicht — aber sie driftet am echten Optimum vorbei, in die entgegengesetzte Richtung der Per-Trade-Falle. Andere Zielfunktion, andere Verzerrung, dieselbe Lektion: die Metrik hat die Strategie gewählt.
Die beiden Zeilen, über die wir noch nicht gesprochen haben — der Exposure Floor und conf_k — sind die Reparatur. Das ist der nächste Akt.
Akt 4 — Warum acht Trades nie vertrauenswürdig sein können

Bevor wir die Falle reparieren, lohnt es sich, präzise zu sein warum acht Trades einen Sharpe von 21 produzieren, der nichts bedeutet — denn die Lösung folgt direkt aus dem Grund.
Ein Sharpe Ratio ist eine Schätzung, und Schätzungen haben Fehlerbalken. Andrew Los Ergebnis von 2002 gibt den Standardfehler eines aus Beobachtungen geschätzten Sharpe Ratio unter der großzügigsten möglichen Annahme (IID Gaussian Returns):
Der Fehler schrumpft nur mit . Füttern wir ihn mit der Falle. Der Per-Trade-Sharpe bei Seed 6 ist annualisiert, was pro Beobachtung ist, berechnet auf Bars. Der Standardfehler ist
(abgeleitet aus Los Formel). Die Punktschätzung ist ; ihr Ein-Sigma-Fehlerbalken liegt in der Größenordnung — lesen Sie dies als illustrative Größenordnung, nicht als kalibriertes Konfidenzintervall, da die Formel IID-Gaussian-Renditen annimmt, die unser fat-tailed -Noise verletzt. Trotzdem ist die Botschaft eindeutig: der "Sharpe von 21" ist eine Zahl, die aus einer so breiten Verteilung gezogen wird, dass sie praktisch keine Information trägt — und das ist die großzügige Berechnung, denn Mertens' Erweiterung zeigt, dass Fat Tails und Skew den Standardfehler nur weiter aufblähen. Der Sharpe eines Backtests mit seltenen Trades ist unzuverlässiger als sein Punktwert in jeder Richtung gleichzeitig: zu wenige Beobachtungen und die falsche Verteilung.
Genau das formalisiert die Minimum Track Record Length (Bailey & López de Prado, 2012). Sie kehrt die Frage um — wie viele Beobachtungen brauche ich, bevor ich einem Sharpe dieser Größe mit Konfidenz glauben darf? —
und verwandelt "vertraue Backtests mit wenigen Trades weniger" in eine explizite, überprüfbare Anzahl von Trades. Der tiefe Punkt für das Design von Zielfunktionen ist dieser: eine gute Zielfunktion sollte eine minimale Track Record von innen heraus erzwingen, statt einen Menschen erst nachträglich bemerken zu lassen, dass der Gewinner auf acht Beobachtungen ruht. Der Per-Trade-Sharpe tut das Gegenteil — er wird maximiert, indem die Beobachtungszahl gegen das Minimum getrieben wird. Jede Zielfunktion, deren Optimum bei "so wenige Trades wie möglich" liegt, ist per Konstruktion eine Zielfunktion, die ihre eigene unzuverlässigste Schätzung sucht.
Zwei Fehler verstärken sich in der Falle, und beide zu benennen sagt uns, wie wir sie beheben. Erstens Small-Sample-Noise: acht Beobachtungen können kein Verhältnis festlegen. Zweitens Selektion: diese acht Bars wurden uns nicht einfach gegeben — die Suche hat den Schwellenwert gewählt, der auf ihnen landete, teilweise weil sie glücklich waren. Die Suche ist ein Maximierer; sie wird immer die Ecke des Raums finden, in der Rauschen zufällig wie Signal aussieht. Das kann man nicht mit einer besseren Punktschätzung wegtricksen. Man muss ändern, was "am besten" bedeutet, sodass die glückliche Ecke nicht das Maximum ist.
Akt 5 — Die Reparatur: ein Exposure Floor und eine Trade-Count Shrinkage

Wir haben zwei benannte Krankheiten — handelt zu selten und ruht auf zu wenigen Beobachtungen — also schreiben wir zwei Heilmittel, jeweils gegen eine gerichtet.
Heilmittel 1: ein Exposure Floor. Die einfachste mögliche Lösung. Weisen Sie jede Strategie, die nicht mindestens der Zeit im Markt ist, rundweg zurück — wenn kaum gehandelt wird, ist der Score und die Suche kann diese Strategie nicht auswählen. Aber es gibt eine ehrliche Feinheit in dem, was man begrenzt, und das ist die stille Lektion dieses ganzen Artikels. Als eigenständige Zielfunktion haben wir Full-Timeline Sharpe begrenzt, und auf diesem Markt ändert das absolut nichts: der eigene Gewinner des Full-Timeline Sharpe liegt bereits bei ~74% Exposure, sodass ein 20%-Floor nie greift. Genau deshalb sind die Zeilen "Exposure Floor" und "Full-Timeline Sharpe" in den obigen Tabellen byteidentisch — schraubt man einen Floor an eine bereits sichere Metrik, hat man einfach den vollen Sharpe neu abgeleitet. Der Floor leistet nur sichtbare Arbeit, wenn er eine Metrik bewacht, die sonst in die Ecke sprinten würde: eine Per-Trade-Metrik, wie bei der robusten Zielfunktion unten. Mit anderen Worten: "Exposure erfordern" und "auf der gesamten Zeitreihe messen" sind bei diesen Daten zwei Namen für dieselbe Intervention.
Heilmittel 2: eine Trade-Count Shrinkage — "conf_k". Für den Fall, dass man an einer Per-Trade-Metrik festhängt und eine weiche Korrektur statt eines harten Grenzwerts will: den Sharpe kontinuierlich danach diskontieren, auf wie vielen Trades er ruht. Multiplizieren mit , wobei die Trade-Anzahl und eine feste "Konfidenzkonstante" ist — eine vor der Suche gewählte Trades-Äquivalent-Priorstärke:
Wenn , wird der Score gegen null gedrückt, egal wie groß der rohe Sharpe ist; wenn , konvergiert der Score gegen den rohen Sharpe. Das ist dieselbe korrigierende Logik wie MinTRL und der Standardfehler aus Akt 4 — eine Small-Sample-Schätzung als abnehmende Funktion ihrer Stichprobengröße gegen null schrumpfen — direkt in die Zielfunktion eingefaltet statt als Post-hoc-Filter angewendet. Das nächste benannte Präzedenzfall ist van Tharps System Quality Number (), die ebenfalls eine Per-Trade-Qualitätsmetrik mit der Trade-Anzahl skaliert — obwohl sich die funktionale Form unterscheidet ( wächst unbegrenzt, während bei 1 sättigt). In der Form ist unsere eine Bayessche precision-gewichtete / Empirical-Bayes-artige Shrinkage; es ist unsere Konstruktion für dieses Problem, kein benannter Schätzer aus der Literatur.
def obj_active_sharpe(m): # the trap: Sharpe on only the active bars
return m["sharpe_active"]
def _shrink(n, conf_k): # trade-count shrinkage n / (n + k)
return n / (n + conf_k) if (n + conf_k) > 0 else 0.0
def obj_confk(m, conf_k=40.0): # few trades -> little credit
return m["sharpe_active"] * _shrink(m["n_trades"], conf_k)
def obj_robust(m, e_min=0.20, conf_k=40.0): # both cures at once
if m["exposure"] < e_min: # floor: reject strategies that barely trade
return -np.inf
return m["sharpe_active"] * _shrink(m["n_trades"], conf_k)
Nun der ehrliche Teil: wie viel Floor, wie viel Shrinkage? Beide sweepen und die gesamte Fläche lesen. Jede Zelle ist der mittlere Out-of-Sample-Sharpe über 200 Seeds (ein Drittel-Teilmenge der 600, um den zweidimensionalen Sweep günstig zu halten) mit der Entartungsrate daneben:
| \ conf_k | |||
|---|---|---|---|
| 0.00 | 0.66 (59.5%) | 1.26 (22.5%) | 1.47 (11.5%) |
| 0.05 | 1.43 (10.0%) | 1.53 (6.0%) | 1.60 (4.0%) |
| 0.10 | 1.64 (1.5%) | 1.65 (1.0%) | 1.67 (1.0%) |
| 0.20 | 1.71 (0.0%) | 1.71 (0.0%) | 1.71 (0.0%) |
| 0.35 | 1.73 (0.0%) | 1.73 (0.0%) | 1.73 (0.0%) |
Mittlerer annualisierter Out-of-Sample-Sharpe, mit Entartungsrate in Klammern. Die obere linke Zelle ist der rohe Per-Trade-Sharpe — kein Floor, keine Shrinkage: OOS 0.66, entartet 59.5%. Das ist dieselbe Zielfunktion wie die Per-Trade-Zeile aus Akt 3, die 0.70 / 57% las; die kleine Lücke liegt rein am Seed-Set — dieser Sweep verwendet 200 Seeds, die Monte-Carlo-Simulation alle 600. Gleiche Metrik, kleinere Stichprobe.
Die Fläche erzählt eine klare Geschichte in drei Lesarten.
Jedes Heilmittel wirkt allein. Bewegen Sie sich rechts entlang der oberen Zeile (Shrinkage hinzufügen, kein Floor): OOS steigt und Entartung fällt . Bewegen Sie sich nach unten in der linken Spalte (Floor hinzufügen, keine Shrinkage): OOS steigt und Entartung fällt . Jeder Regler, allein gedreht, hebt unabhängig die Out-of-Sample-Performance und tötet die Entartung. Der Exposure Floor ist hier der stärkere einzelne Hebel, weil er das definierende Merkmal der Falle — nahezu null Exposure — direkt angreift.
Zusammen erreichen sie das Plateau — und das Plateau ist genau der Full-Timeline Sharpe. Bei ist die Zeile flach bei OOS 1.71 mit 0% Entartung über jede Shrinkage-Stufe hinweg; bei kriecht es auf 1.73. Aber schauen Sie genau hin, was diese 1.71 ist: es ist genau der Score, den der schlichte Full-Timeline Sharpe in Akt 3 ohne Floor und ohne jede Shrinkage erzielt. Bestenfalls übertreffen die Nachrüstungen den Full-Timeline Sharpe nicht — sie rekonstruieren ihn. Und die vollständig reparierte robuste Zielfunktion kommt nicht einmal ganz dorthin: über alle 600 Seeds landet sie bei OOS 1.70 mit einer residualen Entartung von 0.17%, knapp unter dem vollen Sharpe von 1.71 / 0% — sie wird schwach von der einfacheren Metrik dominiert. Eine moderate mittlere Einstellung, mit , erreicht OOS 1.65 bei 1% Entartung — praktisch, wenn einem eine Per-Trade-Metrik aufgezwungen wird, aber nie ein Grund, eine zu bevorzugen.
Die genauen Zahlen sind skalenabhängig — die Form ist das Ergebnis. Die spezifischen Werte , , die diesen Markt vollständig reparieren, sind auf diesen Datengenerierungsprozess abgestimmt; bei einem anderen Markt mit anderen Handelsfrequenzen und Tail-Dicke liegt das Plateau woanders. Was verallgemeinert wird, sind nicht die Koordinaten, sondern die Fläche: eine monotone Anhebung in beide Richtungen, Entartung gegen null getrieben, ein Plateau bei der Wahrheit. Sie finden Ihre eigenen Koordinaten durch Sweepen, genau wie oben.
Setzen Sie beide Heilmittel zusammen — die robuste Zielfunktion, Floor 0.20 plus conf_k 40 — und kehren Sie zu Seed 6 zurück. Die Falle krönte , acht Trades, einen Full-Timeline-OOS-Sharpe von 0.13. Die robuste Zielfunktion wählt stattdessen : Marktexposure 0.66, 447 Trades, annualisierter Out-of-Sample-Sharpe 1.77. Dieses liegt einen Gitterpunkt unter dem wahren Optimum , sodass es einen nahezu optimalen, gut exponierten Schwellenwert wiederfindet statt genau ins Schwarze zu treffen — sein Single-Seed-Out-of-Sample-Sharpe (1.77) fällt zufällig mit dem Populationsoptimum zusammen. Gleiche Daten, gleiche Suche, gleiche 80 Kandidatenschwellenwerte. Nur die Definition von "am besten" hat sich geändert, und das hat den Gewinner von einer flachen Acht-Trades-Fata-Morgana zum echten, gut exponierten Edge verschoben — der bezeichnenderweise genau der Schwellenwert ist, den der schlichte Full-Timeline Sharpe bei diesem Seed wählt.
Eine Warnung, die der Sweep explizit macht: conf_k allein reicht bei diesem Markt nicht. Bei ohne Floor liegt die Entartung immer noch bei 22.5% über alle Seeds hinweg — und bei Seed 6 speziell wählt conf_k allein , 35 Trades, einen Out-of-Sample-Sharpe von −0.06. Fünfunddreißig Trades überleben eine Shrinkage von mit genug übrig gebliebenem Score, um zu gewinnen. Der Exposure Floor schließt diese letzte Lücke, weil er das wahre Signum der Falle — Flachheit — direkt anvisiert, statt sich auf die Trade-Anzahl als Proxy dafür zu verlassen.
Akt 6 — Die tiefere Lektion: auf der gesamten Zeitreihe messen

Treten Sie einen Schritt von der Reparatur zurück und beachten Sie, was die sicheren Zielfunktionen tatsächlich von der Falle getrennt hat. Es war keine Raffinesse. Raw PnL und Full-Timeline Sharpe sind einfacher als der Per-Trade-Sharpe, und sie sind nie entartet — 0% über 600 Seeds — ohne Floor, ohne Shrinkage, ohne jede Feinabstimmung.
Die Trennlinie ist eine einzige Eigenschaft: welches Fenster misst die Metrik? Der Per-Trade-Sharpe misst nur die Bars, auf denen die Strategie sich zu stehen entschieden hat — ein selbst ausgewähltes Fenster, das die Suche nach Belieben verkleinern kann. Full-Timeline Sharpe und Total-PnL messen die gesamte Zeitreihe, flache Bars inklusive. Und man kann eine Full-Timeline-Metrik nicht durch seltenes Handeln groß machen, weil jede Stunde, in der man flach ist, eine Stunde im Nenner ist, die nichts verdient. Der Exposure Floor und conf_k sind letztlich nur Wege, die Per-Trade-Metrik mit dem Exposure-Bewusstsein nachzurüsten, das Full-Timeline-Metriken kostenlos haben — und der Sweep hat uns bereits die Obergrenze dieser Nachrüstung mitgeteilt: bestenfalls erreicht sie den Full-Timeline Sharpe (OOS 1.70 vs. 1.71), übertrifft ihn nie. Wenn Sie frei sind, das Fenster zu wählen, wählen Sie die gesamte Zeitreihe und überspringen Sie die Nachrüstung ganz.
Also das Designprinzip, klar formuliert:
Gestalten Sie die Zielfunktion so, dass sie nicht durch seltene glückliche Trades ausgetrickst werden kann. Sie haben drei Werkzeuge, in ungefährer Präferenzreihenfolge:
- Auf der gesamten Zeitreihe messen. Der Standard, von dem man fast nie abweichen sollte. Full-Timeline Sharpe und Total Return sind konstruktionsbedingt exposure-bewusst — Untätigkeit wird automatisch bestraft, weil flache Bars mitzählen. Wenn Sie sich dabei ertappen, eine Metrik zu berichten, die nur auf "den Bars, in denen wir aktiv waren" berechnet wurde, halten Sie inne und fragen Sie, was die Suche mit der Freiheit tun wird, diese Bars zu wählen.
- Exposure erfordern. Wenn Sie eine aktivitätsbedingte Metrik verwenden müssen, begrenzen Sie die Exposure, sodass die Suche keine Strategie wählen kann, die kaum handelt. Das ist der stärkste einzelne Hebel gegen diese spezifische Falle.
- Nach Trade-Anzahl schrumpfen. Diskontieren Sie jedes Verhältnis um , sodass ein Sharpe, der auf einer Handvoll Beobachtungen ruht, nur einen Bruchteil des Credits eines auf Tausenden ruhenden erhält. Das ist die Zielfunktions-Ebene-Durchsetzung der Minimum Track Record Length: eine Zahl aus wenigen Beobachtungen ist unzuverlässig (Akt 4), also preist eine ehrliche Zielfunktion diese Unzuverlässigkeit ein, statt darauf zu vertrauen, dass ein Mensch sie später bemerkt.
Nichts davon macht die Suche klüger. Es macht das Ziel ehrlich, sodass, wenn die Suche genau das tut, was sie immer tut — das Maximum finden —, das Maximum eine Strategie ist, die Sie tatsächlich wollen.
Ehrlichkeitshinweise
Drei Vorbehalte, klar formuliert, denn eine kontrollierte Studie verdient sich ihre Schlussfolgerungen nur, wenn sie ihre Grenzen benennt.
- Der Markt ist synthetisch, und das absichtlich. Ein standardnormales Signal, ein linearer Edge, begrenzt auf , fat-tailed Student-()-Noise — gewählt für kontrollierte Ground Truth, nicht für Marktrealismus. Wir können nur beweisen, dass eine Zielfunktion die falsche Strategie wählt, indem wir sie auf Daten laufen lassen, bei denen wir wissen, welche Strategie richtig ist. Reale Märkte sind nicht-stationär, autokorreliert und regimewechselnd. Die Fat Tails sind eine realistische Zutat, die wir beibehalten haben, aber — entgegen einer naheliegenden ersten Vermutung, und entgegen einem früheren Entwurf dieses Artikels selbst — sind sie nicht das, was die Falle antreibt: eine Gaussian-Noise-Kontrolle (300 Seeds) entartet 55.7% der Zeit gegenüber 57.0% hier, mit Out-of-Sample-Sharpe 0.71 gegenüber 0.70. Die Falle ist ein Small-Sample-plus-Selection-Artefakt, das mit oder ohne schwere Tails überlebt. Das eigentliche Ergebnis ist die Diagnose und das Reparaturmuster, nicht eine Strategie und keine universelle Konstante.
- Die Reparaturwerte sind skalenabhängig. Der spezifische Floor und die Shrinkage , die die Falle vollständig schließen, sind auf diesen Datengenerierungsprozess abgestimmt — seine Handelsfrequenzen, seine Tail-Dicke, seine Edge-Größe. Bei anderen Daten verschiebt sich das Plateau. Was übertragbar ist, ist die Form der Sweep-Fläche (monotone Anhebung in beiden Reglern, Entartung gegen null, ein Plateau bei der Wahrheit) und die Methode, Ihre eigenen Koordinaten zu finden: beide sweepen und die Fläche lesen, nicht die Zahlen kopieren.
- conf_k ist unsere Konstruktion, kein benannter Schätzer. Die Trade-Count-Shrinkage ist ein Bayessches precision-gewichtetes / Empirical-Bayes-artiges Instrument, das wir für dieses Problem gebaut haben; ihre Begründung stützt sich auf das verifizierte Lo/Mertens-Standardfehler-Ergebnis und die Bailey–López-de-Prado-MinTRL, und ihr nächster benannter Verwandter ist van Tharps System Quality Number (, eine andere funktionale Form), aber wir behaupten nicht, dass selbst unter einem Namen in der Literatur erscheint. Ihre begleitenden Heilmittel — der Exposure Floor, die Full-Timeline-Messung — sind präzise formulierte Standardpraxis. Und beachten Sie, welche Zielfunktionen hier bereits sicher waren: Raw PnL und Full-Timeline Sharpe brauchten nie eine Reparatur, weil sie von vornherein exposure-bewusst sind — so sehr, dass das Begrenzen des Full-Timeline Sharpe auf den Full-Timeline Sharpe reduziert, dessen Gewinner bereits jeden vernünftigen Floor überschreitet. Die Falle ist speziell der Per-Trade / aktive Sharpe — und selbst die vollständig reparierte Per-Trade-Zielfunktion erreicht bestenfalls nur den Full-Timeline Sharpe (OOS 1.70 vs. 1.71), übertrifft ihn nie. Die primäre Lektion ist nicht die Reparatur; sie ist, von Anfang an auf der gesamten Zeitreihe zu messen.
Kernpunkte
- Die Zielfunktion ist die Entscheidung, keine Formalität. Eine Suche findet nicht "eine gute Strategie" — sie findet den Maximierer des Skalars, den Sie ihr übergeben haben, und verschiedene Skalare wählen völlig unterschiedliche Strategien bei identischen Daten. Die Zielfunktion zu wählen ist die Strategie zu wählen; alles nachgelagerte ist Buchhaltung. Das ist Goodharts Gesetz: sobald Ihre Metrik zum Ziel der Suche wird, wird die Suche jede Lücke zwischen ihr und dem, was Sie gemeint haben, ausnutzen.
- Der Per-Trade-Sharpe ist eine Falle. Gemessen nur auf den gehandelten Bars, wird er maximiert, indem so selten wie möglich gehandelt wird — je weniger Beobachtungen, desto leichter blähen ein paar glückliche Bewegungen das Verhältnis auf (eine Gaussian-Kontrolle bestätigt, dass Fat Tails nicht erforderlich sind; es ist ein Small-Sample-plus-Selection-Effekt). Über 600 Seeds hinweg wählt sie in 56% von ihnen eine Lotterie mit unter 5% Exposure und entartet in 57%; die typische entartete Auswahl mittelt einen In-Sample-Per-Trade-Sharpe von 4.58. Bei einem absichtlich krassen Seed krönte sie eine Acht-Trades-, 0.4%-Exposure-Strategie mit einem In-Sample-Per-Trade-Sharpe von 21.09, der auf einen Full-Timeline-Out-of-Sample-Sharpe von 0.13 zusammenbricht. Ein auf acht Beobachtungen aufgebautes Verhältnis hat einen Standardfehler von etwa ±7.7 annualisiert (Akt 4) — es war nie Information.
- Exposure-bewusste Zielfunktionen sind von Natur aus sicher. Raw PnL und Full-Timeline Sharpe entarteten nie (0%), weil sie die gesamte Zeitreihe messen und Untätigkeit automatisch bestraft wird. Man kann eine Full-Timeline-Metrik nicht durch seltenes Handeln austricksen. Raw PnLs einziger Fehler ist die entgegengesetzte Verzerrung — sie über-exponiert (mittlere Exposure 0.859, OOS 1.61 gegenüber dem wahren 1.77), driftet am Optimum vorbei, um mehr im Markt zu sein.
- Die Reparaturen funktionieren — aber sie bringen einen nur zurück zum Full-Timeline Sharpe. Ein Exposure Floor und eine Trade-Count-(conf_k)-Shrinkage heben jeweils unabhängig den Out-of-Sample-Sharpe und treiben die Entartung gegen null; zusammen erreichen sie ein Plateau. Aber dieses Plateau ist der Full-Timeline Sharpe: die Entartung fällt von 59.5% bei auf 0% bei , und der OOS-Sharpe steigt von 0.66 auf 1.71 — genau die Zahl, die der schlichte Full Sharpe unassistiert erzielt, und die vollständig reparierte robuste Zielfunktion landet tatsächlich einen Hauch darunter (OOS 1.70, 0.17% Entartung: schwach dominiert). Bei Seed 6 findet die robuste Zielfunktion einen nahezu optimalen, gut exponierten Schwellenwert wieder (, einen Gitterpunkt unter dem wahren ; 447 Trades; OOS Sharpe 1.77). Betrachten Sie conf_k als Fallback für den Fall, dass Ihnen eine Per-Trade-Metrik aufgezwungen wird, nicht als Upgrade gegenüber der Messung der gesamten Zeitreihe. Die genauen Koordinaten sind skalenabhängig; die Form der Fläche ist das übertragbare Ergebnis.
- Gestalten Sie die Zielfunktion so, dass sie nicht durch seltene glückliche Trades ausgetrickst werden kann. In Präferenzreihenfolge: auf der gesamten Zeitreihe messen (Standard), Exposure erfordern (stärkster einzelner Hebel), nach Trade-Anzahl schrumpfen (Zielfunktions-Ebene Minimum Track Record Length). Nichts davon macht die Suche klüger — es macht das Ziel ehrlich, sodass das Maximum, das die Suche unvermeidlich findet, eine Strategie ist, die Sie tatsächlich handeln würden.
Eine Parametersuche ist ein gehorsamer Flaschengeist. Er gewährt genau den Wunsch, den Sie formulieren, nicht den, den Sie gemeint haben — und "maximiere diese Metrik" ist der Wunsch. Formulieren Sie ihn als Per-Trade-Sharpe, und er wird acht glückliche Trades herbeizaubern und sie ein Vermögen nennen. Formulieren Sie ihn so, dass Flachbleiben bestraft wird und eine Handvoll Trades nur eine Handvoll Credit verdient, und derselbe Flaschengeist gibt Ihnen bei denselben Daten den echten Edge. Die Strategie, die Sie einsetzen, wurde in dem Moment gewählt, in dem Sie die Zielfunktion eingetippt haben. Wählen Sie sie absichtlich.
Das vollständige Experiment — der synthetische Markt, die sechs Zielfunktionen, die 600-Seed-Monte-Carlo-Simulation und die Reparatur-Sweep-Fläche, jede Zahl aus einem deterministischen Skript regenerierbar — ist im begleitenden Paper unter objective-design.marketmaker.cc, mit Code und Daten unter github.com/suenot/objective-design-degeneracy.
Dies ist eine Front im selben Krieg, den unsere anderen Studien aus unterschiedlichen Blickwinkeln führen. Der Deflated Sharpe Ratio bewertet den Gewinner einer Suche nach Multiple Testing — wo dieser Artikel fragt, ob die Zielfunktion überhaupt die richtige Strategie gewählt hat, fragt DSR, ob die gewählte Strategie schlägt, was reines Glück allein produzieren würde. Die kommende Probability of Backtest Overfitting-Studie greift denselben Selektions-Bias von der Resampling-Seite an und bewertet das Verfahren statt des Gewinners. Und die Look-Ahead-Bias-Taxonomie katalogisiert den anderen großen Erzeuger von falschem Sharpe — ein Leck aus der Zukunft — das durch einen völlig anderen Mechanismus dasselbe Symptom (ein glorreicher Backtest, der live stirbt) erzeugt. Objective Design, Deflation, Overfitting-Wahrscheinlichkeit, Look-Ahead: vier Namen für eine Disziplin — sich nicht von seinem eigenen Backtest täuschen zu lassen.
Authors
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.