Trading System Design Und Optimierung


Trading Systems Coding: Testing, Troubleshooting und Optimierung Jetzt, da Sie ein Trading-System entworfen und codiert haben, ist es Zeit, es zu testen, um sicherzustellen, dass Ihre Codierung frei von logischen und technischen Fehlern ist. Wir werden auch auf etwas bekannt als Optimierung - ein Feature in einigen Trading-Programme, die Ihnen erlaubt, Feinabstimmung Ihrer Trading-Regeln, um die Aktien, die Sie auf den Handel zu planen. Testen Ihres Trading-Systems Die überwiegende Mehrheit der Trading-Anwendungen, die Programmiersprachen unterstützen, unterstützen auch Test-Tools. Diese Werkzeuge sind in zwei Kategorien unterteilt: 1. Technische technische Test-Tools suchen nach technischen Fehlern in Ihrem Code. Wenn Sie beispielsweise vergessen, ein Semikolon nach einer Anweisung hinzuzufügen, wird Ihnen das technische Test-Tool mitgeteilt, dass Ihre Anweisung ungültig ist. Der Standort des technischen Testwerkzeugs hängt von der verwendeten Handelsanwendung ab. MetaTrader zeigt einen Fehler oder fehlerhafte Ergebnisse an, wenn Sie versuchen, Ihren Code zu kompilieren, während Trading-Anwendungen wie Tradecision ein Code-Check-Dienstprogramm in die Schnittstelle integriert haben, mit der Sie Ihren Code auf Fehler überprüfen können, bevor Sie ihn anwenden. 2. Logische Logische Test-Tools suchen nach logischen Fehlern in Ihrem Code. Zum Beispiel, wenn Sie zufällig ein größeres als Zeichen anstelle eines weniger als Zeichen (das ist kein technischer Fehler) verwendet wird, wird ein logisches Test-Tool zeigen Ihnen, dass Ihre Ergebnisse keinen Sinn machen. Das beliebteste logische Test-Tool ist das Backtesting-Tool. Mit diesem Tool können Sie Daten übernehmen und Ihr Handelssystem auf diese Daten anwenden. Dies gibt Ihnen eine Vorstellung von folgendem: Ob Ihr Handelssystem ein rentables ist 13 Welche Bedingungen erweisen sich am meisten profitabel 13 Wenn irgendwelche Fehler in Ihren Regeln vorhanden sein könnten (Weitere Informationen finden Sie unter Backtesting: Interpretieren der Vergangenheit.) Fehlerbehebung bei Ihrem Trading System Wie bei jeder anderen Art von Programmierung, kann die Fehlersuche eine langwierige und schwierige Aufgabe sein. Das Finden von Fehlern in Ihrem Code erfordert systematische Sortierung durch Ihren Code, um syntaktische Fehler zu identifizieren, die, obwohl oft kleinere, Ihr Programm zum Stillstand bringen können. Hier sind einige häufige Fehler zu suchen: Fehlende Semikolons nach Aussagen - diese müssen nach jeder Aussage sein. 13 Undefinierte Variablen - Denken Sie daran, dass Sie sie vorher erklären müssen, bevor Sie sie verwenden 13 Rechtschreibfehler - Wenn irgendwelche Namen oder Funktionen falsch geschrieben werden, gibt die Handelsanwendung einen Fehler zurück (siehe Beispiel unten). 13 Falsche Verwendung von () - Denken Sie daran, dass ein Wert einem anderen Wert zuweist, während Mittel gleich sind. 13 Falsche Verwendung von integrierten Funktionen - Konsultieren Sie Ihre Trading Applikationsdokumentation oder Anwendungsprogrammierschnittstelle (API), um sicherzustellen, dass Sie die korrekte Syntax verwenden. Einige Trading-Anwendungen enthalten eine Funktion, mit der Sie Ihren Code testen können, bevor Sie ihn verwenden oder kompilieren. Diese Funktion ermöglicht es Ihnen, zu sehen, was der Fehler ist und auf welcher Zeile es gefunden werden kann. Nehmen Sie Tradecision zum Beispiel: Hier sehen wir, dass Tradecision uns den Ort (Zeile und Spalte) des Fehlers gibt, eine Beschreibung des Fehlers und die Art des Fehlers (in diesem Fall ist es syntaktisch). Wenn wir den Ausdruck betrachten, können wir sehen, dass in Spalte 8 xrossBelow keine gültige Funktion ist. Wenn wir das x (das ist in Spalte 8) mit einem c ersetzen, dann haben wir gültigen Code. Wenn wir uns bei MetaTrader anschauen, können wir sehen, dass die Fehler auftauchen, wenn wir versuchen, das Programm zu kompilieren: Hier sehen wir, dass in der Beschreibung die BuyNow Variable nicht definiert ist. Ein Doppelklick auf diese Fehlermeldung bringt uns an den spezifischen Ort des Fehlers im Code. Wie Sie sehen können, geben die meisten Trading-Anwendungen Ihnen eine einfache Möglichkeit, technische Fehler zu finden und sie zu beheben. Die Behebung der Fehler beinhaltet einfach systematisch durch jede Fehlermeldung und dann die Neukompilierung des Codes und der Anwendung des Handelssystems auf Ihre Charts. Optimierung Ihres Trading-Systems Mit einigen Trading-Applikationen können Sie die zu optimierenden Variablen auswählen. Tradecision, zum Beispiel, können Sie leicht wählen Sie eine Variable und ersetzen Sie es mit Code, der Optimierung versuchen wird. Optimierung selbst ist einfach ein Prozess, der den optimalen Wert für ein bestimmtes Handelssystemelement auf der Grundlage vergangener Ergebnisse und Performance findet. Beachten Sie, dass eine Überoptimierung zu Handelssystemen führt, die sich nicht in der Lage sind, sich an die Marktbedingungen anzupassen, daher ist es wichtig, nur einige wichtige Variablen zu optimieren, nicht jede Variable Hier ist das, was die Optimierungsfunktion in der Tradecision aussieht: Sie können sehen, dass wir deklariert haben Zwei neue Variablen und setzen sie gleich. Das bedeutet einfach, dass das Handelsprogramm dies mit der optimalen Zahl ersetzen wird. Als nächstes können Sie sehen, dass wir die neuen Variablen in unserer Handelsstrategie verwendet haben. Schließlich setzen wir einen Bereich für die Zahlen (damit das Programm nicht nach unendlich suchen). Einige andere Handelsprogramme haben Funktionen, die in ähnlicher Weise funktionieren, so dass Sie den numerischen Wert durch a ersetzen und die Handelsanwendung erklären, um sie zu optimieren. Fazit Inzwischen sollten Sie ein funktionierendes Handelssystem entwickelt haben, in dem Sie Vertrauen haben können. Im nächsten Teil dieser Serie werden Sie lernen, wie Sie Ihr Trading-System auf Charts anwenden und wie man es benutzt, um Handelsentscheidungen zu treffenWie, um das Handelssystem zu optimieren HINWEIS: Das ist ziemlich fortgeschrittenes Thema. Bitte vorherige AFL-Tutorials lesen. Die Idee hinter einer Optimierung ist einfach. Zuerst musst du ein Handelssystem haben, das kann ein einfacher gleitender durchschnittlicher Crossover sein. In fast jedem System gibt es einige Parameter (als Mittelungszeitraum), die entscheiden, wie sich das System verhält (d. h. ist gut geeignet für Langzeit - oder Kurzzeit, wie reagiert es auf hochvolatile Bestände usw.). Die Optimierung ist der Prozess der Suche nach optimalen Werten dieser Parameter (mit dem höchsten Gewinn aus dem System) für ein gegebenes Symbol (oder ein Portfolio von Symbolen). AmiBroker ist eines der wenigen Programme, mit denen Sie Ihr System auf mehreren Symbolen gleichzeitig optimieren können. Zur Optimierung Ihres Systems müssen Sie von einem bis zu zehn zu optimierenden Parametern definieren. Sie entscheiden, was ein minimaler und maximal zulässiger Wert des Parameters ist und in welchen Inkrementen dieser Wert aktualisiert werden soll. AmiBroker führt dann mehrere Backtests durch, die das System mit allen möglichen Kombinationen von Parameterwerten verwenden. Wenn dieser Prozess beendet ist, zeigt AmiBroker die Ergebnisliste nach Gewinn nach. Sie können die Werte der Optimierungsparameter sehen, die das beste Ergebnis liefern. Schreiben von AFL-Formel Die Optimierung im Back-Tester wird über die neue Funktion Optimize unterstützt. Die Syntax dieser Funktion lautet wie folgt: Variable optimieren ("Beschreibung", "Standard", "Min. Max."). - Variable - ist die normale AFL-Variable, die den von der Optimierungsfunktion zurückgegebenen Wert zugewiesen wird. Bei normaler Backtest-, Scanning-, Explorations - und Comentary-Modi gibt die Optimierungsfunktion den Standardwert zurück, so dass der obige Funktionsaufruf äquivalent ist: Variable Default Im Optimierungsmodus optimiert die Funktion die sukzessiven Werte von min bis max (inklusive) mit Step Stepping. Quot Descriptionquot ist ein String, der verwendet wird, um die Optimierungsvariable zu identifizieren und wird als Spaltenname in der Optimierungsergebnisliste angezeigt. Default ist ein Standardwert, der die Funktion in den Explorations-, Indikator-, Kommentar-, Scan - und normalen Back-Test-Modi optimiert. Min ist ein Minimalwert der Variablen, die optimiert wird max ist ein Maximalwert der Variablen, die optimiert wird, ist ein Intervall, Wert von min bis max AmiBroker unterstützt bis zu 64 Anrufe zur Optimierung der Funktion (also bis zu 64 Optimierungsvariablen), beachten Sie, dass bei einer ausführlichen Optimierung dann eine gute Idee ist, die Anzahl der Optimierungsvariablen auf wenige zu beschränken. Jeder Aufruf zur Optimierung generieren (max - min) Schritt Optimierungsschleifen und mehrere Anrufe zur Optimierung multiplizieren die Anzahl der benötigten Läufe. Zum Beispiel benötigen die Optimierung von zwei Parametern mit 10 Schritten 1010 100 Optimierungsschleifen. Anrufoptimierung nur ONCE pro Variable am Anfang deiner Formel, da jeder Aufruf eine neue Optimierungsschleife erzeugt Mehrfachsymboloptimierung wird von AmiBroker voll unterstützt Maximaler Suchraum beträgt 2 64 (10 19 10.000.000.000.000.000.000) Kombinationen 1. Einzelne Variable Optimierung: Sigavg Optimize (Signal-Durchschnitt 9. 2. 20. 1) Buy Cross (MACD (12. 26), Signal (12. 26. Sigavg)) Kreuz verkaufen (Signal (12. 26. Sigavg), MACD (12. 26)) 2. Zwei-Variable-Optimierung (geeignet für 3D-Charting) per Optimize (pro 2. 5. 50. 1) Level Optimize (Level 2. 2. 150. 4) Buy Cross (CCI (per), - Level) Verkaufen Kreuz (Level, CCI (per)) 3. Multiple (3) Variable Optimierung: mfast Optimize (MACD Fast 12. 8. 16. 1) mslow Optimize (MACD Slow. 26. 17. 30. 1) sigavg Optimize (Signal Durchschnittlich 9. 2. 20. 1) Buy Cross (MACD (mfast, mslow) Signal (mfast, mslow, sigavg)) Kreuz verkaufen (Signal (mfast, mslow, sigavg), MACD (mfast, mslow)) Nach dem Eintreten Die Formel klicken Sie einfach auf die Schaltfläche Optimieren im Fenster quotAutomatic Analysisquot. AmiBroker startet alle möglichen Kombinationen von Optimierungsvariablen und meldet die Ergebnisse in der Liste. Nach der Optimierung erfolgt die Ergebnisliste nach dem Nettogewinn. Da Sie die Ergebnisse durch eine beliebige Spalte in der Ergebnisliste sortieren können, ist es einfach, die optimalen Werte der Parameter für den niedrigsten Drawdown, die geringste Anzahl von Trades, den größten Gewinnfaktor, das niedrigste Marktrisiko und die höchste risikoadjustierte Jahresrendite zu erhalten. Die letzten Spalten der Ergebnisliste geben die Werte der Optimierungsvariablen für den gegebenen Test an. Wenn Sie entscheiden, welche Kombination von Parametern Ihren Bedürfnissen entspricht, ist das Beste, was Sie tun müssen, um die Standardwerte bei der Optimierung von Funktionsaufrufen mit den optimalen Werten zu ersetzen. Im laufenden Stadium müssen Sie sie im Handlungsfenster bearbeiten (der zweite Parameter zur Optimierung des Funktionsaufrufs). Anzeigen von 3D-animierten Optimierungsdiagrammen Um das 3D-Optimierungsdiagramm anzuzeigen, müssen Sie zuerst eine Variable mit zwei Variablen ausführen. Zwei variable Optimierung benötigt eine Formel mit 2 Optimize () Funktionsaufrufen. Eine Beispiel-Zwei-Variable-Optimierungsformel sieht so aus: per Optimize (pro 2. 5. 50. 1) Level Optimize (Level 2. 2. 150. 4) Buy Cross (CCI (per), - Level) Sell Cross (Level, CCI (per)) Nach dem Eingeben der Formel müssen Sie auf die Schaltfläche "OK" klicken. Sobald die Optimierung abgeschlossen ist, klicken Sie auf den Dropdown-Pfeil auf die Schaltfläche "Optimieren" und wählen Sie "3D-Optimierungsdiagramm anzeigen". In wenigen Sekunden erscheint ein buntes dreidimensionales Flächenplot in einem 3D-Chart-Viewer-Fenster. Ein Beispiel-3D-Diagramm, das mit der obigen Formel erstellt wurde, ist unten gezeigt. Die 3D-Diagramme zeigen standardmäßig Werte des Nettogewinns gegenüber Optimierungsvariablen an. Sie können jedoch 3D-Oberflächen-Diagramm für jede Spalte in der Optimierung Ergebnis-Tabelle. Klicken Sie einfach auf die Spaltenüberschrift, um sie zu sortieren (blauer Pfeil zeigt an, dass die Optimierungsergebnisse nach der ausgewählten Spalte sortiert werden) und wählen Sie dann erneut 3D-Optimierungsgrafik anzeigen. Durch die Visualisierung, wie sich Ihre Systemparameter auf die Handelsleistung auswirken, können Sie leichter entscheiden, welche Parameterwerte quittilequot produzieren und welche die Performance des Qurobustquot-Systems erbringen. Robuste Einstellungen sind Regionen im 3D-Graphen, die allmähliche und nicht abrupte Änderungen im Flächenplot zeigen. 3D-Optimierungsdiagramme sind ein großartiges Werkzeug, um eine Kurvenanpassung zu verhindern. Kurvenanpassung (oder Überoptimierung) tritt auf, wenn das System komplexer ist, als es sein muss, und all diese Komplexität konzentrierte sich auf Marktbedingungen, die niemals wieder passieren können. Radikale Veränderungen (oder Spikes) in den 3D-Optimierungsdiagrammen zeigen deutlich über optimierte Bereiche. Sie sollten wählen, Parameter-Region, die eine breite und breite Plateau auf 3D-Diagramm für Ihr echtes Leben Handel produziert. Parametersätze, die Gewinnspitzen erzeugen, funktionieren nicht zuverlässig im realen Handel. 3D-Karten-Viewer-Steuerelemente AmiBrokers 3D-Karten-Viewer bietet insgesamt Viewing-Funktionen mit voller Graphenrotation und Animation. Jetzt können Sie Ihre Systemergebnisse aus jeder erdenklichen Perspektive ansehen. Sie können die Position und andere Parameter des Diagramms mit der Maus, der Symbolleiste und den Tastenkombinationen steuern, was auch immer Sie für Sie leichter finden. Unten finden Sie die Liste. - zum Drehen - gedrückt halten LEFT-Maustaste gedrückt und in XY-Richtungen gedrückt - zum Vergrößern, Verkleinern - Halten Sie die RECHTS-Maustaste gedrückt und bewegen Sie sich in XY-Richtungen - zum Verschieben (übersetzen) - halten Sie die linke Maustaste und die STRG-Taste gedrückt Bewegen Sie sich in XY Richtungen - zum Animieren - halten Sie die linke Maustaste gedrückt, ziehen Sie schnell und lassen Sie den Knopf los, während Sie SPACE ziehen - animieren (automatisch drehen) LINKS PFEILTASTE - drehen Sie sich vertikal. Links RECHTS PFEILTASTE - drehen Sie sich vert. Rechts PFEILTASTE - drehen horiz. Up DOWN PFEILTASTE - drehen horiz. NUMPAD 6 - nach rechts bewegen NUMPAD 6 - nach rechts bewegen NUMPAD 8 - nach oben bewegen NUMPAD 2 - nach unten verschieben PAGE UP - Wasserstand nach oben PAGE DOWN - Wasserstand nach unten Intelligente (nicht erschöpfende) Optimierung AmiBroker bietet jetzt eine intelligente (nicht erschöpfende) Optimierung zusätzlich zur regelmäßigen, erschöpfenden Suche. Eine nicht erschöpfende Suche ist sinnvoll, wenn die Anzahl aller Parameterkombinationen des gegebenen Handelssystems einfach zu groß ist, um für eine abschließende Suche möglich zu sein. Die anspruchsvolle Suche ist vollkommen in Ordnung, solange es vernünftig ist, sie zu benutzen. Lass uns sagen, dass du 2 Parameter von 1 bis 100 hast (Schritt 1). Das ist 10000 Kombinationen - perfekt für eine ausführliche Suche. Jetzt mit 3 Parametern hast du 1 Million Kombinationen - es ist immer noch OK für eine abschließende Suche (kann aber auch lang sein). Mit 4 Parametern haben Sie 100 Millionen Kombinationen und mit 5 Parametern (1..100) haben Sie 10 Milliarden Kombinationen. In diesem Fall wäre es zu zeitaufwändig, alle von ihnen zu überprüfen, und dies ist der Bereich, in dem nicht erschöpfende Smart-Search-Methoden das Problem lösen können, das in einer angemessenen Zeit nicht mit einer erschöpfenden Suche lösbar ist. Hier ist absolut die SIMPLEST-Anleitung, wie man einen neuen, nicht erschöpfenden Optimierer (in diesem Fall CMA-ES) einsetzt. 1. Öffnen Sie Ihre Formel im Formel-Editor 2. Fügen Sie diese einzelne Zeile am oberen Rand Ihrer Formel hinzu: OptimizerSetEngine (quotcmaequot) können Sie auch hier quadratisch oder quottribquot verwenden. 3. (Optional) Wählen Sie Ihr Optimierungsziel in Automatische Analyse, Einstellungen, quotWalk - Forwardquot-Registerkarte, Optimierungszielfeld. Wenn du diesen Schritt überspringst, wird es für CARMDD optimieren (zusammengesetzte jährliche Rendite geteilt durch maximales Drawdown). Jetzt, wenn Sie mit dieser Formel optimieren, wird es neue evolutionäre (nicht erschöpfende) CMA-ES-Optimierung verwenden. Wie funktioniert es Die Optimierung ist der Prozess der Suche nach Minimum (oder Maximum) der gegebenen Funktion. Jedes Handelssystem kann als eine Funktion einer bestimmten Anzahl von Argumenten betrachtet werden. Die Eingaben sind Parameter und Zitatdaten. Die Ausgabe ist dein Optimierungsziel (zB CARMDD). Und du suchst nach maximaler Funktion. Einige der intelligenten Optimierungsalgorithmen basieren auf der Natur (Tierverhalten) - PSO-Algorithmus oder biologischem Prozess - genetische Algorithmen und einige basieren auf mathematischen Konzepten, die von Menschen abgeleitet werden - CMA-ES. Diese Algorithmen werden in vielen verschiedenen Bereichen, einschließlich der Finanzierung verwendet. Geben Sie quotPSO financequot oder quotCMA-ES financequot in Google ein und Sie finden viele Informationen. Nicht-erschöpfende (oder quotsmartquot) Methoden finden globales oder lokales Optimum. Das Ziel ist natürlich, globale zu finden, aber wenn es einen einzigen scharfen Peak aus zillions Parameterkombinationen gibt, können nicht-erschöpfende Methoden diesen einzelnen Peak nicht finden, aber es bilden Formulatoren perspektivisch, das Finden eines einzelnen scharfen Peaks ist nutzlos für Handel, weil dieses Ergebnis instabil wäre (zu zerbrechlich) und nicht replizierbar im realen Handel. Im Optimierungsprozess suchen wir nach Plateau-Regionen mit stabilen Parametern und das ist der Bereich, in dem intelligente Methoden leuchten. In Bezug auf den Algorithmus, der von einer nicht erschöpfenden Suche verwendet wird, sieht es wie folgt aus: a) Der Optimierer erzeugt einige (meist zufällige) Startpopulation von Parametersätzen b) Backtest wird von AmiBroker für jeden Parametersatz aus der Population durchgeführt c) die Ergebnisse von Backtests sind Ausgewertet nach der Logik des Algorithmus und neue Population wird auf der Grundlage der Evolution der Ergebnisse generiert, d) wenn neues Bestes gefunden wird - speichern Sie es und gehen Sie zu Schritt b) bis Stop-Kriterien erfüllt sind Beispiel Stop-Kriterien können enthalten: a) Erreichen der angegebenen Maximale Iterationen b) Stoppen, wenn der Bereich der besten objektiven Werte der letzten X-Generationen null ist c) stoppen, wenn das Hinzufügen von 0,1 Standardabweichungsvektor in irgendeiner Hauptachsenrichtung den Wert des objektiven Wertes nicht verändert d) andere Um irgendeine intelligente (nicht - Erschöpfenden) Optimierer in AmiBroker müssen Sie die Optimierer-Engine, die Sie in der AFL-Formel verwenden möchten, mit der OptimizerSetEngine-Funktion angeben. Die Funktion wählt die durch den Namen definierte externe Optimierungsmaschine aus. AmiBroker wird derzeit mit 3 Motoren ausgeliefert: Standard Particle Swarm Optimizer (quotspsoquot), Tribes (quottribquot) und CMA-ES (quotcmaequot) - die Namen in Klammern sollen in OptimizerSetEngine Anrufe verwendet werden. Zusätzlich zur Auswahl der Optimierer-Engine können Sie einige seiner internen Parameter einstellen. Verwenden Sie dazu die OptimizerSetOption-Funktion. OptimizerSetOption (quotnamequot, value) Funktion Die Funktion setzt zusätzliche Parameter für externe Optimierungs-Engine ein. Die Parameter sind motorabhängig. Alle drei mit AmiBroker (SPSO, Trib, CMAE) ausgelieferten Optimierer unterstützen zwei Parameter: quotRunsquot (Anzahl der Läufe) und quotMaxEvalquot (maximale Auswertungen (Tests) pro Einzellauf). Das Verhalten jedes Parameters ist motorabhängig, so dass gleiche Werte und können in der Regel unterschiedliche Ergebnisse mit verschiedenen Motoren verwendet werden. Der Unterschied zwischen Runs und MaxEval ist wie folgt. Auswertung (oder Test) ist ein einzelner Backtest (oder Auswertung des objektiven Funktionswertes). RUN ist ein vollständiger Ablauf des Algorithmus (optimaler Wert) - in der Regel viele Tests (Auswertungen). Jeder läuft einfach den gesamten Optimierungsprozess vom Neubeginn (neue anfängliche zufällige Population). Daher kann jeder Durchlauf dazu führen, dass er verschiedene lokale maxmin findet (wenn er nicht global findet). So Runs Parameter definiert die Anzahl der nachfolgenden Algorithmen läuft. MaxEval ist die maximale Anzahl von Auswertungen (Bactests) in einem Einzellauf. Wenn das Problem relativ einfach ist und 1000 Tests reichen, um globale max zu finden, ist 5x1000 eher ein globales Maximum zu finden, da es weniger Chancen gibt, in lokalem Maximum zu stecken, da nachfolgende Läufe von verschiedenen anfänglichen zufälligen Populationen beginnen werden Sei schwierig Es hängt von dem Problem unter Test, seine Komplexität, etc., etc. Jede stochastische nicht erschöpfende Methode gibt Ihnen keine Garantie für die Suche nach globalen maxmin, unabhängig von der Anzahl der Tests, wenn es kleiner als erschöpfend ist. Die einfachste Antwort ist. Spezifizieren Sie eine so große Anzahl von Tests, wie es für Sie angemessen ist, in Bezug auf die Zeit, die erforderlich ist, um zu vervollständigen. Eine weitere einfache Beratung ist, um die Anzahl der Tests mit dem Hinzufügen neuer Dimension zu multiplizieren. Das kann zu einer Überschätzung der Anzahl der benötigten Tests führen, aber es ist ganz sicher. Die versendeten Motoren sind so konzipiert, dass sie einfach zu bedienen sind, daher werden quasi-fähige Standardautomatische Werte verwendet, so dass die Optimierung in der Regel ohne Angabe von etwas durchgeführt werden kann (Annahme von Vorgaben). Es ist wichtig zu verstehen, dass alle intelligenten Optimierungsmethoden am besten in kontinuierlichen Parameterräumen und relativ reibungslosen Zielfunktionen funktionieren. Wenn der Parameterraum diskrete evolutionäre Algorithmen haben, kann es schwierig sein, einen optimalen Wert zu finden. Es gilt insbesondere für binäre (onoff) Parameter - sie eignen sich nicht für jede Suchmethode, die den Gradienten der objektiven Funktionsänderung verwendet (wie die meisten intelligenten Methoden). Wenn Ihr Trading-System viele Binärparameter enthält, sollten Sie kein Smart Optimizer direkt auf ihnen verwenden. Stattdessen versuchen, nur kontinuierliche Parameter mit Smart-Optimierer zu optimieren und binäre Parameter manuell oder über externes Skript zu wechseln. SPSO - Standard Particle Swarm Optimizer Standard Particle Swarm Optimizer basiert auf SPSO2007 Code, der gute Ergebnisse liefern soll, vorausgesetzt, dass korrekte Parameter (d. h. Runs, MaxEval) für ein bestimmtes Problem bereitgestellt werden. Die Auswahl der richtigen Optionen für den PSO-Optimierer kann schwierig sein, daher können die Ergebnisse von Fall zu Fall erheblich variieren. SPSO. dll kommt mit vollständigen Quellcodes innerhalb von quotADKquot Unterordner. Beispielcode für Standard Particle Swarm Optimizer: (optimalen Wert in 1000 Tests im Suchraum von 10000 Kombinationen finden) OptimizerSetEngine (quotspsoquot) OptimizerSetOption (quotRunsquot, 1) OptimizerSetOption (quotMaxEvalquot, 1000) sl Optimize (quotsquot, 26, 1, 100, 1 (FACS) FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN FREIES VERSCHIFFEN , Parameterlose Version von PSO (Partikel-Schwarm-Optimierung) nicht erschöpfende Optimierung. Für wissenschaftlichen Hintergrund siehe: particlewarm. infoTribes2006Cooren. pdf In der Theorie sollte es besser als normale PSO, denn es kann automatisch die Schwarmgrößen und Algorithmus-Strategie auf das Problem zu lösen. Praxis zeigt, dass seine Leistung ist ganz ähnlich wie PSO. Das Tribes. DLL Plugin implementiert quotTribes-Dquot (d. h. dimensionslose) Variante. Basierend auf clerc. maurice. free. frpsoTribesTRIBES-D. zip von Maurice Clerc. Ursprüngliche Quellcodes, die mit der Erlaubnis des Autors verwendet werden Tribes. DLL kommt mit vollem Quellcode (innerhalb des Zifferncapot-Ordners) Unterstützte Parameter: quotMaxEvalquot - maximale Anzahl von Auswertungen (Backtests) pro Lauf (Standard 1000). Sie sollten die Anzahl der Auswertungen mit zunehmender Anzahl von Dimensionen erhöhen (Anzahl der Optimierungsparams). Die Voreinstellung 1000 ist gut für 2 oder maximal 3 Dimensionen. QuotRunsquot - Anzahl der Läufe (Neustarts). (Voreinstellung 5) Sie können die Anzahl der Läufe auf den Standardwert von 5 verlassen. Standardmäßig ist die Anzahl der Läufe (oder Neustarts) auf 5 gesetzt. Um den Tribes-Optimierer zu verwenden, müssen Sie nur noch eine Zeile zu Ihrem Code hinzufügen: OptimizerSetOption (quotMaxEvalquot , 5000) 5000 Auswertungen max CMA-ES - Kovarianz Matrix Anpassung Evolutionäre Strategie Optimierer CMA-ES (Covarianz Matrix Adaption Evolutionary Strategy) ist fortgeschrittene nicht erschöpfende Optimierer. Für wissenschaftlichen Hintergrund siehe: bionik. tu-berlin. deusernikocmaesintro. html Nach wissenschaftlichen Benchmarks übertrifft neun weitere populäre evolutionäre Strategien (wie PSO, Genetische und Differential Evolution). Bionik. tu-berlin. deusernikocec2005.html Das CMAE. DLL-Plugin implementiert die OptionGlobalquot-Suchvariante mit mehreren Neustarts mit zunehmender Populationsgröße. CMAE. DLL kommt mit vollem Quellcode (im Zitat von ZKK-Ordner) Standardmäßig wird die Anzahl der Läufe (oder Neustarts) gesetzt Bis 5. Es wird empfohlen, die Standardanzahl der Neustarts zu verlassen. Sie können es mit dem OptimizerSetOption (quotRunsquot, N) Aufruf variieren, wobei N im Bereich 1..10 sein sollte. Die Angabe von mehr als 10 Läufen wird nicht empfohlen, wenn auch möglich. Beachten Sie, dass jeder Lauf TWICE die Größe der Population des vorherigen Laufs verwendet, damit er exponentiell wächst. Deshalb mit 10 Läufen am Ende mit der Bevölkerung 210 größer (1024 mal) als der erste Lauf. Es gibt einen anderen Parameter quotMaxEvalquot. Der Standardwert ist ZERO, was bedeutet, dass das Plugin automatisch das erforderliche MaxEval berechnet. Es wird empfohlen, NICHT zu definieren, MaxEval von Ihnen selbst als Standard funktioniert gut. Der Algorithmus ist schlau genug, um die Anzahl der benötigten Auswertungen zu minimieren, und er konvergiert sehr schnell zum Lösungspunkt, so oft findet er Lösungen schneller als andere Strategien. Es ist normal, dass das Plugin einige Auswertungsschritte überspringen wird, wenn es feststellt, dass die Lösung gefunden wurde, deshalb sollten Sie nicht überrascht sein, dass sich der Optimierungsfortschrittsbalken an einigen Punkten sehr schnell bewegen kann. Das Plugin hat auch die Fähigkeit, die Anzahl der Schritte über den ursprünglich geschätzten Wert zu erhöhen, wenn es nötig ist, die Lösung zu finden. Aufgrund seiner anpassungsfähigen Natur ist die zerlegte Zeit leftquot und eine Anzahl von Schritten, die durch den Fortschrittsdialog angezeigt werden, nur zum Zeitpunkt der Zeit und nur während des Optimierungskurses unterschiedlich. Um den CMA-ES-Optimierer zu verwenden, musst du nur noch eine Zeile zu deinem Code hinzufügen: Damit wird die Optimierung mit den Standardeinstellungen ausgeführt, die für die meisten Fälle gut sind. Es ist zu beachten, wie es bei vielen Continuous-Space-Suchalgorithmen der Fall ist, dass der abnehmende Quarterteilparameter in Optimize () funciton-Aufrufe die Optimierungszeiten nicht wesentlich beeinflusst. Das Einzige, worauf es ankommt, ist das Problem, wenn es darum geht, die Anzahl der verschiedenen Parameter (Anzahl der Funktionsanrufe zu optimieren). Die Anzahl der Querstege pro Parameter kann eingestellt werden, ohne die Optimierungszeit zu beeinflussen. Verwenden Sie daher die feinste Auflösung, die gewünscht wird. In der Theorie sollte der Algorithmus in der Lage sein, Lösung in höchstens 900 (N3) (N3) Backtests zu finden, wobei quotNquot die Dimension ist. In der Praxis konvergiert es viel schneller. Zum Beispiel kann die Lösung in 3 (N3) dimensionalen Parameterraum (zB 100100100 1 Million erschöpfende Schritte) in so wenigen wie 500-900 CMA-ES-Schritten gefunden werden. Multi-Threaded Individuelle Optimierung Ab AmiBroker 5.70 zusätzlich zu Multisymbol Multithreading. Sie können eine Multi-Thread-Single-Symbol-Optimierung durchführen. Um auf diese Funktion zuzugreifen, klicken Sie auf den Dropdown-Pfeil neben der Schaltfläche "OKOptimizequot" im Fenster "Neue Analyse" und wählen Sie "Individuelles Optimieren" aus. "InDividual Optimizequot wird alle verfügbaren Prozessorkerne verwenden, um eine Single-Symbol-Optimierung durchzuführen, was es wesentlich schneller macht als die reguläre Optimierung. In quotCurrent symbolquot-Modus wird es eine Optimierung auf einem Symbol durchführen. In quotAll symbolsquot und quotFilterquot Modi verarbeitet es alle Symbole sequentiell, dh erste komplette Optimierung für das erste Symbol, dann Optimierung auf zweites Symbol usw. Einschränkungen: 1. Custom Backtester wird NICHT unterstützt (noch) 2. Smart Optimization Engines werden NICHT unterstützt - Nur EXHAUSTIVE-Optimierung funktioniert. Irgendwann können wir die Beschränkung loswerden (1) - wenn AmiBroker geändert wird, so benutzerdefinierter Backtester verwendet OLE nicht mehr. Aber (2) ist wahrscheinlich hier, um für lange zu bleiben. Trading Systems: Troubleshooting And Optimization 1313 Auch nach erfolgreichem Design und Aufbau eines funktionierenden Handelssystems kann ein Händler feststellen, dass sein System unvollkommen ist. Es kann einige Probleme geben, wie ein Ereignis, das Verluste erzeugt oder vielleicht die Regeln zu breit sind und optimiert werden müssen. Was ist der einfachste Weg, um das Problem zu beheben Wie effektiv ist die Optimierung Dieser Abschnitt zeigt Ihnen, wie Sie Ihr Handelssystem zu beheben und zu optimieren, um Gewinne zu maximieren und Verluste zu minimieren. Troubleshooting Fehlersuche ist ein sehr wichtiger Aspekt der Systementwicklung. Ein anständiges Handelssystem wird in den meisten Marktbedingungen rentabel sein, aber wenn es gelegentlich große Verluste macht, können Sie arbeiten, um das Problem zu identifizieren und zu lösen. Hier sind vier einfache Schritte: 1. Identifizieren Sie das Problem - Finden Sie alle Instanzen, in denen das Problem während Ihres Backtests aufgetreten ist, und starten Sie die Aufnahme, wenn das Problem während des Live-Trades auftritt. Beachten Sie bei jeder Instanz die Tendenzen der folgenden vier Faktoren: Diagrammmuster oder Preisreihen - Spike in den Preisen.13 Volumen - Großes Volumen anfänglich und niedriges Volumen danach.13 BidAsk verbreiten - Spike im Preis auf niedrigem Volumen zeigt oft ein Große Spread.13 Margin (falls verwendet). 13 13Diese sind einige der Bereiche, in denen Probleme auftreten können, die wir sehen können, indem wir die untenstehende Tabelle analysieren. Beachten Sie die Preisspitzen auf niedriger Lautstärke durch den grünen Pfeil. Beachten Sie auch die große Lautstärke (in der Nähe des blauen Pfeils), gefolgt von geringer Lautstärke danach. Wenn keiner von diesen herausfindet, um der Täter zu sein, gibt es andere Faktoren, die analysiert werden können, wie Blockgrößen und fortgeschrittene Diagrammmuster. Bewerten Sie das Problem - Verwenden Sie die Informationen, die Sie gesammelt haben, um festzustellen, was genau das System zu Fehlfunktionen oder einen Verlust zu generieren. Dies geschieht oft durch den gesunden Menschenverstand oder durch die Analyse von Transaktionslogs (die von Ihrem Broker bereitgestellt werden). Hier sind Beispiele dafür, wie einige Bedingungen der vier oben aufgeführten Faktoren der Grund für ein identifiziertes Problem darstellen können: Diagrammmuster oder Preisreihen - Das System kann bei starken Abfällen nicht verkaufen oder bei steilen Aufstiegen kaufen. Vielleicht hat das System nicht genügend Zeit zu kaufen oder zu verkaufen. Volumen - Das System ist nicht in der Lage, während der Rückgänge zu verkaufen oder während der Erhöhung zu kaufen. Vielleicht hat das Eigenkapital ein so niedriges Handelsvolumen, dass das System nicht in der Lage ist, zu einem Preis zu kaufen oder zu verkaufen. Während dieser Fälle kann der Preis irreführend sein, ohne eine Berücksichtigung von Volumen und Bidask. BidAsk verbreiten - Das System macht einen Kauf, aber nicht so viel wie es beim Verkauf zu profitieren. Dies könnte auf die Tatsache zurückzuführen sein, dass der Händler vergessen hat, die Bidask-Spreads zu betrachten. Wenn ein System programmiert ist, um zu dem aktuellen Preis zu kaufen und zu verkaufen, zahlt es tatsächlich die Frage. Und wenn verkauft, verkauft es nicht zum aktuellen Preis, sondern zum Gebotspreis. Manchmal können die Unterschiede zwischen dem Angebot und der Frage groß sein, was zu unerwünschten Verlusten führt. Margin - Das System verkauft plötzlich ohne ersichtlichen Grund. Wenn dies geschieht, können Sie vergessen haben, Randanrufe zu berücksichtigen. 13 3. Betrachten Sie die Alternativen - versuchen Sie einfach einige Lösungen für die Probleme, die Sie identifiziert haben. Betrachten Sie die folgenden Alternativen, die den obigen Problemen entsprechen. Chart-Muster oder Preis-Serie - Eine Alternative ist einfach zu sagen, das System zu warten, bis der Preis stabilisiert vor dem Kauf. Dies kann getan werden, indem Sie die Unterschiede zwischen den vorherigen Preisen und dem aktuellen Preis, um eine Regel zu erstellen. Volume - Um dieses Problem zu lösen, können Sie eine Regel, die das Eigenkapital erfordert eine bestimmte Menge an Volumen vor der Ausführung eines trade. BidAsk erfordert Verbreitung - Hier möchten Sie vielleicht kaufen und verkaufen auf der Grundlage der Geld-und Brief-Preise anstelle der aktuellen Preis. Margin - Verwendung Margin kann profitabel sein, wenn das Risiko effektiv verwaltet wird. Die Begrenzung nach unten sollte Sie davon abhalten, Randanrufe zu erhalten. Dies kann mit nachlaufenden Stop-Loss-Punkten oder anderen ähnlichen Taktiken getan werden, um den Nachteil zu begrenzen. 13 4. Umsetzung einer Lösung - Schließlich müssen wir die Lösung anwenden und sehen, wie es funktioniert. Paper Trading oder Back-Tests wieder vor Live-Trading ist oft eine gute Idee nach der Anwendung einer Lösung, weil manchmal Lösungen haben unbeabsichtigte Konsequenzen. Zum Beispiel können zusätzliche Regeln diese Tage beschränken, aber auch die Gesamtgewinne verringern (aufgrund verpassten Chancen).Optimierung Optimierung bedeutet einfach, die besten Sätze von Parametern für einen bestimmten Markt zu finden. Dieser Prozess kann die Ergebnisse geringfügig verbessern. Allerdings trägt es auch viele Risiken, weil seine zugrunde liegende Annahme ist, dass die vergangene Wertentwicklung für zukünftige Kursbewegungen indikativ ist. Die Optimierung kann durch Ändern der Werte des Parameters erfolgen, den Sie optimieren möchten, und dann diese Tests erneut testen. Beachten Sie, dass die anderen Parameter für die Auswirkungen der zu bestimmenden Änderungen konstant bleiben müssen. Sobald Sie den Wert gefunden haben, der die höchste Leistung im Back-Test liefert, implementieren Sie ihn in das Handelssystem. Lasst uns ein Beispiel ansehen. Say a trader analyzed the SampP 500 and found that he or she could optimize the system by using a daily chart. This same process can also be taken to a higher degree. For example, if a simple moving average of 6 works better than 8 for an MA-crossover strategy in a given market, then 6 would be used. The problem here is not only in the assumption, but also in the fact that the system may perform worse in many other markets, thereby making it less universal. Many system developers forgo the optimization stage for these two reasons: Optimization often overstates results. This is because the parameters are so specific and non-universal that any change in the market (that is, the future) can cause instability. In many cases, optimization will not improve performance by a meaningful degree. Slight improvements may be apparent however, the forfeiture of universality is a high price to pay. 13 As a general rule, optimization should only define broad settings for parameters rather than set up specific rules - even if it was successful in backtesting and paper trading. Conclusion Troubleshooting is crucial to making your system work the way you want it to. It is important to identify any problems by observing the instances in which they occurred and then evaluating how certain conditions of several factors - such as price pattern, volume, bidask spread, and margin - may have caused the problem. Optimization can improve your results, but it is important to remember that it has its limitations. Not only is it based on the assumption that past performance indicates the future, but it is not the stage at which the trader creates specific rules - optimization is only about defining broad settings. In the next and final installment, we will provide an overview of everything weve covered along with some advice and resources to help you gain a working knowledge of trading system design and development. Trading Systems: Conclusion

Comments