EA-ProgrammierungNordZentrum · Österreich Projektanfrage

Praxiswissen · Automatisierter Handel

Sechzehn Fehlerquellen, an denen Handelssysteme scheitern

Die folgenden Punkte stammen aus der täglichen Arbeit an Expert Advisors, cBots und Indikatoren. Sie haben eines gemeinsam: Sie kosten Geld, sobald ein System live läuft — und sie lassen sich sämtlich vorher klären.

Frei zugänglich, auch ohne Auftrag. Anwendbar auf MetaTrader 4 und 5, cTrader, TradingView und TradeStation.

A · Plattform, Broker und Symbole

01

Serverzeit ist nicht Ihre Zeit

Die meisten Forex-Broker betreiben ihre Handelsserver auf UTC+2 im Winter und UTC+3 im Sommer, damit der Handelstag mit dem New Yorker Handelsschluss endet. Diese Umstellung folgt der amerikanischen Sommerzeitregel, nicht der europäischen — und die beiden fallen jedes Jahr zwei bis drei Wochen auseinander.

Die Folge: Ein Handelsfenster, das Sie als „08:00 bis 17:00 Uhr" beschreiben, verschiebt sich mehrfach im Jahr um eine Stunde, wenn im Programm einfach die Serverzeit abgefragt wird. In den kritischen Wochen zwischen der amerikanischen und der europäischen Zeitumstellung sind es dann zwei Stunden Abweichung. Dasselbe betrifft Nachrichtenfilter, Tagesabschlüsse und die Berechnung des Tagesverlusts.

Was zu tun ist: Legen Sie in der Spezifikation ausdrücklich fest, auf welche Zeitzone sich Ihre Angaben beziehen — Ortszeit, Serverzeit oder UTC. Die Umrechnung gehört ins Programm und muss den Sommerzeitwechsel beider Regionen kennen. Ein fest eingetragener Stundenversatz reicht nicht.
02

Pip ist nicht Point

Bei fünfstelligen Brokern hat EURUSD fünf Nachkommastellen statt vier. Ein Pip entspricht dann zehn Points. Bei JPY-Paaren wie USDJPY gilt eine andere Stellenzahl: dort sind es drei statt zwei Nachkommastellen. Bei Gold, Indizes und Kryptowährungen wieder andere.

Ein System, das intern in Points rechnet, aber mit Pip-Werten parametriert wird, arbeitet mit dem Zehnfachen des beabsichtigten Stops. Umgekehrt wird ein als 200 gemeinter Stop-Loss zu 20 Points — und die Position schließt bei der ersten Spreadausweitung. Das ist die häufigste Ursache dafür, dass ein System „völlig anders handelt als im Test".

Was zu tun ist: Nennen Sie in der Spezifikation immer die Einheit und ein Beispiel: „Stop-Loss 20 Pips, das entspricht bei EURUSD 0,00200". Das Programm sollte die Pip-Größe zur Laufzeit aus den Symboleigenschaften ableiten statt sie als Konstante zu führen.
03

Symbolnamen unterscheiden sich je Broker

Dasselbe Instrument heißt bei verschiedenen Brokern unterschiedlich: EURUSD, EURUSD.r, EURUSDm, EURUSD_i, EURUSD-ECN. Gold wird als XAUUSD, GOLD oder XAUUSD.spot geführt, der DAX als GER40, DE40, DAX40 oder GERMANY40. Ein System mit fest eingetragenen Symbolnamen läuft nach einem Brokerwechsel nicht mehr — oder schlimmer: Es läuft, findet aber die Korrelationssymbole nicht und trifft Entscheidungen auf unvollständiger Basis.

Dasselbe gilt für Multi-Symbol-Systeme, die intern Paare vergleichen, und für Trade-Kopierer zwischen Konten bei unterschiedlichen Brokern.

Was zu tun ist: Symbolnamen gehören in die Eingabeparameter, nicht in den Programmcode. Bei Mehrkontenbetrieb braucht es zusätzlich eine Zuordnungstabelle, die Symbolnamen zwischen den Brokern übersetzt.
04

Kontraktspezifikationen ändern sich

