Tuesday 21 November 2017

Ema Trading System Afl


Wie man das Handelssystem optimiert 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.10.2a Wahl der bewegten durchschnittlichen Crossovers Entdecken Sie die neu hinzugefügten niedrigeren bewegten durchschnittlichen Formeln in Abschnitt 10.5. Hier sind die gemeinsamen durchschnittlichen Perioden für gleitende Durchschnitt - MA Crossover Indikatoren: 10 Perioden - am häufigsten für Trend nach Indikatoren verwendet. Wenn der Preis über den 10 EMA liegt, wird der Trend nach oben und unten betrachtet, falls darunter. 15 Perioden - Eine gute langsame Kreuzung über MA oder EMA für den Einsatz mit der 10 Periode EMA für einen Trend nach dem Handelssystem. 21 Perioden - Alternativ zu den 15 Perioden MA oder EMA und zeigt den Status des mittelfristigen Trends an. 50 Perioden - Mittelfristiger Trendindikator. Kombiniert mit einem niedrigen Rückstand gleitenden Durchschnitt bietet eine gute Option für ein Handelssystem. 200 Perioden - Wird von Langzeithändlern verwendet, um investiert zu bleiben oder zu beenden, ob der Preis über oder unter diesem Durchschnitt liegt. Intraday und kurzfristige Händler können mehrere dieser durchschnittlichen kombinieren, um Handelssysteme zu bauen, die gute akzeptable Ergebnisse in Trends geben. Verwenden Sie EMAs für die Signalgenerierung und MAs als Grundlinie langsamen Durchschnitt. 10.3 Eröffnungsbereich Breakout Trading (ORB) Im Gegensatz zum gleitenden durchschnittlichen Handel, der im Laufe des Handelszeitraums mit dem Kurs verbunden ist, nutzt die Opening Range Trading-Methode die Frühzeit des Tages, um die Handelsspanne zu bestimmen. Ursprünglich, als Intraday-Handelssystem gedacht, gibt es keinen Grund, warum dies nicht für Positions - und längerfristigen Handel mit entsprechend angepassten Regeln verwendet werden kann. Wichtig ist es, seine wichtigen Merkmale zu beachten: In der Intraday-Version des Opening Range Trading werden wir den High - oder Tiefstkurs des Tages für die ersten 5 oder 10 oder 15 oder 20 oder 30 Minuten oder 1 Stunde beachten und entweder die Hoch und Tiefs, wie die Aufwärts - und Abwärtsbrechungsstufen. Die Zeit, die Sie wählen, ist eine, die Sie durch Experimente ankommen können. Du wirst gute Ergebnisse erzielen, auch wenn du nur 5,10 oder 15 Minuten benutzt hast. Das Konzept dahinter ist, dass der Marktöffnungsbereich die bullish und bearish Ebenen für den Handel bestimmt. Über dem hohen Niveau ist der Markt bullisch und unter dem niedrigen Niveau, seine bearish. In gewissem Sinne ist dies ein Markt für die Handelszeit. Für den Einsatz im Positionshandel könnten Sie eine Reichweite nutzen, die bis zu 1-2 Stunden auf Stundenplänen und sogar einen Tag für den langfristigen Positionshandel für die Berechnung der Reichweite erreichen könnte. Lange Trades werden über dem hohen Niveau initiiert, während kurze Trades unterhalb des niedrigen Niveaus dieser Periode eingeleitet werden. Sehen Sie die Tabelle unten, wo wir konnten einen Trend gut gemacht 122 Punkte in 3 Trades zu fangen. Und sehen, was es in Reichweite gebundene Tage tut: 10.4 Spezielle ORB - Mit einer einzigen Ebene In der ORB-Methode, die in 8.3 oben beschrieben ist, können Sie denken, dass Sie einen Teil des Handelsgewinns auf der Grundlage der Volatilität verlieren, die Ihren Eröffnungsbereich-Breakout-Level bestimmt. Nun, es gibt eine einfache Antwort darauf. Wechseln Sie zu einer einzigen Ebene, die eine der folgenden sein kann: Wenn Sie einfach den Durchschnitt der hohen und niedrigen des ausgewählten Zeitraums nehmen, können Sie mit einer einzigen Ebene arbeiten, wo die lange über dem durchschnittlichen Niveau liegt und kurz unter dem durchschnittlichen Niveau liegt . Dies ist wie ein Marktdurchschnitt für Handelszwecke. Einstufiger ORB 1 (HighLow) 2 der ersten n Minuten. N5,10,15,20,30 Minuten oder 1 Stunde basierend auf Ihrer Wahl oder kontinuierlich den ganzen Tag. Lesen Sie dies mit den anderen Kommentaren, die dort gegeben wurden, um das Konzept für den Positionshandel zu erweitern, wo Ihr Durchschnitt von Hoch und Tief für 1-2 Stunden oder sogar einen Tag und vielleicht eine Woche im Falle längerer Zeiträume sein könnte. Sei vorbereitet, um Whipsaws um die ORB-Ebene zu reiten, wenn der Markt keine Richtung hat. Sehen Sie die Charts unten: Und sehen Sie die Whipsaws, die auftreten können. Diese können durch verschiedene Rauschunterdrückungstechniken vermieden werden, die wir später besprechen werden. Sollten Sie irgendwelche Vorschläge oder Beiträge haben, schreiben Sie mir bitte bei abnash1978yahoo. co. uk oder posten Sie Kommentare im Forum 10.5 Mehr Responsive gleitenden Durchschnitt und Rauschentfernung Die traditionellen einfachen und exponentiellen gleitenden Durchschnitte liefern Handelssignale, die nicht so reaktionsfähig sind wie Händler Möchte, was zu einem erheblichen Teil des Handels immer über, wenn mit diesen Durchschnitt. Natürlich, wenn es einen langen Trend im Gange ist, werden alle gleitenden durchschnittlichen Handelssysteme gut funktionieren. Es gibt eine Menge von Informationen über niedrigere Lag gleitenden Durchschnitt, und die, die leicht verfügbar ist in der Öffentlichkeit ist der Hull gleitenden Durchschnitt. Ich habe auch über Jurik gelesen, aber ich bin mir nicht sicher, ob die richtigen Formeln zur Verfügung stehen. Veröffentlicht unten ist eine AFL, die eine niedrige Verzögerung gleitenden Durchschnitt bietet, die mit einem Standard 50 Periode gleitenden Durchschnitt kombiniert wurde, um zu zeigen, wie es Kauf - und Verkaufssignale erzeugen kann. Und unterhalb der ist eine andere AFL, die Ihnen erlaubt, verschiedene Arten von gleitenden Durchschnitten zu zeichnen, die Teil Ihres Trading-Arsenals werden könnten. Beide sind aus öffentlichen Quellen im Internet. Sie können ganz einfach ein Trading-System durch entweder verwenden, wie unten gezeigt mit einem 50MA Kreuz über oder zwei andere Perioden sagen, 10 und 15 Perioden. AR TRADING SYSTEM AFL FREE Ich mache dieses AFL AR TRADING SYSTEM AFL FREE Ich mache diese AFL KOSTENLOS FREEFREE FREEFREE FREI GRATIS FREI FREI GRATIS FREI FREI GRATIS FREI FREI KOSTENLOS GRATIS FREI GRATIS FREI FREI KOSTENLOS GRATIS FREI KOSTENLOS GRATIS FREI KOSTENLOS GRATIS FREI KOSTENLOS GRATIS FREI KOSTENLOS GRATIS FREI KOSTENLOS GRATIS FREI KOSTENLOS GRATIS GRATIS FREI GRATIS FREI FREI (C, nol)) 100 Graph0sk Graph0BarColorIIf (skgt0,5,4) SECTIONBEGIN (quotemaquot) Lk EMA (Schließen, 22) Plot (lk, quot quot, colorBrightGreen, styleDots) GfxSelectFont (quottohomaboldquot, Status (quotpxheightquot) 16) GfxSetTextAlign ( 6) GfxSetTextColor (ColorRGB (10.250.250)) GfxSetBkMode (0) GfxTextOut (Name (), Status (quotpxwidthquot) 2, Status (quotpxheightquot) 10) cxParam (quotcxposnquot, 1085,0,1200,1) cyParam (quotcyposnquot, 16,0 , 1000,1) GfxSetBkColor (ColorRGB (200,50,100)) GfxSelectFont (quottohomaboldquot, 20,98, False) GfxSetTextColor (colorYellow) GfxSetTextColor (ColorHSB (100, 10, 400)) GfxTextOut (quotLTP. "DDayO TimeFrameGetPrice" (z. B. Quatze, inDaily) DHoDay TimeFrameGetPrice (quotHquot, inDaily) DLoDay TimeFrameGetPrice (quotLquot, inDaily) gfr TimeFrameGetPrice (quotCquot, inDaily, -1) schließen Titel EncodeColor (colorWhite) AR TRADING SYSTEM quotEncodeColor ( ColorRGB (220,10,150)) quot Interval (2) quot Datum () EncodeColor (ColorRGB (200,150,120)). H quot, Niedrig. L EncodeColor (colorGreen) "Prevvious Day Close". EncodeColor (colorGreen) gfr EncodeColor (colorYellow) Zitat ToDay Open. DDayO-Wert. DHiDay-Niedrig. DLoDay SECTIONEND () Colcci IIf (CCI (8) gt 5, colorBrightGreen, IIf (CCI (8) lt-5, colorRed, IIf (CCI (8) gt Ref (CCI (8), - 1), colorBrightGreen, colorDarkRed )) HaClos EMA ((OHLLC) 5,3) HaOpen AMA (Ref (HaClose, -1), 0,5) HaHigh Max (H, Max (HaClose, HaOpen)) HaLow Min (L, Min (HaClose, HaOpen) PlotOHLC (HaOpen, HaHigh, HaLow, HaClose, quotquot, Colcci, styleCandle styleNoLabel) BKswitch ParamToggle (quotBackground Colorquot, quotOn, Offquot) OUTcolor ParamColor (quotOuter Panel Colorquot, colorBlack) INUPcolor ParamColor (im Inneren Panel Upperquot, colorGrey40) INDNcolor ParamColor (quotInner Panel Niedrigquot, FarbeBlack) TitelColor ParamColor (quotTitle Color quot, colorBlack) if (NOT BKswitch) SetChartBkColor (OUTcolor) Farbe des äußeren Randes SetChartBkGradientFill (INUPcolor, INDNcolor, TitleCo lor) Farbe des Innenpaneels SECTIONEND () SECTIONBEGIN (quotquot) SetBarsRequired (100000, 0) GraphXSpace 15 ea EMA (C, 10) eb EMA (C, 20) SetBarFillColor (IIf (ea gt eb, colorGreen, colorRed)) Kaufen Sie ea gt eb AND TimeNum () gt 092000 AND TimeNum () lt 150000 Verkaufen eb gt Ea OR TimeNum () gt 150000 Short 0 Cover 0 Kaufen ExRem (Kaufen, Verkaufen) Verkaufen ExRem (Verkaufen, Kaufen) Short ExRem (Short, Cover) Cover ExRem (Cover, Short) FactorParam (quotFactorquot, 4,1,10,1 ) PtParam (FT) 2 (FactorATR (Pd)) Dn (HL) 2- (FactorATR (Pd)) IATRATR (Pd) TrendUpTrendDownNull trend01 changeOfTrend0 flagflagh0 für (i 1 i ltBarCount i ) TrendUpi Null TrendDowni Null if (CloseigtUpi-1) trendi1 if (trendi-1 -1) changeOfTrend 1 sonst if (CloseiltDni-1) trendi-1 if (trendi-1 1) changeOfTrend 1 sonst if (trendi-11) trendi1 changeOfTrend 0 else if (trendi-1-1) trendi-1 changeOfTrend 0 Buy trend1 Selltrend-1 BuyExRem (Kaufen, Verkaufen) SellExRem (Verkaufen, Kaufen) ShortSell CoverBuy BuyPriceValueWhen (Buy, C) SellPriceValueWhen (Sell, C) ShortPriceValueWhen (Short, C) CoverPriceValueWhen (Cover, C) PlotShapes (IIf (Buy, shapeSquare, shapeNone), colorGreen, 0, L, Offset-40) PlotShapes (IIf (Buy, shapeSquare, shapeNone), colorLime, 0, L, Offset-50) PlotShapes (IIf (Short, shapeSquare, shapeNone), colorRed, 0, H, Offset40) PlotShapes (IIf (Short, shapeSquare, shapeNone), ColorWhite, 0, L, Offset-45) , ColorOrange, 0, H, Offset50) PlotShapes (IIf (Short, shapeDownArrow, shapeNone), colorWhite, 0, H, Offset-45) für (iBarCount-1igt1i--) if (Buyi 1) Eintrag Ci sig quotBUYquot sl TrendSLi tar1 Eintrag (Eintrag .0050) tar2 Eintrag (Eintrag .0092) tar3 Eintrag (Eintrag .0179) Stäbe ii 0 if (Selli 1) sig quotSELLquot Eintrag Ci sl TrendSLi tar1 Eintrag - (Eintrag .0050) tar2 Eintrag - (Eintrag .0112) Tar3 Eintrag - (Eintrag .0212) Stäbe ii 0 Offset 20 Clr IIf (sig quotBUYquot, colorLime, colorRed) ssl IIf (Stäbe BarCount-1, TrendSLBarCount-1, Ref (TrendSL, -1)) sl sslBarCount-1 Plot (LineArray (Balken-Offset, tar1, BarCount, tar1,1), quotquot, Clr, styleLinestyleDots, Null, Null, Offset) Plot (LineArray (Balken-Offset, tar2, BarCount, tar2,1), quotquot, Clr, styleLinestyleDots, Null , Null, Offset) Plot (LineArray (Balken-Offset, tar3, BarCount, tar3,1), quotquot, Clr, styleLinestyleDots, Null, Null, Offset) Plot (LineArray (Balken-Offset, sl, BarCount, sl, 1) (Bar-Offset, Eintrag, BarCount, Eintrag, 1), Quittung, colorGreen, styleLinestyleLine, Null, Null, Offset) für (ibars i ltBarCounti) PlotText ( (ZitatT1quottar1, BarCount3, tar1, Null, Clr) PlotText (quotT3quottar3, BarCount3, tar3, Null, Clr) PlotText (quotT3quottar3, BarCount3, tar3, Null, Clr) "GfxSetTextColor (colorWhite) Wenn (sig quotBUYquot) GfxSelectSolidBrush (colorGreen) Dies ist die Box Hintergrundfarbe sonst GfxSelectSolidBrush (colorRed) Dies ist Die Box Hintergrundfarbe pxHeight Status (quotpxchartheightquot) xx Status (quotpxchartwidthquot) Links 1100 Breite 310 x 5 x2 290 GfxSelectPen (colorWhite, 4) breiter Farbe GfxRoundRect (x, y - 165, x2, y. 160, 90) GfxTextOut ((ARCADING SYSTEM quot), 141, y-160) GfxTextOut ((quot), 130, y-160) GfxTextOut ((& ldquor; Letztes Signal "(BarCount-Bars-1) Intervall () 60 Ziffern), 148, y-140) Der Textformatort GfxTextOut ((quadratische Schreibgut (sig quotBUYquot, sig quot quot, sig quot quot) Eintrag), 130, y-120) GfxTextOut ( (& Ldquor; & ldquor; & ldquor; & ldquor; & ldquor; & ldquor; & ldquor; & ldquor; & lgr; GfxTextOut ((TGT: 2, tar2), 130, y-60) GfxTextOut ((TTT3), 130, y-40) GfxTextOut ( Sig quotBUYquot, (C-Eintrag), (Eintrag-C)), 2.2)), 130, y-22) Kaufen ExRem (Kaufen, Verkaufen) Verkaufen ExRem (Verkaufen, Kaufen) Form Kaufen shapeUpArrow Verkaufen shapeDownArrow PlotShapes (IIf (Buy (Abb. 1, L, Offset-50) PlotShapes (IIf (Buy, shapeUpArrow, shapeNone), colorWhite, 0, L, Offset-45) PlotShapes (IIf (Sell, shapeSquare, shapeNone), colorRed, 0, H, Offset40) PlotShapes (IIf (Sell, shapeSquare, shapeNone), colorOrange, 0, H, Offset50) PlotShapes (IIf ( Verkauf, shapeDownArrow, shapeNone), colorWhite, 0, H, Offset-45) PlotShapes (Form, IIf (Buy, colorGreen, colorRed), 0, IIf (Buy, Low, High)) dist 2.5ATR (5) für (i 0 (1) Wenn du (Selli) PlotText (quotellnquot Closei, i, Lowi disti, colorWhite) SECTIONBEGIN (quotemaquot) P ParamField (quotFieldquot) Geben Sie ParamList ein. Deutsch: www. tab. fzk. de/de/projekt/zusammenf...ng/ab117.htm. Englisch: www. tab. fzk. de/en/projekt/zusammenf...ng/ab117.htm (QuotTypequot, quotWeighted, Simple, Exponential, Double Exponential, Tripple Exponential, Wildersquot) Periods89 Param (quotPeriods180quot, 180, 2, 300) Displacement2 Param (quotDisplacement2quot, 2, -50, 50) Plot (EMA (P, Periods89), DEFAULTNAME (), (1), (1), (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) , 20) SECTIONEND () für (i 0 i lt BarCount i) if (bvei) PlotText (quotAnquot. I, L i - disti, colorWhite, colorDarkBlue) if (rfwi) PlotText (quotAnquot. I, H i disti, colorWhite, colorRed) SECTIONBEGIN (quotdayquot) TimeFrameSet (inDaily) schaltet jetzt zu tagtäglich TimeFrameRestore () Wiederherstellungszeitrahmen zum ursprünglichen Plot (Z. BoAxxntwort, 476,0,1200,1) cy Param (quotcyposnquot, 500,0,1000,10) GfxSelectFont (Arial quot, 14, 98) , Falsch) GfxSetTextColor (ColorRGB (10,250,250)) GfxTextOut (z. Beispiel) Quellquartett, cx 20, cy 50) SECTIONBEGIN (quottomquot) Funktion GetSecondNum () Zeit jetzt (4) Sekunden int (Zeit 100) Minuten int (Zeit 100 100) Stunden-Zeit (Zeit-10000 100) SecondNum int (Stunden 60 60 Minuten 60 Sekunden) return SecondNum RequestTimedRefresh (1) TimeFrame Interval () SecNumber GetSecondNum () Newperiod SecNumber TimeFrame 0 SecsLeft SecNumber - int (SecNumber TimeFrame) TimeFrame SecsToGo TimeFrame - SecsLeft xParam ( (X615, y530, x738, y499, 0,0) GfxSelectSolidBrush (ColorRGB (230, 230, 230)) GfxSelectPen (ColorRGB (1) GfxSetBkMode (1) GfxSelectFont (quotArialquot, 13, 800, False) GfxSetTextColor (ColorRGB (220,10,150) GfxSetTextColor (ColorRGB (220,10,150) )) GfxTextOut (quotTimeleftquotquot. GfxTextColor (ColorRGB (10.250.250)) GfxTextOut ((For-By-Byte), 1150, y-45) GfxSetTextColor (ColorRGB (10.250.250)) GfxTextOut ((Quell-Trading SYSTEM quot), 1150 , Y-25) SECTIONBEGIN (quotRibbonquot) uptrendPDI () gtMDI () UND Signal () ltMACD () downtrendMDI () gtPDI () UND Signal () gtMACD () Plot (1, eimiert die Höhe des Bandes in Prozent der Scheibenbreite (Abkürzung, colorLed, IIf (Abwärtstrend, colorRed, IIf (Signal () ltMACD (), colorLightGrey, colorLightGrey))) Wähle Farbe styleOwnScalestyleAreastyleNoLabel, -.05,50) SECTIONEND () Zuletzt bearbeitet von skumar4545 3. Januar 2014 Um 11:22 Uhr. Grund: add img

No comments:

Post a Comment