void func(int &arr[ ][ ][ ][ ]) { }
struct MyStruct { string Array[]; }; void OnStart() { MyStruct a1,a2; ArrayResize(a1.Array,3); ArrayResize(a2.Array,1); a1=a2; }Früher war die Array-Größe von "a1" nach dem Funktionsaufruf gleich 3. Jetzt ist die Größe 1.
Die Dokumentation wurde aktualisiert.
ENUM_FP_CLASS MathClassify( double value // reelle Zahl );Die Enumeration verfügt über folgende Werte:
if(MathClassify(value)>FP_ZERO) { Print("Der Wert ist keine gültige Zahle"); }
Wir haben Optimierungskriterien
überarbeitet, die zwei Variablen enthalten, von denen eine der Saldo
(Balance) ist. Jetzt berücksichtigen die Kriterien nur noch die zweite
Variable und ignorieren den Saldo. Die neuen Optimierungskriterien sind
einfacher zu analysieren.
import sys chart_symbol='unknown' chart_tf=1 if len(sys.argv) == 3: chart_symbol, chart_tf = sys.argv[1:3]; print("Hello world from", chart_symbol, chart_tf) >> Hello world from T.NYSE 15
Suchergebnisse aus externen Ressourcen werden im Fenster der MetaEditor-Toolbox angezeigt:
lang DatenbankImport( int database, // Datenbank-Handle empfangen in DatabaseOpen const string table, // Tabellenname für das Einfügen der Daten const string filename, // Dateiname zum Importieren der Daten uint flags, // Kombination der Flags const string separator, // Trennzeichen der Daten ulong skip_rows, // Anzahl der ersten zu überspringenden Zeilen const string skip_comments // Reihe der Zeichen, die Kommentare kennzeichnen );
long DatabaseExport( int database, // Datenbank-Handle empfangen in DatabaseOpen const string table_or_sql, // Tabellenname oder SQL-Anfrage const string filename, // Name der CSV-Datei für den Export uint flags, // Kombination der Flags const string separator // Trennzeichen der Daten in der CSV-Datei );
long DatabasePrint( int database, // Datenbank-Handle empfangen in DatabaseOpen const string table_or_sql, // Tabellenname oder SQL-Anfrage uint flags // Kombination der Flags );
int FileSelectDialog( string caption, // Fenstertitel string initial_dir, // Anfangsverzeichnis string filter, // Erweiterungsfilter uint flags, // Kombination der Flags string& filenames[], // Array mit den Dateinamen string default_filename // Standard-Dateiname );Die neue Funktion ermöglicht die effiziente Benutzerinteraktion mit dem MQL5-Programm.
#property optimization_chart_mode "3d,InpX,InpY"Die Eigenschaft ermöglicht die Bestimmung des Chart-Typs, der sich am Ende der Optimierung öffnet, sowie der Programmparameter für die X- und Y-Achse.
double MathArctan2( double y // die Y-Koordinate des Punktes double x // die X-Koordinate des Punktes );
Übersetzung der Benutzeroberfläche in Punjabi (Indien) hinzugefügt.
Die Dokumentation wurde aktualisiert.
Fehlerbehebungen auf Basis von Absturzberichten.
Die Aktualisierung wird über das Live-Update-System verfügbar sein.
class CFoo { public: struct Item { int x; }; }; //+------------------------------------------------------------------+ class CBar { public: struct Item { int x; }; }; CBar::Item item; // korrekte Deklaration der Struktur item der Klasse CBar Item item; // falsche DeklarationHinzugefügt wurde die Unterstützung von Namensräumen, die mehr Möglichkeiten bei der Verwendung von Drittanbieter-Code/Bibliotheken in MQL5-Anwendungen bietet.
#define PrintFunctionName() Print(__FUNCTION__) namespace NS { void func() { PrintFunctionName(); } struct C { int x; C() { PrintFunctionName(); }; }; } struct C { int x; C() { PrintFunctionName(); }; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void func() { PrintFunctionName(); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { func(); NS::func(); C c; NS::C ac; }Nach der Ausführung wird das folgende Ergebnis ausgegeben:
class A { void operator=(const A &)=delete; // prohibit object copying operator }; class B : public A { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { A a1,a2; B b1,b2; a1=a2; b1=b2; }In diesem Beispiel wirft der Compiler Fehler für "a1=a2" und "b1=b2" aus:
input group "Signal" input int ExtBBPeriod =20; // Bollinger Bands period input double ExtBBDeviation =2.0; // deviation input ENUM_TIMEFRAMES ExtSignalTF =PERIOD_M15; // BB timeframe input group "Trend" input int ExtMAPeriod =13; // Moving Average period input ENUM_TIMEFRAMES ExtTrendTF =PERIOD_M15; // MA timeframe input group "ExitRules" input bool ExtUseSL =true; // use StopLoss input int Ext_SL_Points =50; // StopLoss in points input bool ExtUseTP =false; // use TakeProfit input int Ext_TP_Points =100; // TakeProfit in points input bool ExtUseTS =true; // use Trailing Stop input int Ext_TS_Points =30; // Trailing Stop in points input group "MoneyManagement" sinput double ExtInitialLot =0.1; // initial lot value input bool ExtUseAutoLot =true; // automatic lot calculation input group "Auxiliary" sinput int ExtMagicNumber =123456; // EA Magic Number sinput bool ExtDebugMessage=true; // print debug messagesWenn ein solcher Expert Advisor im Strategietester gestartet wird, können Eingabeparameterblöcke durch Doppelklick auf den Gruppennamen ein- oder ausgeblendet werden, und alle Parameter innerhalb einer Gruppe können mit einem einzigen Kontrollkästchen zur Optimierung ausgewählt werden.
#import "lib.dll" int func(); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int func() { return(0); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print( func() ); }In früheren Versionen wurde der folgende Fehler während der Kompilierung zurückgegeben:
'func' - ambiguous call to overloaded function with the same parameters could be one of 2 function(s) int func() int func()Anstelle des Fehlers wird nun standardmäßig die integrierte MQL5-Funktion mit höherer Priorität verwendet. Die importierte Funktion kann durch explizite Angabe des Namensraumes aufgerufen werden:
void OnStart() { Print( lib::func() ); }
if(condition) { //--- }
// vorher ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop); // nachher ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);
// vorher if(x==1&y!=2) { int a=0; } // nachher if(x == 1 & y != 2) { int a = 0; }
Die Benutzeroberfläche wurde zusätzlich in 18 weitere Sprachen übersetzt.
Die Plattformoberfläche ist nun in 50 Sprachen verfügbar, die von mehr als 4 Milliarden Menschen gesprochen werden.
Um Ihre Sprache für die Benutzeroberfläche einzustellen, navigieren Sie zum Menü "Ansicht \ Sprache" oben im Terminal.
Die Dokumentation wurde aktualisiert.
Fehlerbehebungen auf Basis von Absturzberichten.
Die Aktualisierung wird über das Live-Update-System verfügbar sein.
Python ist eine moderne High-Level-Programmiersprache zur Entwicklung von Skripten und Anwendungen. Es enthält mehrere Bibliotheken für maschinelles Lernen, Prozessautomatisierung sowie Datenanalyse und Visualisierung.
Das MetaTrader-Paket für Python wurde für das effiziente und schnelle Abrufen von Austauschdaten über das Interprozessorkommunikation direkt vom MetaTrader 5 Terminal aus entwickelt. Die so erhaltenen Daten können für statistische Berechnungen und maschinelles Lernen weiterverwendet werden.
Verbindung
Funktionen
bool TesterDeposit( double money // Höhe der Kontogutschrift );
Die Dokumentation wurde aktualisiert.
Die Aktualisierung wird über das LiveUpdate-System verfügbar sein.
bool CalendarCountryById( const long country_id, // Länder-ID MqlCalendarCountry& country // Länderbeschreibung );CalendarEventById — Abrufen der Ereignisbeschreibung auf Grund des Identifikators.
bool CalendarEventById( const long event_id, // Ereignis-ID MqlCalendarEvent& event // Ereignisbeschreibung );CalendarValueById — Abrufen der Wertbeschreibung des Ereignisses auf Grund des Identifikators.
bool CalendarValueById( const long value_id, // Werte-ID MqlCalendarValue& value // Wertbeschreibung );CalendarEventByCountry — Abrufen eines Arrays der verfügbaren Ereignisse eines Landes.
bool CalendarEventByCountry( string country_code, // Länder-Code MqlCalendarEvent& events[] // Array der Ereignisse );CalendarEventByCurrency — Abrufen eines Arrays der verfügbaren Ereignisse, die eine Währung beeinflussen.
bool CalendarEventByCurrency( string currency, // Währung MqlCalendarEvent& events[] // Array der Ereignisse );CalendarValueHistoryByEvent — Abrufen eines Arrays mit den Werten einer angegebenen Zeitspanne, nach dem Ereignis-Identifikator.
bool CalendarValueHistoryByEvent( ulong event_id, // Ereignis-ID MqlCalendarValue& values[], // Array der Werte datetime datetime_from, // Anfangszeitpunkt der Zeitspanne datetime datetime_to=0 // Endzeitpunkt der Zeitspanne );CalendarValueHistory — Abrufen eines Arrays von Werten der angegebenen Zeitspanne mit allen Ereignissen, gefiltert nach Land und/oder Währung.
bool CalendarValueHistory( MqlCalendarValue& values[], // Array der Werte datetime datetime_from, // Anfangszeitpunkt der Zeitspanne datetime datetime_to=0, // Endzeitpunkt der Zeitspanne string country_code=NULL, // Länder-Code string currency=NULL // Währung );CalendarValueLastByEvent — Abrufen eines Array der letzten Ereigniswerte nach Identifikator. Diese Funktion ermöglicht das Abrufen der Werte, die seit der letzten Anforderung erschienen sind. Für diesen Vorgang wird zusätzlich der In/Out-Parameter "change_id" verwendet.
bool CalendarValueHistory( ulong event_id, // Ereignis-ID ulong& change_id, // letzte Änderungs-ID des Kalenders MqlCalendarValue& values[] // Array der Werte );CalendarValueLast — Abrufen eines Arrays der letzten Werte aller Ereignisse, gefiltert nach Land und/oder Währung. Diese Funktion ermöglicht das Abrufen der Werte, die seit der letzten Anforderung erschienen sind. Ähnlich wie bei CalendarValueLastByEvent wird die Eigenschaft "change_id" für die Anforderung verwendet.
bool CalendarValueHistory( ulong event_id, // Ereignis-ID ulong& change_id, // letzte Änderungs-ID des Kalenders MqlCalendarValue& values[], // Array der Werte string country_code=NULL, // Länder-Code string currency=NULL // Währung );
struct MqlCalendarCountry { ulong id; // Länder-ID in ISO 3166-1 string name; // Text-Name des Landes string code; // Code-Name des Landes in ISO 3166-1 alpha-2 string currency; // Währungscode des Landes string currency_symbol; // Symbol/Zeichen der Landeswährung string url_name; // Ländername, der in der URL von mql5.com verwendet wird };MqlCalendarEvent — Ereignisbeschreibung
struct MqlCalendarEvent { ulong id; // Ereignis-ID ENUM_CALENDAR_EVENT_TYPE type; // Ereignis-Typ ENUM_CALENDAR_EVENT_SECTOR sector; // Sektor, zu dem das Ereignis gehört ENUM_CALENDAR_EVENT_FREQUENCY frequency; // Häufigkeit der Ereignisveröffentlichung ENUM_CALENDAR_EVENT_TIMEMODE time_mode; // Zeitmodus der Ereignisveröffentlichung ulong country_id; // Länder-ID ENUM_CALENDAR_EVENT_UNIT unit; // Einheit der Ereigniswerte ENUM_CALENDAR_EVENT_IMPORTANCE importance; // Wichtigkeit des Ereignisses ENUM_CALENDAR_EVENT_MULTIPLIER multiplier; // Multiplikator der Wichtigkeit des Ereignisses uint digits; // Dezimalstellen des Ereigniswertes string source_url; // URL der Quelle string event_code; // Ereignis-Code string name; // Text-Name des Ereignisses in der Sprache des Terminals };MqlCalendarValue — Wertbeschreibung des Ereignisses.
struct MqlCalendarValue { ulong id; // Werte-ID ulong event_id; // Ereignis-ID datetime time; // Datum und Zeit des Ereignisses datetime period; // Zeitperiode, für den das Ereignis veröffentlicht wird int revision; // Revision des veröffentlichten Indikators in Relation zur Berichtsperiode long actual_value; // aktueller Ereigniswert long prev_value; // vorheriger Ereigniswert long revised_prev_value; // revidierter, vorheriger Ereigniswert long forecast_value; // prognostizierter Ereigniswert ENUM_CALENDAR_EVENT_IMPACRT impact_type; // mögliche Auswirkung auf den Währungskurs };
enum ENUM_CALENDAR_EVENT_FREQUENCY { CALENDAR_FREQUENCY_NONE =0, // nicht bekannt CALENDAR_FREQUENCY_WEEK =1, // wöchentlich CALENDAR_FREQUENCY_MONTH =2, // monatlich CALENDAR_FREQUENCY_QUARTER =3, // vierteljährlich CALENDAR_FREQUENCY_YEAR =4, // jährlich CALENDAR_FREQUENCY_DAY =5, // täglich }; enum ENUM_CALENDAR_EVENT_TYPE { CALENDAR_TYPE_EVENT =0, // Ereignis (Sitzung, Rede etc.) CALENDAR_TYPE_INDICATOR =1, // Indikator CALENDAR_TYPE_HOLIDAY =2, // Feiertag }; enum ENUM_CALENDAR_EVENT_SECTOR { CALENDAR_SECTOR_NONE =0, // kein Sektor bestimmt CALENDAR_SECTOR_MARKET =1, // Markt CALENDAR_SECTOR_GDP =2, // BIP CALENDAR_SECTOR_JOBS =3, // Arbeitsstellen CALENDAR_SECTOR_PRICES =4, // Preise CALENDAR_SECTOR_MONEY =5, // Geld CALENDAR_SECTOR_TRADE =6, // Handel CALENDAR_SECTOR_GOVERNMENT =7, // Regierung CALENDAR_SECTOR_BUSINESS =8, // Geschäft CALENDAR_SECTOR_CONSUMER =9, // Verbraucher CALENDAR_SECTOR_HOUSING =10, // Wohnen CALENDAR_SECTOR_TAXES =11, // Steuern CALENDAR_SECTOR_HOLIDAYS =12, // Feiertage }; enum ENUM_CALENDAR_EVENT_IMPORTANCE { CALENDAR_IMPORTANCE_NONE =0, // nicht bestimmt CALENDAR_IMPORTANCE_LOW =1, // niedrig CALENDAR_IMPORTANCE_MODERATE =2, // mittel CALENDAR_IMPORTANCE_HIGH =3, // hoch }; enum ENUM_CALENDAR_EVENT_UNIT { CALENDAR_UNIT_NONE =0, // ohne Einheit CALENDAR_UNIT_PERCENT =1, // Prozent CALENDAR_UNIT_CURRENCY =2, // Landeswährung CALENDAR_UNIT_HOUR =3, // Anzahl der Stunden CALENDAR_UNIT_JOB =4, // Anzahl der Arbeitsstellen CALENDAR_UNIT_RIG =5, // Anzahl der Förderanlagen CALENDAR_UNIT_USD =6, // US-Dollar CALENDAR_UNIT_PEOPLE =7, // Anzahl der Leute CALENDAR_UNIT_MORTGAGE =8, // Anzahl der Hypotheken CALENDAR_UNIT_VOTE =9, // Anzahl der Stimmen CALENDAR_UNIT_BARREL =10, // Anzahl der Barrels CALENDAR_UNIT_CUBICFEET =11, // Volumen in Kubikfuß CALENDAR_UNIT_POSITION =12, // Anzahl der Arbeitsstellen CALENDAR_UNIT_BUILDING =13 // Anzahl der Gebäude }; enum ENUM_CALENDAR_EVENT_MULTIPLIER { CALENDAR_MULTIPLIER_NONE =0, // kein Multiplikator CALENDAR_MULTIPLIER_THOUSANDS =1, // Tausend CALENDAR_MULTIPLIER_MILLIONS =2, // Million CALENDAR_MULTIPLIER_BILLIONS =3, // Milliarde CALENDAR_MULTIPLIER_TRILLIONS =4, // Billion }; enum ENUM_CALENDAR_EVENT_IMPACRT { CALENDAR_IMPACT_NA =0, // nicht vorhanden CALENDAR_IMPACT_POSITIVE =1, // positive CALENDAR_IMPACT_NEGATIVE =2, // negative }; enum ENUM_CALENDAR_EVENT_TIMEMODE { CALENDAR_TIMEMODE_DATETIME =0, // die exakte Veröffentlichungszeit der Quelle CALENDAR_TIMEMODE_DATE =1, // Das Ereignis dauert den ganzen Tag CALENDAR_TIMEMODE_NOTIME =2, // die Quelle veröffentlicht keinen Ereigniszeitpunkt CALENDAR_TIMEMODE_TENTATIVE =3, // die Quelle veröffentlicht nur das Datum und keinen genauen Zeitpunkt der Veröffentlichung };
ERR_CALENDAR_MORE_DATA =5400, // das Array ist für alle Ergebnisse zu klein (Werte, die hineinpassen, werden zurückgegeben) ERR_CALENDAR_TIMEOUT =5401, // Timeout für das Warten auf die Antwort der Kalenderdaten ERR_CALENDAR_NO_DATA =5402, // Daten nicht gefunden
bool CharArrayToStruct( void& struct_object, // Struktur const uchar& char_array[], // Array uint start_pos=0 // Startposition im Array );StructToCharArray weist einer POD-Struktur einem Array vom Typ uchar zu.
bool StructToCharArray( const void& struct_object, // Struktur uchar& char_array[], // Array uint start_pos=0 // Startposition im Array );
ushort MathSwap(ushort value); uint MathSwap(uint value); ulong MathSwap(ulong value);
bool StringReserve( string& string_var, // Zeichenkette uint new_capacity // Puffergröße für die Zeichenkette );StringSetLength legt die Anzahl der Buchstaben einer Zeichenkette fest.
bool StringSetLength( string& string_var, // Zeichenkette uint new_length // neue Länge der Zeichenkette );
bool ArrayRemove( void& array[], // Array irgendeines Typs uint start, // Startindex für das Entfernen uint count=WHOLE_ARRAY // Anzahl der Elemente );ArrayInsert fügt in das Empfängerarray ab dem angegebenen Index eine bestimmte Anzahl von Elementen aus einem Quellarray ein.
bool ArrayInsert( void& dst_array[], // Zielarray const void& src_array[], // Quellarray uint dst_start, // Index des Zielarrays, ab dem eingefügt werden soll uint src_start=0, // Index im Quellarray, ab dem aus dem Quellarray kopiert werden soll uint count=WHOLE_ARRAY // Anzahl der einzufügenden Elemente );ArrayReverse kehrt in einem Array eine angegebene Anzahl von Elemente ab dem angegebenen Index um.
bool ArrayReverse( void& array[], // Array irgendeines Typs uint start=0, // Startindex der Umkehrung uint count=WHOLE_ARRAY // Anzahl der Elemente );
int CustomBookAdd( const string symbol, // Symbolname const MqlBookInfo& books[] // Array der Beschreibungen der Elemente der Markttiefe (DOM) uint count=WHOLE_ARRAY // Anzahl der zu verwendenden Elemente );
bool CustomSymbolCreate( const string symbol_name, // Name des nutzerdefiniertes Symbol const string symbol_path="", // Name der Gruppe, in der das Symbol erzeugt wird const string symbol_origin=NULL // Symbolname, auf dessen Basis das nutzerdefinierte Symbole erstellt wird );Der Name des Symbols, dessen Eigenschaften für das nutzerdefinierte Symbol kopiert werden sollen, wird im Parameter "symbol_origin" angegeben.
Die Übersetzung der Benutzeroberfläche ins Kroatische wurde hinzugefügt.
Die Dokumentation wurde aktualisiert.
#import "TestLib.dll" //+------------------------------------------------------------------+ //| Startfunktion eines Skripts | //+------------------------------------------------------------------+ void OnStart() { int x=41; TestClass::Inc(x); Print(x); }Der C#-Code der Funktion Inc() aus TestClass schaut wie folgt aus:
public class TestClass { public static void Inc(ref int x) { x++; } }Als Ergebnis der Ausführung gibt das Skript den Wert 42 zurück.
struct MqlTick
{
datetime time; // Aktualisierungszeit des letzten Preises
double bid; // Aktueller Bid-Preis
double ask; // Aktueller Ask-Preis
double last; // Aktueller Preis der letzten Transaktion (Last)
ulong volume; // Volumen des letzten aktuellen Preises
long time_msc; // Letzte Preisaktualisierung in Millisekunden
uint flags; // Tick-Flags
double volume_real; // Volumen des aktuelle Preises (Last) mit höherer Genauigkeit
};
struct MqlBookInfo { ENUM_BOOK_TYPE type; // Order-Typ der Enumeration ENUM_BOOK_TYPE double price; // Preis long volume; // Volumen double volume_real; // Volumen mit höherer Genauigkeit };
//+------------------------------------------------------------------+ //| Standard-Packing | //+------------------------------------------------------------------+ struct A { char a; int b; }; //+------------------------------------------------------------------+ //| besonderes Packing | //+------------------------------------------------------------------+ struct B pack(4) { char a; int b; }; //+------------------------------------------------------------------+ //| Startfunktion eines Skripts | //+------------------------------------------------------------------+ void OnStart() { Print("sizeof(A)=",sizeof(A)); Print("sizeof(B)=",sizeof(B)); } //+------------------------------------------------------------------+Ergebnis:
sizeof(A)=5 sizeof(B)=8Weiter Informationen über die Angleichung innerhalb von Strukturen in MSDN.
enum Main { PRICE_CLOSE_, PRICE_OPEN_ }; input Main Inp=PRICE_CLOSE; //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void OnStart() { }zeigt der Compiler eine Warnung:
class X { }; void f(int) { } template<typename T> void a(T*) { new T(2); } // vorher hat der Compiler hier einen Fehler ausgeworfen template<typename T> void a() { f(0); } void OnInit() { a<X>(); }
Aktualisierte Dokumentation.