![Ein Non-Trading EA Indikatoren Test](https://c.mql5.com/i/articles/overlay.png)
Ein Non-Trading EA Indikatoren Test
Einführung
Alle Indikatoren können in zwei Gruppen unterteilt werden: statische Indikatoren, deren Anzeige, einmal angezeigt, immer die gleiche in der Historie bleibt und sich nicht mit neu hereinkommenden Kursen ändert, und dynamische Indikatoren, die ihren Zustand nur für den aktuellen Augenblick anzeigen und vollständig neu gezeichnet werden, wenn ein neuer Kurs kommt. Die Effizienz eines statischen Indikators ist direkt auf den Chart sichtbar. Aber wie können wir prüfen, ob ein dynamischer Indikator richtig arbeitet? Dieser Frage ist der Artikel gewidmet.
Die überwältigende Mehrheit der in der technischen Analyse verwendeten Indikatoren ist statisch. Nehmen wir den MACD als Beispiel. Das Eintreffen eines neuen Kurses wird bestenfalls nur die Anzeige der letzten Periode betreffen oder, um genauer zu sein, ihre Endphase. Sein Diagramm bleibt jedoch "unumstößlich" in der Vergangenheit. Um zu prüfen, ob ein statischer Indikator korrekt arbeitet oder nicht, wäre es ausreichend einfach seine Anzeigen auf historische Daten zu untersuchen. Sind mehrere Indikatoren verfügbar und Sie möchten den optimalsten für Ihr Trading auswählen - das ist auch kein Problem: Hängen Sie einfach alle Indikatoren an das Chart an und wählen Sie dann den von ihnen aus, der die "korrekteren" Angaben erzeugt.
Im Fall von dynamischen Indikatoren wird die Situation komplizierter und sogar fast "unmöglich". Nahezu alle Kanal-Indikatoren können als Beispiel solcher Indikatoren verwendet werden. In der Regel zeichnen solche Indikatoren eine oder mehr Linien, die den Bereich der Kursbewegung anzeigen. Die Linien werden für den aktuellen Moment aufgebaut, natürlich. Somit kann die Ankunft neuer Kurse, die deutlich von den jüngsten abweichen, die Anordnung der Linien im Chart innerhalb von Sekunden in eine absolut andere ändern. Es ist einfach unmöglich, einzuschätzen wie korrekt der Indikator für alle möglichen Kursanordnungen arbeitet, nur durch das Bewerten des letzten Punkts des aktuellen Kurses. Sie können erkennen, dass Ihr Indikator über mehrere Stunden richtig arbeitet und seine Arbeit als in Ordnung betrachten. Allerdings kann, genau in dem Moment in dem Sie entscheiden das Trading zu beginnen, eine solche Marktsituation auftreten, in der er inkorrekt arbeitet (ein Beispiel von durch Indikatoren falsch gebildeten Barishpolets Moving Channels ist im Folgenden angegeben), und Sie können Ihren Trade in eine ungünstige Richtung öffnen. Der Indikator wird seine Anzeige nach ein paar Balken "korrigieren", aber das ist für Sie zu spät sein, da Ihre Position verlieren wird!
Testen von Indikatoren in Tester
Der primäre Zweck von Strategietestern ist Expert Advisors zu testen. Da einige EAs Indikatoren in ihrem Betrieb verwenden, sollten Tester in der Lage sein diese zu testen. Wir werden diese Funktion nutzen!
Ein Expert Advisor kann in zwei Modi getestet werden. Im Standard-Modus verarbeitet der Tester alle Befehle des EAs in seiner Verarbeitung der Historie, und stoppt um endgültige Ergebnisse zu liefern, sobald keine historischen Daten des Währungspaares für den Test mehr vorhanden sind. In dem visuellen Modus zeichnen Tester, außer dem obigen, zusätzlich jeden Balken/Tick des Charts, den arbeitenden Markt im Echtzeit-Modus emulierend. Im Tester können Sie die Zeit beschleunigen, verlangsamen oder sogar anhalten, was eine große Hilfe für uns ist, wenn wir Indikatoren testen.
Nicht-Handelnder Screenshots machender Expert Advisor
Bevor wir jedoch das Testen von Indikatoren beginnen, müssen wir einen eher ungewöhnlichen EA vorbereiten. Für unsere Zwecke, sollte dieser EA nicht handeln. Sein Betrieb sollte uns nicht von dem Testen von Indikatoren abhalten und, was noch wichtiger ist, die vorläufig verlorene Einlage durch Handelsfehler sollte unseren Indikatortest nicht anhalten. Also erstellen wir einen EA der der einfach nichts macht.
Seine einzige Funktion wird es sein, Screenshots des aktuellen Zustands des Trading zu machen. Sie werden sehr hilfreich sein, wenn wir anfangen die Operationen der Indikatoren zu analysieren. Unten befindet sich der Code des EA:
//+-----------------------------------------------------------------------------+ //| IndicatorTester.mq4 | //| Copyright © 2006-2008, Sergey Kravchuk | //| http://forextools.com.ua | //+-----------------------------------------------------------------------------+ #property copyright "Copyright © 2006-2008, Sergey Kravchuk. http://forextools.com.ua" #property link "http://forextools.com.ua" //+-----------------------------------------------------------------------------+ extern datetime ScreenShotStart=0; // date and time of the first screenshotting extern int ScreenShotMax=100; // how many screenshots should be made extern int ScreenShotStep=0; // screenshotting step: <=0-not applicable, N-on each Nth bar extern string FilesPrefix="_"; // prefix for screenshot filenames //+-----------------------------------------------------------------------------+ datetime NextScreenShot=0; // date and time for making the next screenshot double ScreenShotCnt=0; // prepare a screenshot counter double ScreenShotCur=0.001; // number of the initial screenshot string FileName; // filename to save the next screenshot //+-----------------------------------------------------------------------------+ //| expert start function | //+-----------------------------------------------------------------------------+ int start() { if(ScreenShotStep>0 // is it necessary to make screenshots? && ScreenShotStart<=Time[0] // is it time for screenshotting? && NextScreenShot<=Time[0] // is it time to make the next screenshot? && ScreenShotCur*1000<=ScreenShotMax+1) // have all screenshots not been made? { // compose the filename and save the screenshot under it FileName=FilesPrefix+StringSubstr(DoubleToStr(ScreenShotCur,3),2)+".gif"; WindowScreenShot(FileName,800,600); // give a prompt Comment("Saved file "+FileName+ "\nThere are "+DoubleToStr((ScreenShotMax-ScreenShotCur*1000),0) +" pcs. left"); // shift the data and the counter to the next screenshot ScreenShotCur+=0.001; NextScreenShot=Time[0]+ScreenShotStep*Period()*60; } if(ScreenShotCur*1000>ScreenShotMax+1) Comment("All screenshots are saved"); return(0); } //+-----------------------------------------------------------------------------+
Der Screenshot Algorithmus ist ziemlich einfach: Wir warten, bis der Zeitpunkt kommt, von dem wir anfangen wollen eine Reihe von Screenshots zu machen (ScreenShotStart) und machen dann bis zu ScreenShotMax Screenshots bei jedem ScreenShotStep Balken. Jeder Screenshot wir in einer Datei gespeichert, deren Name mit dem voreingestellten Präfix beginnt, FilesPrefix, mit der dem Namen hinzugefügten Nummer des Screenshots.
Zum Bilden einer Zahl mit führender Null (dies ist notwendig für die richtige Sortierung von Screenshots, damit _1.gif nicht sofort von _10.gif gefolgt wird, anstatt _2.gif ), verwenden wir ein etwas ungewöhnliches Nummerierungsverfahren. Die Nummerierung beginnt mit ScreenShotCur=0.001; und folgt dann in Schritten von 0.001 (ScreenShotCur+=0.001;). Die Nummer selbst ergibt sich aus der Änderung einer Dezimalzahl in einen Zeichen-String, aus dem ein Teilstring als Nummer gewählt wird, beginnend mit dem dritten Zeichen. Somit scheiden wir die vorne stehende "0." ab und erhalten führende Nullen vor den Nummer-Ziffern. Dieses Verfahren ermöglicht uns bis zu eintausend Screenshots zu sammeln, was mehr als ausreichend für unsere Analyse ist. Wenn das jedoch nicht ausreichend für Sie ist, erhöhen Sie die "Körnigkeit" der anfänglichen Nummer um den Schritt bis zu 0.0001. Dann sind Sie in der Lage bis zu 10.000 Screenshots zu sammeln.
Einstieg in den Test
Jetzt, wenn wir alles fertig haben und der EA ohne Fehler kompiliert wurde, beginnen wir mit dem Testen. Starten Sie den Tester über das Menü Ansicht/Strategietester oder die Tastenkombination Strg+R. In dem Feld "Expertenprogramm" wählen Sie unseren EA, IndicatorTester. Dann wählen Sie ein Symbol und eine Periode zum Testen. Wenn notwendig, können Sie den Testbereich auswählen durch Anklicken von "Zeitraum" und dan mit "Von" und "Bis" die Daten bestimmen. Um den visuellen Modus zu aktivieren, setzen wir das Häkchen in das Feld "Visueller Modus". Jetzt können wir die "Expert Advisor Optionen" Schaltfläche drücken und alle notwendigen Eingaben für das Anfertigen von Screenshots festlegen.
Nun, fast alles ist fertig. Drücken Sie die "Start" Schaltfläche und sofort danach die "||" Schaltfläche, die sich rechts von dem Schieberegler zur Einstellung der Visualisierungsgeschwindigkeit befindet. Der EA wird seinen Test anhalten. Jetzt können Sie den zu testenden Indikator an das Chart anhängen und, nach dem Freigeben der "||" Schaltfläche, mit dem Test des EA fortfahren. Wir erinnern uns, der EA wird keinerlei Trades machen. Der Tester aber weiß darüber nichts, und verarbeitet die Kurse gewissenhaft, Tick für Tick, Balken für Balken. Da nur ein oder ein paar Indikatoren an das Chart angehangen sin, muss der Tester diese neuberechnen und neu zeichnen, da ein normaler EA sicher die von den Indikatoren erhaltenen Daten verwenden würde.
Das ist alles. Jetzt, wie einige Programmierer in ihren Pop-up Boxen schreiben, "lehnen Sie sich zurück und schauen Sie zu" wie der Indikator arbeitet. Sie können den Test zu jeder Zeit unterbrechen (durch Drücken der "||" Schaltfläche), oder Siekönnen seine Geschwindigkeit beschleunigen oder verlangsamen. Sobald der Tester die von Ihnen als ScreenShotStart voreingestellte Datum/Zeit erreicht, wird er anfangen mit der voreingestellten Häufigkeit Screenshots zu machen und die fertigen Screenshots in das Verzeichnis c:\Program Files\MetaTrader 4\tester\files speichern. Wenn Sie keine Screenshots benötigen, und nur sehen wollen wie der Indikator funktioniert, setzen Sie den EA Parameter ScreenShotStep auf gleich oder weniger als Null, bevor Sie die "Start" Schaltfläche drücken. Dann wird die Anfertigung von Screenshots deaktiviert.
Anwendungsbeispiel
Ich führte diese Aufgabe zunächst für mich selbst aus, als ich den "korrektesten" Barishpolets Moving Channels Indikator für meine Recherche ermitteln wollte. In der Beschreibung, wie man die Channels bildet, sind einige Punkt, die zu einem möglichen falschen Aufbau eines Kanals führen. Zunächst einmal handelt es sich um die Situation, wenn zwei Extremum, durch die eine der Kanallinien gezogen werden soll, zu nah aneinander platziert sind. In solchen Fällen beginnen einige Indikatoren den Kanal von 45 Grad abwärts zu 45 Grad aufwärts zu "werfen", und dann zurück, von oben nach unten - nun, das volle Programm. Leider vertrauen die Entwickler von Indikatoren implizit Barishpolets Autorität, realisieren seine Regeln einfach aus Routine (es muss angemerkt werden, dass die Regeln ok funktionieren, in der überwältigenden Mehrheit der Fälle). Allerdings vergessen sie dabei, dass der alle möglichen Überraschungen für uns bereithalten kann. In solchen Fällen, beginnt das "Top" des Indikators "aufgeblasen" zu sein und die Indikatoren werden zum Grund für Verluste, anstatt ein hilfreiches Werkzeug zum Erzielen von Gewinnen zu sein.
Um verschiedene Methoden zum des Aufbaus von Barishpolets Moving Channels zu vergleichen, habe ich meinen eigenen Indikator geschrieben, der auch Kanäle bildet, aber "objektiver" - durch die mittlere Kursbewegung-Linie. Es ist sehr ähnlich wie das Standard-Werkzeug, Equidistant Channel, es macht, aber die Kanalgrenzen werden due einen etwas anderen Algorithmus gebildet (Sie finden weitere Einzelheiten auf meiner Webseite Two-Channel Method - in Russisch). Sehen wir uns nun an wie einer der Barishpolets Moving Channels Indikatoren (SHI_Channel_true), der sich in CodeBase befindet, verhalten wird, verglichen mit dem " korrekten" mittleren Kurs-Kanal. Die Linien des getesteten Indikators wurden in grün gezogen, die Linien des langen (wöchentlich) Kanals des anderen Indikators in orange, die des kurzen (33-Stunden) Kanals sind hellblau. Sie werden rot, sobald sie sich den Kanalgrenzen nähern.
Nun, Film ist Film, aber schauen wir uns einige der gemachten Screenshots näher an.
Für den Zeitraum von 04. bis 07. Dezember 2007 (EURUSD M30), können wir sehen, wie viel Mal der Indikator von Barishpolets Moving Channels "umdreht" und zu der mittleren Kursbewegung-Linie zurückkehrt.
Hier ist es möglich, das ein Kanal durchbrochen ist (der Kanal ist einfach nicht sehr korrekt gezeichnet, obwohl, der Kurs erreicht die wöchentliche Kanalgrenze, in der Tat). Sie erkennen wie der Indikator sich verhält. Der Kanal dreht auf dem nächsten Balken um und stimmt praktisch mit dem wöchentlichen Kanal überein:
Dies passierte, weil ein neues Extremum gebildet wurde und der Indikator es ordnungsgemäß verarbeitet hat. Allerding sind nur wenige neue Balken vergangen - und er dreh wieder in seine falsche Position.
Das passierte, weil ein neuer Kurs den Extremum-Punkt in einen normalen internen Punkt gedreht hat, und der Indikator hat diese Änderung wieder verarbeitet. Eine neue Umkehr findet auf dem nächsten Balken statt:
Zwei oder drei Balken mehr, und - wieder eine Umkehr:
Auf diesem Chart sehen wir ein anderes "Extrem" der Bildung von Barishpolets Moving Channels - zwei nahe Extremums setzen eine der Kanalgrenzen, obwohl ein ziemlich offensichtliches Bild in diesem Chart zu sehen ist: der Kurs innerhalb des kurzen 33-Stunden Kanals ist gut auf dem Weg zu den Grenzen des wöchentlichen Kanals, von der er höchstwahrscheinlich abprallt und sich zurück in den wöchentlichen Kanal bewegt. In der Tat, es passiert so - wir sehen unser "vorhergesehenes" Bild innerhalb des nächsten Tages:
Also, mit unserem nicht-handelnden Screenshot-machenden EA, können ein angemessenes Urteil bilden über der Indikator SHI_Channel_true: Es ist ein sehr "bescheidenes" Werkzeug. Ich hätte Skrupel im meine Einlage anzuvertrauen, ohne eine ernsthafte Anpassung (dies war einer der Gründe, weshalb ich Two-Channel Methods erstellt habe).
Fazit
Der Anwendungsbereich des betrachteten Codes ist nicht auf das Testen von Indikatoren begrenzt. Sie können den gleichen Mechanismus in einen handelnden EA einfügen. In diesem Fall werden Sie zu beidem in der Lage sein, den debuggten Code "abdichten" und sammeln der Historie des Verhaltens Ihres EA und mit diesem EA arbeitende Indikatoren, der Handelsergebnisse des EAs für die verwendeten Indikatoren zur Berechnung von Handelssignalen. Dies kann das Debuggen eines auf einem Real-Konto handelnden EA beschleunigen.
Eine wichtige Eigenschaft der vorgeschlagenen Indikator-Testmethode, ist die Möglichkeit Screenshots zu machen. Viele Bildbetrachter (zum Beispiel, das kostenlose IrfanView) kann Dateien im Seiten-Modus anzeigen. Wenn Sie PageDown drücken, gehen Sie zu dem nächsten Screenshot, wie Sie tun würden, wenn Sie im Tester manuell zu dem nächsten Balken gehen. Was Sie nicht im Tester machen können, aber einfach in IrfanView zu machen ist, ist zu dem Vorangegangenen Balken gehen. Drücken Sie einfach PageUp - und Sie werden "Historie zurückblättern". Nochmal drücken - und Sie gehen noch tiefer in die Historie. Dies ermöglich beides, die Ansicht des Indikator-Verhaltens und es zu untersuchen, und die Gründe zu ermitteln, warum sie nicht korrekt arbeiten.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/1534
![Integration von MetaTrader 4 Client Terminal mit MS SQL Server](https://c.mql5.com/2/16/625_23.gif)
![Expert Advisors Basierend auf Beliebten Handelssystemen und Alchemie der Handelsroboter Optimierung (Teil VI)](https://c.mql5.com/2/16/633_39.gif)
![Show Must Go On, oder WIeder Einmal über ZigZagl](https://c.mql5.com/2/16/620_30.gif)
![Die Statistische Analyse vonMarktbewegungen und Deren Prognosen](https://c.mql5.com/2/16/634_10.jpg)
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.