Broker passen Mindestlotgröße, Lotschrittweite, Hebel, Stop-Level und Margin-Anforderungen regelmäßig an — häufig ohne gesonderte Ankündigung an einzelne Kunden. Ein System, das eine Mindestlotgröße von 0,01 voraussetzt, scheitert stillschweigend, wenn der Broker auf 0,1 umstellt. Ein System, das den Stop-Loss zwei Punkte vom aktuellen Kurs entfernt setzt, bekommt eine Fehlermeldung, sobald der Broker ein Stop-Level von zehn Punkten einführt.

Besonders unangenehm ist der Fall, in dem die Order abgelehnt wird, das Programm den Fehlercode aber nicht auswertet: Die Position bleibt dann ohne Absicherung offen.

Was zu tun ist: Alle Kontraktparameter zur Laufzeit vom Server abfragen und Positionsgrößen darauf normalisieren. Jede abgelehnte Order muss protokolliert und behandelt werden — eine ungesicherte offene Position ist ein Fehler, kein Randfall.

B · Backtest, Optimierung und Testmethodik

05

Der Backtest ist nur so gut wie seine Annahmen

Modellqualität, Spread, Kommission und Swap-Sätze bestimmen das Testergebnis oft stärker als die Handelsstrategie selbst. Ein Test mit konstantem Ein-Pip-Spread liefert Zahlen, die im Livebetrieb nicht erreichbar sind — reale Spreads weiten sich um Wirtschaftstermine, zur Tageswende und in dünnen Marktphasen um ein Vielfaches aus.

Bei kurzfristigen Strategien ist der Effekt dramatisch: Ein Scalping-System mit durchschnittlich fünf Pips Zielgewinn verliert bei einem realistischen statt eines idealisierten Spreads schnell seine gesamte Rendite. Hinzu kommen Kommissionen, die bei ECN-Konten gerne vergessen werden, und Swap-Kosten bei Übernachtpositionen.

Was zu tun ist: Testen Sie mit variablem Spread aus echten Tickdaten, hinterlegen Sie Kommission und Swap, und rechnen Sie zusätzlich einen Sicherheitsaufschlag für Slippage ein. Realistische Annahmen kosten Rendite im Test und sparen Geld im Betrieb.
06

Look-Ahead-Bias: der Test, der die Zukunft kennt

Ein Backtest, dessen Ergebnis zu gut aussieht, greift meist unbeabsichtigt auf Information zu, die zum Entscheidungszeitpunkt noch nicht vorlag. Die typischen Quellen: Es wird auf den Schlusskurs der aktuellen, noch laufenden Kerze zugegriffen. Ein Indikator aus einer höheren Zeitebene liefert einen Wert, der erst am Ende der Stunde feststeht, wird aber schon zu Beginn abgefragt. Ein Indikator zeichnet nachträglich um, sobald neue Kursdaten eintreffen.

Solche Systeme zeigen im Test eine nahezu perfekte Trefferquote und verlieren im Livebetrieb vom ersten Tag an. Die Ursache ist im fertigen Programm schwer zu erkennen, weil der Test formal fehlerfrei durchläuft.

Was zu tun ist: Signale grundsätzlich auf abgeschlossenen Kerzen berechnen. Nachzeichnende Indikatoren identifizieren und entweder ersetzen oder um eine Kerze versetzt auswerten. Ein Test, der eine Trefferquote über achtzig Prozent ausweist, gehört auf Look-Ahead-Bias geprüft, bevor irgendetwas anderes betrachtet wird.
07

Mehr Parameter bedeutet nicht besser

Jeder zusätzliche optimierbare Parameter erhöht die Wahrscheinlichkeit, dass die Optimierung Zufallsrauschen statt tragfähiger Marktstruktur findet. Wer zehntausend Kombinationen durchrechnet, findet mit Sicherheit eine, die auf den Testdaten hervorragend aussieht — allein deshalb, weil bei genügend Versuchen immer etwas gut aussieht.

Der Prüfstein ist nicht der Bestwert, sondern die Umgebung des Bestwerts. Wenn ein System mit Periode 14 hervorragend läuft, mit 13 und 15 aber Verlust macht, haben Sie kein System gefunden, sondern eine Zufälligkeit. Liegt dagegen ein breites Plateau vor, in dem alle benachbarten Einstellungen ähnlich abschneiden, ist das ein belastbares Ergebnis.

