Es wurde die Möglichkeit hinzugefügt, sich bei MQL5.com mit
Facebook zu registrieren oder einzuloggen. Jeder Nutzer dieses sozialen
Netzwerkes kann jetzt in wenigen Klicks Zugang zu Chats und allen
Services für MetaTrader 5 bekommen.
#resource path_to_resource_file als type_of_resource_variable name_of_resource_variable
#resource "data.bin" as int ExtData[] // Deklaration des eindimensionalen Arrays vom nummerischen Typ, das Daten aus der Datei data.bin enthält #resource "data.bin" as MqlRates ExtData[] // Deklaration des Arrays einfacher Strukturen, das Daten aus der Datei data.bin enthält #resource "data.txt" as string ExtCode // Deklaration des Strings, der Daten aus der Datei data.txt enthält #resource "data.txt" as string ExtCode[] // Deklaration eines Strings-Arrays, das Daten aus der Datei data.txt enthält #resource "image.bmp" as bitmap ExtBitmap[] // Deklaration eines eindimensionalen Arrays, das die Bitmap aus der BMP Datei enthält, Arraygröße = height * width #resource "image.bmp" as bitmap ExtBitmap2[][] // Deklaration des zweidimensionalen Arrays, das die Bitmap aus der BMP Datei enthält, Arraygröße [height][width]
Die Dokumentation wurde aktualisiert.
string str; ... if(str) // Kompilierungsfehler "Cannot convert type 'string' to 'bool'" (in den vorherigen Builds trat der Fehler nicht auf) Print("str is true");Man muss eine explizite Bedingung schreiben:
string str; ... //--- überprüfen, ob der String initialisiert wurde if(str!=NULL) Print("str is true"); oder //--- überprüfen, ob der Wert des Strings "true" ist if(StringCompare(str,"true",false)) Print("str is true"); oder //--- überprüfen, ob der String eine Zahl ist und nicht gleich Null ist if((int)str!=0) Print("str is true");
void ArrayPrint( const void& array[], // Output Array uint digits=_Digits, // Anzahl von Dezimalstellen nach dem Komma const string separator=NULL, // Trennzeichen zwischen den Werten der Felder einer Struktur ulong start=0, // Index des ersten ausgegebenen Elements ulong count=WHOLE_ARRAY, // Anzahl der ausgegebenen Elemente ulong flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN );ArrayPrint gibt nicht alle Felder eines Struktur-Arrays im Journal aus – Felder-Arrays und Pointer-Arrays von Objekten werden ausgelassen. Für die Ausgabe aller Felder einer solcher Struktur wird eine eigene Funktion mit der gewünschten Formatierung benötigt..
//--- ibt die Werte der letzten zehn Balken aus MqlRates rates[]; if(CopyRates(_Symbol,_Period,1,10,rates)) { ArrayPrint(rates); Print("Überprüfung\n[time]\t[open]\t[high]\t[low]\t[close]\t[tick_volume]\t[spread]\t[real_volume]"); for(int i=0;i<10;i++) { PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i, TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS), rates[i].open,rates[i].high,rates[i].low,rates[i].close, rates[i].tick_volume,rates[i].spread,rates[i].real_volume); } } else PrintFormat("CopyRates failed, error code=%d",GetLastError()); //--- Beispiel für den Output /* [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume] [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000 [1] 2016.11.09 05:00:00 1.12296 1.12825 1.11930 1.12747 17829 9 15632176000 [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000 [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000 [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000 [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000 [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000 [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000 [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000 [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 Überprüfung [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume] [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000 [1] 2016.11.09 05:00:00 1.12296 1.12825 1.1193 1.12747 17829 9 15632176000 [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000 [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000 [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000 [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000 [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000 [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000 [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000 [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 */
void OnStart() { int arr[]; //--- wie viel Speicherplatz ursprünglich verwendet wurde Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); //--- wie viel Speicherplatz für das Array mit der Größe 1 verwendet wurde, aber mit Reserve ArrayResize(arr,1,1024*1024); Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); //--- nach der Vergrößerung des Arrays wird der Speicherplatz dank der Reserve nicht geändert ArrayResize(arr,1024*512,1024*1024); Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); //--- nach der Reduzierung des Arrays verändert sich die Speichergröße nicht ArrayResize(arr,1); Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); //--- der vom Array nicht genutzte Speicherplatz wird durch das Löschen der Reserve frei ArrayResize(arr,1,-1); Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB"); }
#include <Graphics/Graphic.mqh> double Func1(double x) { return MathPow(x,2); } double Func2(double x) { return MathPow(x,3); } double Func3(double x) { return MathPow(x,4); } void OnStart() { GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES); }Das Ergebnis:
#include <Math/Stat/Binomial.mqh> #include <Graphics/Graphic.mqh> void OnStart(void) { double vars[101]; double results[101]; const int N=2000; //--- MathSequence(0,N,20,vars); MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results); ArrayPrint(results,4); GraphPlot(results); //--- }Das Ergebnis:
Die Dokumentation wurde aktualisiert.
Es wurden Tooltips für die Buttons Buy, Sell und Close in Handelsdialogen hinzugefügt. Die Tooltips erklären, welche Aktiva genau bei der Abwicklung der Transaktion gekauft bzw. verkauft werden, und helfen Anfängern den Sinn des Handeslprozesses besser nachzuvollziehen.
Eigenschaften der Bibliothek
Wie es verwendet wird
Die Dateien der ALGLIB sind im Verzeichnis \MQL5\Include\Math\Alglib gespeichert. Für die Verwendung der Funktionen, fügen Sie Ihrem Programm die Hauptdatei hinzu:
Der Standardbibliothek wurden Funktionen für das Arbeiten mit der mathematischen Statistik hinzugefügt. Nun sind die Möglichkeiten der R-Sprache, eines der besten Werkzeuge der statistischen Datenverarbeitung und -analyse, in MQL5 verfügbar.
Eigenschaften der Bibliothek
Die statistische Bibliothek beinhaltet Funktionen für die Berechnung statistischer Eigenschaften sowie Funktionen für das Arbeiten mit statistischen Verteilungen:
Wie es verwendet wird
Die Dateien der statistischen Bibliothek sind in \MQL5\Include\Math\Stat gespeichert. Um Funktionen der Bibliothek zu verwenden, fügen Sie die Datei mit den notwendigen Funktionen in Ihr Programm hinzu, zum Beispiel:
#include <Math\Stat\Binomal.mqh> #include <Math\Stat\Cauchy.mqh>
Eine ausführliche Beschreibung der Bibliotheksfunktionen finden Sie im Artikel Statistische Verteilung in MQL5 - das beste aus R rausholen.
Der Standardbibliothek wurde eine MQL5-Version der Fuzzy-Bibliothek hinzugefügt, in der Inferenzen vom Typ Mamdani und Sugeno implementiert werden.
Eigenschaften der Bibliothek
Wie es verwendet wird
Die Dateien der Fuzzy-Bibliothek sind im Verzeichnis \MQL5\Include\Math\Fuzzy gespeichert. Um Funktionen der Bibliothek zu verwenden, fügen Sie die Datei mit den notwendigen Funktionen in Ihr Programm hinzu, zum Beispiel:
#include <Math\Fuzzy\mamdanifuzzysystem.mqh> #include <Math\Fuzzy\sugenofuzzysystem.mqh>
Eine ausführliche Beschreibung der Bibliothek ist in der Code Base zu finden: Fuzzy - Bibliothek für das Arbeiten mit der Fuzzy-Logik
long FileLoad( const string filename, // [in] Dateiname void &buffer[], // [out] ein Array, in das die Datei geschrieben wird liest uint common_flag=0 // [in] 0 - Suche nach der Datei im Files-Ordner des Terminals, FILE_COMMON - im gemeinsamen Verzeichnis der Terminals ); bool FileSave( const string filename, // [in] Dateiname const void &buffer[], // [in] Array, welches in der Datei gespeichert wird uint common_flag=0 // [in] 0 - Erstellung einer Datei im Files-Ordner des Terminals, FILE_COMMON - im gemeinsamen Verzeichnis der Terminals ); );Ein Beispiel dafür, wie Ticks in eine Datei geschrieben und anschließend gelesen werden:
//--- Eingabeparameter input int ticks_to_save=1000; // Anzahl von Ticks //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { string filename=_Symbol+"_ticks.bin"; MqlTick ticks[]; //--- int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save); if(copied!=-1) { PrintFormat(" CopyTicks(%s) copied %d ticks",_Symbol,copied); //--- wenn die Tick-Historie synchronisiert ist, ist der Fehlercode gleich Null if(!GetLastError()==0) PrintFormat("%s: Ticks are not synchronized. Error=",_Symbol,copied,_LastError); //--- schreiben wir die Ticks in eine Datei if(!FileSave(filename,ticks,FILE_COMMON)) PrintFormat("FileSave() failed, error=%d",GetLastError()); } else PrintFormat("Failed CopyTicks(%s), Error=",_Symbol,GetLastError()); //--- nun lesen wir diese Ticks aus der Datei ArrayFree(ticks); long count=FileLoad(filename,ticks,FILE_COMMON); if(count!=-1) { Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags"); for(int i=0;i<count;i++) { PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x", TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000, ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags); } } }
//--- Kerzen haben die gleiche Farbe #property indicator_label1 "One color candles" #property indicator_type1 DRAW_CANDLES //--- es wurde nur eine Farbe angegeben, deswegen haben alle Kerzen die gleiche Farbe #property indicator_color1 clrGreenWenn zwei Farben angegeben wurden, werden die Umrisse der Kerzen die erste Farbe und der Körper — die zweite Farbe haben.
//--- die Farbe der Kerzen unterscheidet sich von der Farbe der Schatten #property indicator_label1 "Two color candles" #property indicator_type1 DRAW_CANDLES //--- Schatten und Umriss - grün, Körper - weiss #property indicator_color1 clrGreen,clrWhiteWenn drei Farben angegeben wurden, werden der Umriss der Kerzen die erste Farbe, bullische Kerzen - die zweite und bärische Kerzen - die dritte Farbe haben.
//--- die Farbe der Kerzen unterscheidet sich von der Farbe der Schatten #property indicator_label1 "One color candles" #property indicator_type1 DRAW_CANDLES //--- die Schatten und der Umriss sind grün, der Körper der bärischen Kerze ist weiß, der Körper der bärischen Kerze ist rot #property indicator_color1 clrGreen,clrWhite,clrRedAuf diese Weise kann man mithilfe des Stils DRAW_CANDLES eigene benutzerdefinierte Varianten der Kerzenfarben gestalten. Alle Farben können beim Laufen des Indikators mithilfe der Funktion PlotIndexSetInteger(Index_DRAW_CANDLES, PLOT_LINE_COLOR, modifier_nummer, Farbe) geändert werden, wobei:
//--- setzen wir die Farbe für den Umriss und die Schatten PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue); //--- setzen wir die Farbe für den Körper der bullischen Kerze PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen); //--- setzen wir die Farbe für den Körper der bärischen Kerze PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
Die Dokumentation wurde aktualisiert.
class CFoo final { //--- Body der Klasse }; class CBar : public CFoo { //--- Body der Klasse };Bei einem Versuch der Vererbung von einer Struktur mit dem final Modifier, wie im Beispiel oben, gibt der Compiler einen Fehler aus:
class CFoo { void virtual func(int x) const { } };Weiter wird die Methode in der abgeleiteten Klasse neu definiert:
class CBar : public CFoo { void func(short x) { } };Aber durch einen Fehler ändert sich der Typ des Arguments von int zu short. In diesem Fall wird die Methode nicht mehr überschrieben, sondern überladen. In einigen Situationen kann der Compiler entsprechend dem Algorithmus der überladenen Funktion eine in der Basisklasse definierte Methode statt einer überschriebenen auswählen.
class CBar : public CFoo { void func(short x) override { } };Wenn die Signatur beim Überschreiben geändert wird, kann der Compiler keine Methode mit der gleichen Signatur in der Basisklasse finden und gibt einen Kompilierungsfehler aus:
class CFoo { void virtual func(int x) final { } }; class CBar : public CFoo { void func(int) { } };Bei einem Versuch der Vererbung von einer Struktur mit dem final Modifier, wie im Beispiel oben, gibt der Compiler einen Fehler aus:
class CFoo { }; class CBar { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { void *vptr[2]; vptr[0]=new CFoo(); vptr[1]=new CBar(); //--- for(int i=0;i<ArraySize(vptr);i++) { if(dynamic_cast<CFoo *>(vptr[i])!=NULL) Print("CFoo * object at index ",i); if(dynamic_cast<CBar *>(vptr[i])!=NULL) Print("CBar * object at index ",i); } CFoo *fptr=vptr[1]; // Führt zu einem Fehler bei der Umwandlung der Pointer, vptr[1] ist kein Objekt von CFoo } //+------------------------------------------------------------------+
string text="Hello"; ushort symb=text[0]; // Gibt den Code des Symbols 'H' zurück
Die Dokumentation wurde aktualisiert.
Tester: Berechnung der Kommission als Zinssatz per annum beim Testen korrigiert.
Tester: Neuberechnung und Anzeige des Kontostandes auf dem Chart korrigiert, der im Laufe des Testens erstellt wird.
Nach zwei Monaten nach dem öffentlichen Testen wurde die Webversion der Multi-Asset-Plattform MetaTrader 5 offiziell herausgegeben. Mit der Webplattform MetaTrader 4 können Sie von jedem Browser aus in jedem Betriebssystem handeln. Die Plattform soll nicht auf Ihren PC installiert werden, Sie brauchen nur einen Internetanschluss und einen Browser.
Die Benutzerfreundlichkeit und die Cross-Plattform-Eigenschaft des Webterminals wird durch die Vorteile der MetaTrader 5 Desktopversion ergänzt. Dazu gehören die Schnelligkeit, die Multi-Asset-Feature und erweiterte Handelsfunktionen. Das Hauptmerkmal dieser Version stellt die Markttiefe dar, die es erlaubt Markt- und Pending Orders mit einem Klick zu platzieren.
Darüber hinaus erlaubt es die Webplattform, technische Analyse
durchzuführen und Handelsoperationen genauso wie in der Desktop-Version
auszuführen. Die Anwendung bietet:
Nun ist es einfach, SSL-Zertifikate aus der Desktop-Plattform in die mobile zu übertragen. iTunes wird nicht mehr benötigt.
Konten in MetaTrader 5 kann man zusätzlich durch ein Zertifikat geschützt werden, ohne dessen man sich nicht in das Konto einloggen kann. Wenn das Zertifikat in der Desktop-Plattform erstellt wurde, muss es für den Zugriff auf das Konto in der mobilen Plattform übertragen werden.
Um ein Zertifikat zu übertragen, öffnen Sie die Desktop-Version von MetaTrader 5, klicken Sie mit der rechten Maustaste auf dem Konto im Navigator-Fenster und wählen Sie "Übertragen" aus. Geben Sie ein Passwort für den Schutz des Zertifikats ein, öffnen Sie das mobile Terminal und loggen Sie sich ein. Es wird Ihnen angeboten, das Zertifikat zu importieren.
Darüber hinaus gibt es einen Migrations-Dialog für die Konten, die aus dem MetaTrader 4 übertragen wurden. Wenn Ihr Konto auf die Plattform der fünften Generation übertragen wurde, werden Sie herzlichst begrüßt und über Features der Plattform informiert. Anschließend wird es Ihnen angeboten, Ihr Passwort zu ändern.
Früher |
Jetzt |
|
---|---|---|
Auslösung | Alle Arten von Pending Orders und SL/TP Orders zu Bid/Ask |
Limit Orders zu Bid/Ask Stop, Stop Limit und SL/TP Orders zu Last |
Ausführung | Alle Arten von Pending Orders und SL/TP Orders zum Preis, der in der Order angegeben wurde |
Alle Arten von Pending Orders und SL/TP Orders zu Bid/Ask Marktkursen zum Zeitpunkt der Auslösung |
Schauen wir uns das Symbol Si-6.16 als Beispiel an. Bei aktuellen
Kursen Bid=72570, Ask=72572, Last=72552 wurde eine Buy Stop Order mit
der Auslösung zum Preis 72580 platziert. Im Price Stream haben wir neue
aktuelle Kurse bekommen:
Als Auslöser von Stop Orders dient für Börseninstrumente der
Last-Kurs. Aus diesem Grund aktiviert Last=72580 im Stream die Buy Stop
Order. Früher hätte man den Kurs 72580 für die Ausführung dieser Order
verwendet. Das war aber falsch, denn es gibt keinen Ask=72580 für die
Ausführung des Buy-Trades auf dem Markt.
Verbesserungen anhand Crash-Logs.
Auf vielfachen Wunsch von Tradern wurde ein Webversion der Handelsplattform MetaTrader 5 entwickelt. Die Benutzerfreundlichkeit und die Cross-Plattform-Eigenschaft des Webterminals wird durch die Vorteile der MetaTrader 5 Desktopversion ergänzt. Dazu gehören die Schnelligkeit, die Multi-Asset-Feature und erweiterte Handelsfunktionen.
Die Webplattform MetaTrader 5 ist nun auf der Webseite der MQL5.community verfügbar können Sie aus jedem Browser in jedem Betriebssystem handeln. Dafür brauchen sie nur einen Internetanschluss.
Die Betaversion bietet den Tradern: