Saturday 23 September 2017

Stline Forex


SCE-Oszillator SCE (Statistical Cumulative Energy) Der Oszillator basiert auf Berechnungen von statistischen Parametern der Eingangsparameter Zeitreihen. Für den Markteintritt werden zwei gleitende Durchschnitte verwendet. In den Parametereinstellungen (Abb. 1) können Benutzer das Aussehen jedes gleitenden Durchschnittes sowie die Glättungszeit und die Art des Preises für die Berechnung angeben. Zusätzlicher Parameter (ArrowShow) zeigt die Pfeile an, die die aktuelle Richtung der Anzeigezeilen und der Serverzeit zeigen. Grafische Konstruktionen des Indikators werden als kumulative (gestrichelte) Zeilen angezeigt. Eine solche Darstellung macht Umkehrungen und Extremwerte sichtbarer, da die Spitzen der kumulativen Linien durch Kreuzung der beiden entgegengesetzt gerichteten Linien gebildet werden. Die kumulativen Linien glatt unwesentliche Fluktuationen. Liegt die Linie am oberen oder unteren Rand ihres Bereichs, so bedeutet dies, dass sich der Trend in die entsprechende Richtung fortsetzt. SCE-Indikator verwendet fünf grafische Konstruktionen, berechnet als kumulative Werte der mittleren quadratischen Abweichung der folgenden Parameter: Stochastischer - Stochastischer Oszillator (berechnet auf der Grundlage stochastischer Indikatordaten) Prognose - Preisprognose (berechnet durch Open, High, Low, Close Puffer) Fast MA - Langsamer MA - langsamer gleitender Durchschnitt (definiert durch Eingabeparameter) Durchschnitt - Prognose, Fast MA und Slow MA Puffer durchschnittlich. Der sechste Korrelationsgraphikaufbau ist ein Korrelationsverhältnis der Durchschnittspufferberechnungsdaten Der siebte Trendgraphikaufbau wird als normalisierter gewichteter Durchschnitt der gesamten kumulativen Zeilenpuffer unter Verwendung der folgenden Gleichung berechnet: Trend10 (StLinei102FcLinei102FsLinei11AvgLinei12SlLinei13) 7 Die achte Energiegraphische Konstruktion ist die Energie Die als kinetische Energie in der Physik berechnet wird: E (mv2) 2, wobei m - Zeckenvolumen v - Preisänderungsrate (ROC) ist. Da die gleitenden Mittelwerte als Eingangsdaten für die SCE-Anzeige dienen, wäre es besser, das Hauptdiagrammfenster gemäß den SCE-Parametern einzustellen. So erhalten wir das angepasste Handelssystem, bestehend aus Trendindikatoren-Oszillator (siehe Abb. 2). ZigZagFT ist im Markt kostenlos erhältlich. Zusätzliche Möglichkeit, Emissions-, Durchschnitts-, Fast-MA-Trendlinien als Histogramme zu zeichnen. Beim aktiven Handel auf kleinen Zeitrahmen erlaubt diese Indikatoransicht die Konzentration auf schnelle Linien wie Energie, Prognose und Korrelation. Sie können mit dem DrawHistogram-Parameter umschalten. 1. Änderung des Algorithmus der Berechnung des Farbspektrums des Histogramms der allgemeinen Tendenz. Jetzt entspricht das Spektrum den Regenbogenfarben, was die Trendwende glatter macht. 2. Der Fehler der Berechnung des letzten Strichs der Energieleitung wurde behoben. 3. Die Warnung nach Objekten, die nach der Initialisierung verbleiben, wurde behoben. Download MetaTrader 5 Copyright 2000-2017, MQL5 Ltd. MetaTrader 4 - Beispiele HTML-Walkthrough Verwenden von MQL4 Einführung HTML (Hypertext Mark-Up Language) wurde für die bequeme Formatierung von Textmaterialien erstellt. Alle Dokumente dieses Typs werden mit speziellen Funktionswörtern mit dem Namen tags formatiert. Praktisch alle Informationen in HTML-Dateien erweist sich als mit Tags eingeschlossen werden. Wenn wir reine Daten extrahieren wollen, müssen wir die Service-Informationen (Tags) von relevanten Daten trennen. Wir nennen diese Prozedur HTML-Walkthrough mit dem Ziel, die Tag-Struktur auszugleichen. Was ist Tag In Bezug auf eine einfache Beschreibung, ist Tag ein Wort in spitzen Klammern eingeschlossen. Dies ist beispielsweise ein Tag: lttaggt, obwohl in HTML-Tags bestimmte Wörter in lateinischen Buchstaben eingegeben sind. Beispielsweise lthtmlgt ist ein korrektes Tag, aber es gibt kein Tag lthtml2gt. Außerdem können viele Tags zusätzliche Attribute haben, die die durch das gegebene Tag durchgeführte Formatierung präzise formulieren. Beispiel: lt div align center gt bedeutet tag ltdivgt, in dem das zusätzliche Attribut der zentralen Ausrichtung des Tag-Inhalts angegeben wird. Tags werden meist paarweise verwendet: Es gibt öffnende und schließende Tags. Sie unterscheiden sich nur durch das Vorhandensein von Schrägstrich. Tag ltdivgt ist ein öffnendes Tag, während tag ltdivgt ein schließendes ist. Alle zwischen den öffnenden und den schließenden Tags eingeschlossenen Daten werden als Tag-Inhalt bezeichnet. Es ist dieser Inhalt, den wir an HTML-Code-Komplettlösung interessiert sind. Beispiel: Tag lttdgt enthält 6 hier. Was bedeutet Text-Walkthrough-Mittel Im Kontext dieses Artikels bedeutet es, dass wir alle Wörter in einer HTML-Datei auftauchen möchten und in zwei eckigen Klammern eingeschlossen sind: lt und gt - öffnen und schließen. Wir werden hier nicht analysieren, ob jedes Wort in diesen Klammern ein korrektes Tag ist oder nicht. Unsere Aufgabe ist rein technisch. Wir werden alle aufeinanderfolgenden Tags, die in einem String-Array gefunden werden, auf einer first-come Basis schreiben. Wir nennen diese Array-Tag-Struktur. Datei Lesefunktion Bevor Sie eine Textdatei analysieren, ist es besser, sie in ein Zeichenfolgenarray zu laden. So werden wir sofort öffnen und schließen Sie die Datei, um nicht zu vergessen, die Datei aus Versehen zu schließen. Außerdem ist eine benutzerdefinierte Funktion, die den Text aus einer Datei in ein Array einliest, viel bequemer für eine Mehrfachanwendung, als jedesmal, wenn die vollständige Prozedur des Datenlesens mit einer obligatorischen Überprüfung auf mögliche Fehler geschrieben wird. Die Funktion ReadFileToArray () hat drei Parameter: string array - ein String-Array, das von einem Link übergeben wird, erlaubt es, Größe und Inhalt direkt in der Funktionszeichenfolge zu ändern. FileName - Dateiname die Zeilen, aus denen in die Array-Zeichenkette WorkFolderName - Im Verzeichnis Terminaldirectoryexpertsfiles. Die Größe des Hilfsstring-Arrays beträgt 64000 Elemente. Dateien von einer großen Anzahl von Zeilen sollen nicht sehr oft auftreten. Sie können diesen Parameter jedoch beliebig ändern. Variable stringCounter zählt die Anzahl der Zeilen, die aus der Datei gelesen wurden, in das Hilfsarray temArray, dann werden die Lesezeilen in Arrays geschrieben, deren Größe vorab als gleich stringCounter festgelegt ist. Im Falle eines Fehlers zeigt das Programm eine Meldung in EAs-Logs an, die Sie auf der Registerkarte Experts sehen können. Wenn das Array erfolgreich ausgefüllt wurde, gibt Funktion ReadFileToArray () true zurück. Ansonsten gibt es false zurück. Hilfe Funktion FindInArray () Bevor Sie mit der Verarbeitung des Inhalts des String-Arrays in unserer Suche nach Tags beginnen, sollten wir die allgemeine Aufgabe in mehrere kleinere Teilaufgaben aufteilen. Es gibt mehrere Lösungen für die Aufgabe der Erkennung der Tag-Struktur. Jetzt wollen wir einen bestimmten betrachten. Ermöglicht die Erstellung einer Funktion, die uns mitteilen würde, in welcher Zeile und in welcher Position in dieser Zeile das gesuchte Wort platziert wird. Wir übergeben an diese Funktion das String-Array und die String-Variable, die das Wort enthält, nach dem wir suchen. Funktion FindInArray () gibt die Koordinaten von matchedText mit Integer-Variablen zurück, die vom Link übergeben werden. Variable returnLineNumber enthält die Zeilennummer, während returnPosIndex die Positionsnummer in dieser Zeile enthält. Feige. 1. Suchen Sie die Anfangsposition des Textes im String-Array. Die Suche wird nicht im gesamten Array durchgeführt, sondern beginnt mit der Zeilennummer inputLine und der Positionsnummer inputPos. Dies sind erste Suchkoordinaten in Array. Wenn das Suchwort nicht gefunden wird, enthalten die Rückgabevariablen (returnLineNumber und returnPosIndex) den Wert -1 (minus eins). Eine Zeile durch das Starten und Beenden von Koordinaten aus einem String Array erhalten Wenn wir die Anfangs - und die Endkoordinaten eines Tags haben, müssen wir alle Zeichen, die sich zwischen den beiden eckigen Klammern befinden, abrufen und schreiben. Dazu verwenden wir die Funktion getTagFromArray (). In dieser Funktion suchen wir nacheinander alle Zeilen, die sich innerhalb der Koordinaten der Öffnungs - und Schließwinkelklammern befinden, unter Beteiligung der Raumkoordinaten. Der Funktionsvorgang führt zum Erhalten des Ausdrucks von lttagnamegt, der aus mehreren Zeilen zusammengesetzt werden kann. Feige. 2. Erzeugung einer String-Variablen vom String-Array mit der Anfangs - und Endposition. Getting Tag-Struktur Nun haben wir zwei Helper-Funktion, so können wir die Suche nach Tags. Dazu suchen wir nacheinander nach lt, gt und (Leerzeichen) mit der Funktion FindInArray (). Um genauer zu sein, werden wir nach den Positionen dieser Zeichen im String-Array suchen und dann die Namen der gefundenen Variablen mit der Funktion getTagFromArray () zusammenfassen und in ein Array mit der Tag-Struktur platzieren. Wie Sie sehen können, ist die Technologie sehr einfach. Dieser Algorithmus wird in der Funktion FillTagStructure () realisiert. Beachten Sie, dass bei erfolgreicher Suche nach einem Tag die Größe des Arrays, das die Tag-Struktur darstellt, um eins erhöht wird, ein neues Tag hinzugefügt wird und dann die Funktion rekursiv aufruft. Feige. 3. Eine beispielhafte rekursive Funktion: Die Funktion FillTagStructure () ruft sich selbst auf. Diese Methode des Schreibens von Funktionen für konsekutive Berechnungen ist sehr attraktiv und oft berstet ein Programmierer viel. Basierend auf diesen Funktionen wurde das Skript TagsFromHTML. mq4 entwickelt, das nach Tags im Testerbericht StrategyTester. html sucht und alle gefundenen Tags im Protokoll anzeigt. Feige. 4. Ergebnis der Operationen des Skripts TagsFromHTML. mq4: Die Tag-Nummer und das Tag selbst werden angezeigt. Wie Sie sehen können, kann ein Testbericht einige tausend Tags enthalten. In Fig. 4, können Sie sehen, dass der letzte Tag gefunden, lthtmlgt, hat die Anzahl von 6194. Es ist unmöglich, in einer solchen Menge von Tags manuell zu suchen. Erste Schritte in Tags einbinden Die Suche nach Tags ist eine zugehörige Aufgabe, die Hauptaufgabe besteht darin, die Informationen in Tags zu verpacken. Wenn wir den Inhalt der Datei StartegyTester. html mit einem Texteditor sehen, z. B. Notepad, können wir sehen, dass sich die Daten des Berichts zwischen den Tags lttablegt und lttablegt befinden. Tag-Tabelle dient zum Formatieren tabellarischer Daten und enthält in der Regel viele Zeilen, die zwischen den Tags lttrgt und lttrgt platziert sind. Im Gegenzug enthält jede Zeile Zellen, die in den Tags lttdgt und lttdgt eingeschlossen sind. Unser Ziel ist es, die wertvollen Inhalte zwischen lttdgt-Tags zu finden und diese Daten in Strings zu speichern, die für unsere Bedürfnisse formatiert sind. Zunächst können wir einige Änderungen in der Funktion FillTagStructure () vornehmen, damit wir sowohl die Tag-Struktur als auch die Informationen über die tag-startd-Positionen speichern können. Feige. 5. Zusammen mit dem Tag selbst werden seine Start - und Endpositionen im String-Array in die entsprechenden Arrays geschrieben. Wenn wir den Tag-Namen und die Koordinaten der einzelnen Tags kennen, beginnen und enden, können wir den Inhalt einfach zwischen zwei aufeinanderfolgenden Tags finden. Zu diesem Zweck schreiben wir eine weitere Funktion, GetContent (), die der Funktion getTagFromArray () sehr ähnlich ist. Jetzt können wir den Inhalt der Tags in irgendeiner Weise bequem zu uns verarbeiten. Ein Beispiel für eine solche Verarbeitung finden Sie im Skript ReportHTMLtoCSV. mq4. Unten ist die Funktion start () des Skripts: In Abb. 6, können Sie sehen, wie eine Protokolldatei mit den Nachrichten aus diesem Skript angezeigt und mit Microsoft Excel geöffnet wurde. Feige. 6. Protokolldatei aus dem Ordner MetaTrader 4expertslogs mit den Operationsresultaten des Skripts ReportHTMLtoCSV. mq4, geöffnet mit Micrisoft Excel. In Fig. 6 sehen Sie die bekannte Struktur des MetaTrader 4 Testberichts. Defekte dieses Skripts Es gibt verschiedene Arten von Programmierfehlern. Fehler der ersten Art (Syntaxfehler) sind im Kompilierungsstadium einfach zu erkennen. Fehler zweiter Art sind algorithmisch. Der Programmcode ist erfolgreich kompiliert, aber es können Situationen auftreten, die im Algorithmus unvorhergesehen sind, was zu Fehlermustern im Programm oder sogar zum Absturz führt. Diese Fehler sind nicht so leicht zu erkennen, aber immer noch möglich. Schließlich können Fehler der dritten Art, die begrifflichen, auftreten. Solche Fehler treten auf, wenn der Programmalgorithmus, obwohl korrekt geschrieben, nicht bereit ist, das Programm unter etwas unterschiedlichen Bedingungen zu verwenden. Skript ReportHTMLtoCSV. mq4 eignet sich gut für die Verarbeitung von kleinen HTML-Dokumenten mit einigen tausend Tags, aber es ist nicht geeignet für die Verarbeitung von Millionen von ihnen. Es hat zwei Engpässe. Die erste ist die multiple Größenänderung von Arrays. Feige. 7. Mehrere Aufrufe für ArrayResize () für jedes neu gefundene Tag. Im Prozess der Skript-Operation, rufen Funktion ArrayResize () Zehntausende, Hunderte Tausende oder sogar Millionen Mal wird in enorme Zeit verschwenden. Jede dynamische Größenänderung eines Arrays erfordert einige Zeit, um einen neuen Bereich der erforderlichen Größe im PC-Speicher zuzuordnen und den Inhalt des alten Arrays in diesen neuen zu kopieren. Wenn wir ein Array mit einer relativ großen Größe im Voraus zuteilen, können wir die Zeit, die diese übertriebenen Operationen benötigen, wesentlich reduzieren. Beispielsweise können wir Array-Tags wie folgt deklarieren: Jetzt können wir in sie schreiben bis zu Millionen-Tags ohne die Notwendigkeit, die Funktion ArrayResize () aufzurufen. Der andere Fehler des betrachteten Skripts ReportHTMLtoCSV. mq4 ist die Verwendung der rekursiven Funktion. Jeder FillTagStructure () - Funktionsaufruf wird mit der Zuweisung eines bestimmten Bereichs von RAM begleitet, um die notwendige lokale Variable in dieser lokalen Kopie der Funktion zu platzieren. Wenn das Dokument 10 000 Tags enthält, wird die Funktion FillTagStructure () auf 10 000 Mal aufgerufen. Der Speicher, der die rekursive Funktion lokalisiert, wird aus einem vorreservierten Bereich zugewiesen, dessen Größe durch die directive Eigenschaft stacksize angegeben wird: In diesem Fall wird dem Compiler zugeordnet, eine Million Bytes für Stack zuzuordnen. Wenn der Stackspeicher für Funktionsaufrufe nicht ausreicht, erhalten wir den Fehler des Stack-Überlaufs. Wenn wir die rekursive Funktion millionenfach aufrufen müssen, kann sogar die Zuteilung von Hunderten von Megabyte für Stapel vergeblich sein. Daher müssen wir den Tag-Suchalgorithmus leicht modifizieren, um rekursive Aufrufe zu vermeiden. Feige. Jeder rekursive Funktionsaufruf benötigt einen eigenen Speicherbereich im Programmstapel. Wir gehen einen anderen Weg - Neue Funktion FillTagStructure () Lets umschreiben die Funktion der immer Tag-Struktur. Es wird nun explizit einen Zyklus verwenden, um mit String-Array zu arbeiten. Der Algorithmus der neuen Funktion ist klar, wenn Sie die alte Funktion verstanden haben. Die Arrays werden nun in Teilen durch die Kapazität der Elemente verändert. Der Wert der Kapazität wird durch Deklaration der Konstante angegeben: Die Start - und Endpositionen jedes Tag werden nun mit der Funktion setPositions () gesetzt. Übrigens brauchen wir nicht mehr die Funktionen FindInArray () und getTagFromArray (). Der vollständige Code ist im Skript ReportHTMLtoCSV-2.mq4 angegeben. Fazit Der Algorithmus der HTML-Dokument-Komplettierung für Tags wird berücksichtigt und ein Beispiel für die Extrahierung von Informationen aus dem Bericht des Strategie-Testers im MetaTrader 4 Client-Terminal wird angegeben. Versuchen Sie nicht, ArrayResize () - Funktionsaufrufe zu verwenden, da dies zu übermäßigem Zeitaufwand führen kann. Außerdem kann die Verwendung rekursiver Funktionen wesentliche RAM-Ressourcen verbrauchen. Wenn Massenrufe zu dieser Funktion genommen werden, versuchen Sie es neu zu schreiben, so dass keine Rekursion erforderlich ist.

No comments:

Post a Comment