Was zu tun ist: Parameterzahl bewusst klein halten. Ergebnisse als Fläche betrachten, nicht als Rangliste. Und die Optimierung durch eine Walk-Forward-Analyse absichern: auf einem Zeitraum optimieren, auf dem darauffolgenden unverändert testen, Fenster weiterschieben, wiederholen.
08

Der Endgewinn ist die falsche Zielgröße

Optimiert man auf den absoluten Gewinn, gewinnt fast immer die Variante mit dem größten Risiko — typischerweise eine, die einmal einen extremen Drawdown durchgestanden hat und danach zufällig wieder hochgelaufen ist. Live wäre das Konto in der Zwischenzeit liquidiert worden oder Sie hätten das System entnervt abgeschaltet.

Sinnvollere Zielgrößen setzen Ertrag ins Verhältnis zum eingegangenen Risiko: der Recovery Factor (Nettogewinn geteilt durch maximalen Drawdown), der Profitfaktor unter Berücksichtigung der Trade-Anzahl oder eine eigene Funktion, die zusätzlich die Gleichmäßigkeit der Kapitalkurve bewertet. In MetaTrader lässt sich eine solche Bewertungsfunktion selbst hinterlegen.

Was zu tun ist: Vor der Optimierung festlegen, was „gut" bedeutet — und dabei den maximal erträglichen Drawdown als harte Grenze definieren, nicht als Ergebnisgröße.

C · Betrieb, Risiko und Ausfallsicherheit

09

Klären Sie, was am Wochenende geschieht

Kurslücken bei der Sonntagseröffnung springen über Stop-Loss-Marken hinweg. Ausgeführt wird zum nächsten verfügbaren Kurs, nicht zum gewünschten — der tatsächliche Verlust kann deshalb erheblich über dem geplanten liegen. Bei Indizes und Einzelaktien treten dieselben Lücken über Nacht und um Quartalszahlen herum auf.

Die Entscheidung, ob freitags geschlossen, reduziert oder gehalten wird, ist eine strategische, keine technische. Sie muss aber getroffen werden, sonst entscheidet der Zufall. Dasselbe gilt für Feiertage mit verkürztem Handel und für den Rollover bei Terminkontrakten.

Was zu tun ist: Legen Sie eine Wochenendregel fest und benennen Sie sie in der Spezifikation. Wer Lücken vermeiden will, schließt zu einer definierten Uhrzeit; wer über das Wochenende halten will, sollte die Positionsgröße dafür gesondert begrenzen.
10

Mehrere Systeme auf einem Konto brauchen Magic Numbers

Ohne eindeutige Kennung greift ein Handelssystem auf Positionen zu, die ein anderes eröffnet hat — und schließt sie nach seinen eigenen Regeln. Bei zwei Systemen auf einem Konto führt das zu Verhalten, das sich in keinem Backtest reproduzieren lässt und dessen Ursache man tagelang sucht.

Betroffen ist auch der manuelle Handel auf demselben Konto: Eine von Hand eröffnete Position ohne Magic Number wird von einem schlecht abgesicherten System gerne mit übernommen. Zusätzlich muss die Margin-Auslastung über alle Systeme hinweg betrachtet werden, sonst blockieren sie sich gegenseitig.

Was zu tun ist: Vergeben Sie den Nummernbereich einmal zentral, bevor das zweite System hinzukommt, und dokumentieren Sie ihn. Jedes System darf ausschließlich eigene Positionen verändern. Ein gemeinsames Risikolimit über alle Systeme gehört obendrauf.
11

Das System muss einen Neustart überstehen

Terminalabsturz, Windows-Update, Stromausfall, Broker-Wartungsfenster: Unterbrechungen sind der Normalfall, nicht die Ausnahme. Ein Programm ohne Zustandsspeicherung weiß nach dem Neustart nicht mehr, ob der Break-Even bereits gesetzt, die erste Teilposition schon geschlossen oder der Tagesverlust bereits angerechnet wurde.

Im günstigen Fall wird eine Aktion doppelt ausgeführt. Im ungünstigen Fall setzt das System einen bereits nachgezogenen Stop wieder auf den Ausgangswert zurück und gibt damit gesicherten Gewinn auf. Bei Systemen mit mehrstufiger Ausstiegslogik kann der Zustand dauerhaft inkonsistent bleiben.

