Dreidimensionale Grafiken - ein professionelles Werkzeug der Marktanalyse
Einführung
Alle Händler arbeiten ständig mit wechselnden Preisen und Notierungen. Jeder sucht Abhängigkeiten und Gesetzmäßigkeiten. Wir analysieren Volumen, Werte der verschiedenen Indikatoren und viele andere Parameter. Ich denke, es ist nicht notwendig, Sie von den MQL4-Vorteilen hinsichtlich der Marktanalyse zu überzeugen. Sie schreiben einfach einen Skript und ziehen Schlüsse in der Basis auf Ergebnisse. Normalerweise wird eine Analyse über Grafiken von Notierungen durchgeführt oder über den Grafiken, die eine gewisse Abhängigkeit von zwei Variablen zeigen. Das ist alles natürlich sehr gut, aber manchmal müssen wir einen Zusammenhang zwischen drei Variablen finden und deutlich visualisieren, was sie verbindet. Zu diesem Zweck werden in der ganzen Welt 3D-Grafiken und deren Analyse verwendet. Eine solche Vorgehensweise spart Zeit und Geld.
In diesem Artikel werden wir eine einfache Bibliothek für die Erstellung der 3D-Grafiken und deren weiteren Betrachtung in Microsoft Excel schreiben. Wir werden standarde Optionen MQL4 verwenden, um die Daten vorzubereiten und in * .csv-Datei zu exportieren.
Was ist das Dateiformat *.csv ?
Es ist eine Textdatei, in der die Reihenfolge der Werte gespeichert wird, die Werte werden mit dem vorgegebenen Separator getrennt, in unserem Fall ist es ein Semikolon - "; ". Um eine Tabelle zu zeichnen, müssen wir einfach ein Paar Codezeilen schreiben. Der Vorteil dieses Formats besteht darin, dass es leicht erkannt wird und kann in der Form einer Tabelle von Microsoft Excel interpretiert werden. Und in diesem Programm können wir in der Basis auf den erhaltenen Daten eine 3D-Grafik erstellen, und sie danach analysieren.
Die Bibliothek generateCsv
Um die Daten schnell und einfach anzuzeigen, erstellen wir eine Bibliothek. So erstellen Sie eine neue Bibliothek und fügen Sie den Code unten hinzu, speichern Sie sie unter dem Namen generateCsv.mq4 im Ordner "...MetaTrader\experts\libraries". Danach kompilieren Sie die Bibliothek.
//+------------------------------------------------------------------+ //| generateCsv.mq4 | //| Copyright © 2006, Antonio Banderass. All rights reserved | //| banderassa@ukr.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Antonio Banderass. All rights reserved" #property link "banderassa@ukr.net" #property library //+------------------------------------------------------------------+ //| PrepareString | //+------------------------------------------------------------------+ string PrepareString(string s) { bool exit = false; int index = 0; string str = s; while(!exit) { index = StringFind(str, ".", index); if(index > -1) str = StringSetChar(str, index, ','); else exit = true; } return(str); } //+------------------------------------------------------------------+ //| GenerateCsv | //+------------------------------------------------------------------+ int GenerateCsv(string fileName, int arraySizeX, int arraySizeY, double arrayIndexX[], double arrayIndexY[], double arrayZ[][]) { int handle = FileOpen(fileName, FILE_CSV|FILE_WRITE, ' '), x, y; string str; if(handle1) { Print("Error:", GetLastError()); return(handle); } else { str = ";"; for(x = 0; x < arraySizeX; x++) { str = str + arrayIndexX[x]; str = str + ";"; } FileWrite(handle,PrepareString(str)); for(y = 0; y < arraySizeY; y++) { str = ""; str = str + arrayIndexY[y] + ";"; for(x = 0; x < arraySizeX; x++) { str = str + arrayZ[x,y]; str = str + ";"; } FileWrite(handle, PrepareString(str)); } } FileClose(handle); return(handle); }
Erstellen Sie nun eine neue Header-Datei mit dem Namen generateCsv.mqh für den Zugriff zu den Bibliotheksfunktionen, fügen Sie den vorgegebenen Code und speichern Sie im Ordner "... MetaTrader \ experts \ include".
//+------------------------------------------------------------------+ //| generateCsv.mqh | //| Copyright © 2006, Antonio Banderass. All rights reserved | //| banderassa@ukr.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Antonio Banderass. All rights reserved" #property link "banderassa@ukr.net" #import "generateCsv.ex4" string PrepareString(string s); int GenerateCsv(string fileName, int arraySizeX, int arraySizeY, double arrayIndexX[], double arrayIndexY[],double arrayZ[][]);
Diese einfache Bibliothek besteht aus zwei Funktionen. Lassen Sie uns die Bedeutung jeder Funktion betrachten. Die erste Funktion PrepareString ist vorgesehen, um Punkte in Zeilen durch Kommas zu ersetzen. Die Tatsache ist, dass beim Schreiben der Daten in einer Datei mit der Standardfunktion Filewrite, wird die Ganzzahl und die Bruchteile durch einen Punkt getrennt. Und das ist für uns nicht akzeptabel, weil Microsoft Excel Dezimalstellen nur dann erkennt, wenn die Teile durch ein Komma getrennt wurden. Deshalb wird diese Funktion im Hauptteil der Funktion GenerateCSV aufgerufen, wenn Daten in der Datei *.csv geliefert werden. Der einzige Parameter der Funktion ist eine Zeile, wo wir Punkte durch Kommas ersetzen müssen. Zurückgelieferte Wert - ist eine neue Zeile ohne Punkte. Bitte beachten Sie, dass Sie diese Funktion nicht aufrufen müssen, es wird durch die zweite Funktion automatisch aufgerufen, wenn es nötig ist.
Die Funktion GenerateCsv wird zur Lieferung der Daten in * .csv-Format in einer Datei verwendet. Lassen Sie uns ihre Parameter betrachten:
int GenerateCsv(string fileName, int arraySizeX, int arraySizeY, double arrayIndexX[], double arrayIndexY[], double arrayZ[][]);
- stringfileName - Der Name einer Datei zur Lieferung, vergessen Sie nicht das Format * .csv einzugeben;
- intarraySizeX - Die Breite des Arrays mit Daten;
- int arraySizeY - Die Höhe des Arrays mit Daten;
- double arrayIndexX[] - Das Array der Werte von der ersten Variable;
- double arrayIndexY[] - Das Array der Werte von der zweiten Variable;
- double arrayZ[][] - Das zweidimensionale Array der Werte von der dritten Variable;
Um den Zweck der einzelnen Parameter zu verstehen, schauen Sie auf das Bild:
Also, was Sie alles brauchen, um diese Daten zu liefern, ist drei Arrays der Werte für jede Variable. Nun wollen wir sehen, wie es funktioniert.
Die Anwendung der Bibliothek generateCsv
Erstellen Sie einen neuen Skript mit dem Namen 3dGraphicOut und fügen Sie den Code ein.
//+------------------------------------------------------------------+ //| 3dGraphicOut.mq4 | //| Copyright © 2006, Antonio Banderass. All rights reserved | //| banderassa@ukr.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Antonio Banderass. All rights reserved" #property link "banderassa@ukr.net" #include <generateCsv.mqh> #define ARRAY_SIZE_X 16 #define ARRAY_SIZE_Y 16 //+------------------------------------------------------------------+ //| start | //+------------------------------------------------------------------+ int start() { int x,y; double arrayIndexX[ARRAY_SIZE_X]; double arrayIndexY[ARRAY_SIZE_Y]; double arrayZ[ARRAY_SIZE_X,ARRAY_SIZE_Y]; for(x=0;x<ARRAY_SIZE_X;x++) arrayIndexX[x]=x/10.0; for(y=0;y<ARRAY_SIZE_Y;y++) arrayIndexY[y]=y/10.0; for(x=0;x<ARRAY_SIZE_X;x++) for(y=0;y<ARRAY_SIZE_Y;y++) arrayZ[x,y]=MathSin(arrayIndexX[x]+arrayIndexY[y]); GenerateCsv("test.csv",ARRAY_SIZE_X,ARRAY_SIZE_Y,arrayIndexX,arrayIndexY,arrayZ); return(0); }
Das ist eine Standardvorlage, aus der jede 3D-Grafick beginnen soll. Lassen Sie uns jede Zeile getrennt betrachten:
#include <generateCsv.mqh>
Starten Sie die Bibliothek generateCsv.
#define ARRAY_SIZE_X 16 #define ARRAY_SIZE_Y 16
Hier definieren wir die Abmessungen der Tabelle: ARRAY_SIZE_X - die Breite der Tabelle, ARRAY_SIZE_Y - die Höhe.
int x,y;
Dies sind zwei Array-Indizes. Da sie oft verwendet werden, ich legte sie außerhalb des Körpers der Loops.
double arrayIndexX[ARRAY_SIZE_X];
Das ist das Array der Werte von der ersten Variable. Angenommen, Sie analysieren die Auswirkung der beiden Indikatoren auf Gewinn. In diesem Fall werden die Werte des ersten Indikators in diesem Array angeordnet sein. Bitte beachten Sie, dass Sie mit einigen Startwerten, beispielsweise bei Null anfangen sollten, und dann erhöhen Sie es mit einem gewissen Schritt, zum Beispiel 0,5.
double arrayIndexY[ARRAY_SIZE_Y];
Der Wert des zweiten Indikators muss in diesem Array angeordnet werden. Wählen Sie auch den passenden Anfangswert und den Schritt.
double arrayZ[ARRAY_SIZE_X,ARRAY_SIZE_Y];
Und hier sollten die Gewinnwerte sein, je nach den Indikatorwerten. Schauen Sie noch einmal auf das obige Bild, um die Arrays zu verstehen.
Achten Sie darauf, dass der Typ der Arrays - double ist. Das macht sie universell. Wenn Sie ganze Zahlen (int) wie die Elemente der Arrays verwenden, ist es in Ordnung, weil MQL4 eine implizite Art Transformation hat.
for(x = 0; xARRAY_SIZE_X; x++) { // arrayIndexX[x]= ... ; }
In diesem Block füllen wir das Array der ersten Variable mit Werten, Vergessen Sie nicht, sie sollten mit einem bestimmten Schritt erhöht werden.
for(y = 0; y < ARRAY_SIZE_Y; y++) { // arrayIndexY[y]= ... ; }
Das gleiche gilt für die zweite Variable.
for(x = 0; x < ARRAY_SIZE_X; x++) { for(y = 0; y < ARRAY_SIZE_Y; y++) { // arrayZ[x,y]= ... ; } }
Und hier ist der interessanteste Teil der Vorlage: Wir füllen das zweidimensionale Array mit Werten in Abhängigkeit von zwei anderen Variablen.
GenerateCsv("test.csv",ARRAY_SIZE_X,ARRAY_SIZE_Y,arrayIndexX,arrayIndexY,arrayZ);
Und schließlich liefern wir die Daten in die Datei zur weiteren Analyse in Microsoft Excel. Jetzt speichern Sie diese Vorlage für die weitere Verwendung.
Ein einfaches Beispiel
Lassen Sie uns ein einfaches Beispiel für die Verwendung der Bibliothek betrachten. Ich habe absichtlich das Beispiel mit dem Handeln nicht geschrieben, damit der Code möglichst einfach und zugänglich sein könnte.
//+------------------------------------------------------------------+ //| 3dGraphicOut.mq4 | //| Copyright © 2006, Antonio Banderass. All rights reserved | //| banderassa@ukr.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Antonio Banderass. All rights reserved" #property link "banderassa@ukr.net" #include <generateCsv.mqh> #define ARRAY_SIZE_X 16 #define ARRAY_SIZE_Y 16 //+------------------------------------------------------------------+ //| start | //+------------------------------------------------------------------+ int start() { int x,y; double arrayIndexX[ARRAY_SIZE_X]; double arrayIndexY[ARRAY_SIZE_Y]; double arrayZ[ARRAY_SIZE_X,ARRAY_SIZE_Y]; for(x=0;x<ARRAY_SIZE_X;x++) arrayIndexX[x]=x/10.0; for(y=0;y<ARRAY_SIZE_Y;y++) arrayIndexY[y]=y/10.0; for(x=0;x<ARRAY_SIZE_X;x++) for(y=0;y<ARRAY_SIZE_Y;y++) arrayZ[x,y]=MathSin(arrayIndexX[x]+arrayIndexY[y]); GenerateCsv("test.csv",ARRAY_SIZE_X,ARRAY_SIZE_Y,arrayIndexX,arrayIndexY,arrayZ); return(0); }
Speichern Sie den Textskript, kompilieren und starten Sie ihn im Terminal. Nun öffnen Sie den Ordner "...MetaTraider\experts\files\", muss eine neue Datei "test.csv" erschienen, öffnen Sie es mit Hilfe von Microsoft Excel. Die Datei wird in eine zweidimensionale Tabelle umgewandelt, wie unten dargestellt ist:
Jetzt alle Zellen auszuwählen (CTRL+A) und gehen Sie in Insert -> Chart (ALT+I,H):
Dann wählen Sie Chart Type -> Surface, Chart sub-type -> 3D-Surface und klicken Sie auf Finish:
Danach wird eine 3D-Grafik dargestellt:
Abschluss
Jetzt ist auch für Sie ein praktisches Werkzeug für eine schnelle Datenexport aus dem Handelsterminal MetaTrader in das Programm Microsoft Excel für eine schnelle Erstellung der 3D-Grafiken erreichbar und auch deren weitere Analyse. Jetzt können Sie Forex Korrespondenzen und Gesetzmäßigkeit zwischen drei Variablen gleichzeitig analysieren. Versuchen Sie 3D-Histogramme der Gewinn-Abhängigkeit von Parametern wie Takeprofit und Stoplosszu zu analysieren oder schauen Sie, wie eine Grafik der Volumen-Abhängigkeit von dem aktuellen Wochentag und Stunde aussieht. Ich denke, dass Sie eine Menge von interessanten und nützlichen Gesetzmäßigkeiten zu finden.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/1443
- 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.