Was zu tun ist: Der Zustand gehört dauerhaft gespeichert — in Terminal-Variablen oder einer Datei —, nicht in eine Variable im Arbeitsspeicher. Beim Start muss das System den tatsächlichen Positionsbestand einlesen und mit dem gespeicherten Zustand abgleichen. Weicht beides ab, ist eine Meldung sinnvoller als eine stille Annahme.
12

Demo- und Livekonto verhalten sich unterschiedlich

Auf Demokonten wird praktisch jede Order sofort und zum angezeigten Kurs ausgeführt. Im Livebetrieb kommen Requotes, Teilausführungen, Ausführungsverzögerungen und Spreadausweitungen hinzu. Bei manchen Kontomodellen unterscheidet sich zusätzlich das Ausführungsmodell selbst.

Für Systeme mit weiten Zielen ist der Unterschied verkraftbar. Für kurzfristige Strategien entscheidet er über Gewinn und Verlust: Eine Verzögerung von 300 Millisekunden kostet bei einem Ausbruchssystem regelmäßig mehr als die gesamte kalkulierte Marge.

Was zu tun ist: Vor dem regulären Einsatz einige Wochen auf einem kleinen Livekonto laufen lassen und die tatsächlich erzielten Ausführungskurse mit den erwarteten vergleichen. Dieser Test kostet wenig und findet Fehler, die kein Backtest zeigt.
13

Betreiben Sie das System nicht auf dem Arbeitsrechner

Ein Rechner, der nachts in den Energiesparmodus wechselt, handelt nicht. Ein Windows-Update, das um drei Uhr morgens neu startet, unterbricht laufende Positionen ohne Vorwarnung. Und eine Heim-Internetverbindung fällt häufiger aus, als man annimmt.

Hinzu kommt die Latenz: Ein Server in geografischer Nähe zum Rechenzentrum des Brokers verkürzt die Ausführungsverzögerung deutlich. Für längerfristige Systeme ist das nebensächlich, für kurzfristige entscheidend.

Was zu tun ist: Für den Dauerbetrieb einen VPS oder einen eigenen Windows-Server nutzen — die monatlichen Kosten liegen unter dem, was ein einziger verpasster oder schlecht ausgeführter Einstieg kostet. Automatische Neustarts deaktivieren und eine Überwachung einrichten, die meldet, wenn das Terminal nicht mehr läuft.

D · Prop Trading und Portierung

14

Warum Ihr System das Prop-Konto sprengt

Prop-Trading-Firmen wie FTMO, FundedNext oder E8 erlauben automatisierten Handel ausdrücklich. Die Bedingungen unterscheiden sich aber grundlegend von einem Privatkundenkonto: Der Hebel ist meist auf 1:50 bis 1:100 begrenzt statt 1:500, die Spreads sind weiter, und es gilt eine harte Tagesverlustgrenze von typischerweise fünf Prozent sowie ein Gesamtdrawdown-Limit von acht bis zehn Prozent.

Ein System, das auf einem Retail-Konto mit hohem Hebel und engem Spread getestet wurde, verstößt auf einem Prop-Konto häufig schon in der ersten Woche gegen diese Grenzen — nicht weil die Strategie schlecht wäre, sondern weil die Positionsgrößen nicht zu den Regeln passen. Verfahren wie Grid und Martingale sind besonders gefährdet, weil sie die Positionsgröße nach Verlusten erhöhen; manche Anbieter untersagen sie deshalb ganz.

Zu beachten ist außerdem der Unterschied zwischen statischem und nachlaufendem Drawdown: Bei einem nachlaufenden Limit steigt die Verlustschwelle mit dem Kontostand mit, was für algorithmische Systeme deutlich schwerer zu handhaben ist.

Was zu tun ist: Die Regelprüfung gehört in das System selbst eingebaut, nicht in eine Excel-Tabelle daneben: laufende Berechnung des Tagesverlusts, Handelssperre bei Annäherung an die Grenze, Positionsgrößen aus dem verbleibenden Risikobudget abgeleitet. Vorher im Backtest simulieren, ob die Vorgaben über den gesamten Zeitraum eingehalten worden wären.
15

Was KI-Konverter bei Pine Script übersehen

Es gibt inzwischen Werkzeuge, die Pine Script automatisch nach MQL5 übersetzen. Sie erzeugen Code, der fehlerfrei kompiliert. Das ist aber nicht dasselbe wie Code, der dieselben Handelsentscheidungen trifft — und der Unterschied fällt oft erst im Livebetrieb auf.

Der Grund liegt in den Ausführungsmodellen. Pine Script rechnet die gesamte Historie bei jedem Aufruf neu durch und wertet die laufende Kerze fortlaufend aus; MQL5 arbeitet ereignisgesteuert und behandelt eine laufende Kerze anders als eine abgeschlossene. Hinzu kommen abweichende Bar-Indexierung, unterschiedliche Standardwerte gleichnamiger Indikatoren, eine andere Behandlung fehlender Werte und ein völlig anderes Ordermodell: Pine kennt eine vereinfachte Strategiesimulation, MQL5 echte Orders mit Ablehnungen, Teilausführungen und Mindestabständen.

Was zu tun ist: Eine Portierung ist erst abgeschlossen, wenn nachgewiesen ist, dass beide Seiten auf denselben Kursdaten dieselben Ein- und Ausstiege erzeugen. Kleine, erklärbare Abweichungen sind normal; größere sind ein Fehler. Verlangen Sie diesen Abgleich als Abnahmekriterium — von jedem Dienstleister und erst recht von jedem Werkzeug.

E · Beauftragung

16

Sparen Sie an der richtigen Stelle

Der aufwendigste Teil eines Entwicklungsprojekts ist selten das Programmieren, sondern das Klären offener Fragen. Eine Strategie, die im Kopf des Traders vollständig erscheint, enthält typischerweise zehn bis zwanzig ungeklärte Randfälle — genau die, die auf dieser Seite beschrieben sind.

Jede dieser Fragen erzeugt eine Rückfrage, jede Rückfrage kostet Zeit auf beiden Seiten, und Änderungen nach Beginn der Implementierung kosten ein Mehrfaches gegenüber Änderungen in der Spezifikation. Wer seine Regeln vorab schriftlich und einschließlich der Randfälle liefert, senkt die Projektkosten deshalb spürbar — meist stärker als jede Preisverhandlung.

Was zu tun ist: Beschreiben Sie Einstieg, Ausstieg, Positionsgröße, Risikogrenzen, Handelszeiten und Wochenendverhalten schriftlich, bevor Sie anfragen. Wenn Sie dabei feststellen, dass eine Regel mehrdeutig ist, haben Sie bereits Geld gespart.

Diese Punkte sind Bestandteil jeder Anforderungsaufnahme

Sie müssen sie nicht vorab lösen — es genügt zu wissen, dass sie zu klären sind. Im Erstgespräch gehen wir sie gemeinsam durch, kostenfrei und unverbindlich.

Projekt anfragen
17

Weitere Fragen

Sind diese Hinweise auch für konzessionierte Häuser relevant?

Ja, aber mit anderem Gewicht. Für eine Wertpapierfirma sind Look-Ahead-Bias und unrealistische Backtest-Annahmen nicht nur ein wirtschaftliches, sondern ein aufsichtsrechtliches Thema: Die jährliche Selbstbewertung nach WAG 2018 verlangt eine Validierung der Systeme, und eine Validierung auf Grundlage geschönter Annahmen ist keine. Weiteres auf der Seite für Wertpapierfirmen.

Woran erkenne ich einen unseriösen Anbieter?

An Renditeversprechen. Wer Ihnen zusagt, dass ein System Gewinn abwirft, verkauft Ihnen etwas anderes als Software. Weitere Warnzeichen: kein Quellcode im Lieferumfang, keine schriftliche Spezifikation vor Beginn, Kapitalkurven als Verkaufsargument, und der Verkauf fertiger Systeme an viele Käufer gleichzeitig.

Kann ich diese Punkte selbst prüfen?

Die meisten ja, und das sollten Sie auch. Serverzeit, Symbolnamen und Kontraktspezifikationen lesen Sie im Terminal ab. Look-Ahead-Bias erkennen Sie oft schon an einer Trefferquote über achtzig Prozent. Für die übrigen Punkte brauchen Sie den Quellcode — ein weiterer Grund, ihn sich immer geben zu lassen.

Fragen zu einem dieser Punkte?

Wenn Sie unsicher sind, ob einer davon Ihr System betrifft, klären wir das im Erstgespräch — kostenfrei und unverbindlich.

Projekt anfragen