Grafische GUI-Bibliothek für MetaTrader: Installations- und Bedienungsanleitung
✔️ GUI-Grafikbibliothek MT4©: https://www.mql5.com/en/market/product/206760
✔️ GUI-Grafikbibliothek MT5©: https://www.mql5.com/en/market/product/206761
✔️ Vollständige Dokumentation, die Elementgalerie und das Tool „Bild zu Code“⁵: https://www.betasoft.dev/gui-graphic-library
Eine Positionstabelle, ein Orderzettel und ein Live-Chart.
Die GUI-Grafikbibliothek bietet Ihren Expert Advisors und Indikatoren eine vollständige Benutzeroberfläche: Fenster, Tabs, Menüs, Tabellen, Diagramme, Auswahlfelder, Dialoge und Trading-Widgets. Alles wird auf einer einzigen Arbeitsfläche dargestellt, derselbe Code funktioniert in MetaTrader 4 und MetaTrader 5, und die gesamte API umfasst 15 Funktionen.
Diese Anleitung führt Sie vom Download bis zu Ihrem ersten funktionierenden Bedienfeld und anschließend zu den am häufigsten verwendeten Aufgaben. Jedes Codebeispiel verwendet ausschließlich die öffentliche Include-Datei, sodass Sie es problemlos in Ihr eigenes Programm einfügen können.
Ein kleiner Teil der 78 Elemente: Schaltflächen, Eingabefelder, Schieberegler und Registerkarten.
1. Bevor Sie beginnen
- MetaTrader 4 oder MetaTrader 5 unter Windows. Schriftarten und Symbole passen sich der Windows-Anzeigeskalierung an (100, 125, 150 und 200 Prozent).
- Mit MetaEditor können Sie die Demos und Ihre eigenen Programme kompilieren.
- In den Terminaloptionen ist nichts zu erlauben: Die Bibliothek verwendet keine DLL, stellt keine Webanfragen und verwendet keine globalen Terminalvariablen.
- Die Versionen MT4 und MT5 sind separate Produkte. Installieren Sie diejenige, die zu Ihrem Terminal passt.
2. Installation
- Im Terminal wählen Sie „Datei“ und dann „Datenordner öffnen“.
- Öffnen Sie den Ordner MQL5 (MetaTrader 5) oder den Ordner MQL4 (MetaTrader 4).
- Kopieren Sie jede Datei in den Ordner, der in der obigen Tabelle angezeigt wird: Libraries, Include, Experts und Indicators.
- Öffnen Sie jede Demo im MetaEditor und drücken Sie F7. Das Ergebnis sollte 0 Fehler und 0 Warnungen lauten.
- Zurück im Terminal, aktualisieren Sie den Navigator (Rechtsklick, Aktualisieren), damit die neuen Programme angezeigt werden.
Die Ordner sollten folgendermaßen aussehen:
MQL5/
Include/GUI_Graphic_Library.mqh
Libraries/GUI_Graphic_Library.ex5
Experts/GUI_Graphic_Library_FullDemo.mq5
GUI_Graphic_Library_ElementTests.mq5
Indicators/GUI_Graphic_Library_IndicatorWindow.mq5
GUI_Graphic_Library_IndicatorChart.mq5
MQL4/ the same files with .mq4 and .ex4
Benennen Sie die Bibliotheksdatei nicht um. Die Header-Datei lädt sie unter diesem Namen.
Prüfungen nach der Installation
| Überprüfen | Wo |
|---|---|
| Die .ex5-Datei (oder .ex4-Datei) befindet sich in den Bibliotheken. | Datenordner |
| Die .mqh-Datei befindet sich im Include-Ordner. | Datenordner |
| Die Demo lässt sich ohne Fehler kompilieren. | MetaEditor |
| Die Demo zeigt ein Fenster im Diagramm. | Diagramm |
| Im Reiter „Experten“ werden keine Zeilen mit der Aufschrift „Nicht unterstützt“ angezeigt. | Terminal, Toolbox |
Was befindet sich in GUI_Graphic_Library.mqh?
Die Include-Datei ist bewusst klein gehalten. Oberhalb des Import-Blocks werden die Enumerationen (Objekttypen, Eigenschaften, Ereignisse, Themes und Icons) deklariert. Der darunterliegende Import-Block lädt die kompilierte Bibliothek und listet ihre 15 Funktionen auf. MetaTrader 5 lädt die .ex5-Datei, MetaTrader 4 die .ex4-Datei – die Auswahl erfolgt durch den Compiler. Die Datei wird eingebunden, nicht bearbeitet.
#ifdef __MQL5__ #import "\\Market\\GUI_Graphic_Library.ex5" #else #import "\\Market\\GUI_Graphic_Library.ex4" #endif string Gui_Version(); bool Gui_Create( const long chart= 0 , const string name= "GUI_Graphic_Library" , const int subwin= 0 ); void Gui_Destroy(); void Gui_ChartEvent( const int id, const long lparam, const double dparam, const string sparam); void Gui_Timer(); void Gui_Update( const bool force= false ); bool Gui_NextEvent(ENUM_GUI_EVENT &event, int &sender, long &lparam, double &dparam, string &sparam); int Gui_Add( const ENUM_GUI_OBJECT type, const int parent, const string name, const string text, const int x, const int y, const int w, const int h); int Gui_Set( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE , const double c= EMPTY_VALUE , const double d= EMPTY_VALUE ); string Gui_Get( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE ); double Gui_GetNum( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE ); int Gui_SetArray( const int id, const ENUM_GUI_PROP prop, const double &values[], const double a= EMPTY_VALUE ); int Gui_AddImage( const string name, const uint &argb[], const int w, const int h); int Gui_Find( const string name); void Gui_BringToFront(); #import
Die 15 Funktionen in der Reihenfolge ihres Erscheinens:
| Funktion | Was es tut | Wo du es nennst |
|---|---|---|
| Gui_Version | Gibt die Bibliotheksversion als Text zurück. | Überall |
| Gui_Create | Startet die grafische Benutzeroberfläche (GUI) auf einem Chart. Übergeben Sie 0 für den aktuellen Chart, einen Namen für Ihr Programm und die Nummer des Unterfensters für Indikatoren. Gibt „true“ zurück, wenn die Ausführung erfolgreich war. | OnInit |
| Gui_Destroy | Entfernt die grafische Benutzeroberfläche und alles, was sie gezeichnet hat. | OnDeinit |
| Gui_ChartEvent | Übergibt das Diagrammereignis (Maus, Tastatur, Klicks) an die Bibliothek. | OnChartEvent |
| Gui_Timer | Startet die Timer der Bibliothek: Animationen, Benachrichtigungen, Zähler. | OnTimer |
| GUI-Update | Übermalt, was sich verändert hat. Übermalt alles, was sich verändert hat. | Ende jedes Handlers |
| Gui_NextEvent | Nimmt das nächste Ereignis aus der Warteschlange (Klick, Änderung, Dialogergebnis, Handelsanfrage). Gibt „false“ zurück, wenn die Warteschlange leer ist. | Ereignisschleife |
| Gui_Add | Erstellt ein Element und gibt dessen ID zurück. Sie geben den Typ, das übergeordnete Element, einen Namen, den Text sowie x, y, Breite und Höhe an. | OnInit |
| Gui_Set | Ändert eine Eigenschaft oder führt eine Aktion auf einem Element aus. Gibt -1 zurück und gibt eine entsprechende Meldung aus, falls das Element die Aktion nicht unterstützt. | Überall |
| Gui_Get | Liest eine Eigenschaft als Text. | Überall |
| Gui_GetNum | Liest eine Eigenschaft als Zahl. | Überall |
| Gui_SetArray | Sendet eine Liste von Zahlen an ein Element, zum Beispiel eine ganze Diagrammreihe. | Überall |
| Gui_AddImage | Erfasst ein Bild aus einem Array von ARGB-Pixeln, sodass es von Elementen angezeigt werden kann. Das Tool „Bild zu Code“ auf der Website erstellt dieses Array aus einer PNG-Datei. | OnInit |
| Gui_Find | Findet eine Element-ID anhand ihres Namens. | Überall |
| Gui_BringToFront | Verschiebt die GUI über die Diagrammobjekte, die Sie anschließend gezeichnet haben. | Nachdem Sie Diagrammobjekte erstellt haben |
Das ist die gesamte Benutzeroberfläche. Alles andere in diesem Leitfaden ist eine Kombination dieser 15 Aufrufe.
3. Führen Sie die vollständige Demo aus.
- Öffnen Sie ein Diagramm. Ein großes Fenster, beispielsweise 1280 x 720 Pixel oder größer, zeigt die meisten Informationen an.
- Ziehen Sie GUI_Graphic_Library_FullDemo aus dem Navigator auf das Diagramm.
- Nutzen Sie die Registerkarten oben: Startseite, Anwendungsfälle, Schaltflächen, Eingaben, Auswahlfelder, Daten, Diagramme, Layout, Feedback, Handel und Einstellungen.
Die Demoversion sendet nur dann Aufträge, wenn Sie die Option „InpLiveTrading“ auf „true“ setzen. Lassen Sie diese Option auf einem Live-Konto deaktiviert. Wenn Sie das Hauptfenster schließen, wird der Expert Advisor automatisch entfernt.
Verwenden Sie GUI_Graphic_Library_ElementTests, wenn Sie jeweils nur ein Element betrachten möchten: Klicken Sie dazu auf eine Gruppe in ihrem Auswahlfenster.
Ein Dashboard, das ausschließlich aus Elementen der Bibliothek erstellt wurde.
4. Ihr erstes Panel
Dies ist ein vollständiger Expert Advisor: ein Fenster mit einem Feld zur Auswahl der Positionsgröße, einem Kaufbutton und einer Statuszeile. Er führt keine Transaktionen durch, sondern zeigt lediglich eine Meldung an.
#include <GUI_Graphic_Library.mqh> int wMain, spLots, btnBuy, lblInfo; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit () { if (!Gui_Create( 0 , "MyPanel" )) return INIT_FAILED ; // 0 = this chart Gui_Set( 0 , GUI_PROP_THEME, "" , GUI_THEME_DARK); wMain = Gui_Add(GUI_OBJ_WINDOW, 0 , "wMain" , "My panel" , 20 , 40 , 300 , 170 ); Gui_Set(wMain, GUI_PROP_THEME_BUTTON, "" , true ); // sun / moon button Gui_Set(wMain, GUI_PROP_MAIN_WINDOW, "" , true ); // close asks to remove the program spLots = Gui_Add(GUI_OBJ_SPIN, wMain, "spLots" , "" , 10 , 10 , 280 , 30 ); Gui_Set(spLots, GUI_PROP_RANGE, "" , 0.01 , 50 , 0.01 , 2 ); // min, max, step, digits Gui_Set(spLots, GUI_PROP_VALUE, "" , 0.10 ); Gui_Set(spLots, GUI_PROP_SUFFIX, "lots" ); btnBuy = Gui_Add(GUI_OBJ_BUTTON, wMain, "btnBuy" , "BUY" , 10 , 50 , 280 , 40 ); Gui_Set(btnBuy, GUI_PROP_STYLE, "" , GUI_BUTTON_SUCCESS); Gui_Set(btnBuy, GUI_PROP_ICON, "" , GUI_ICON_ARROW_UP); lblInfo = Gui_Add(GUI_OBJ_LABEL, wMain, "lblInfo" , "Ready" , 10 , 100 , 280 , 20 ); Gui_Set(lblInfo, GUI_PROP_DIM, "" , true ); Gui_Set( 0 , GUI_PROP_REDRAW); return INIT_SUCCEEDED ; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ProcessEvents() { ENUM_GUI_EVENT ev; int sender; long l; double d; string s; while (Gui_NextEvent(ev, sender, l, d, s)) if (ev == GUI_EVENT_CLICK && sender == btnBuy) { double lots = Gui_GetNum(spLots, GUI_PROP_VALUE); Gui_Set(lblInfo, GUI_PROP_TEXT, "Buy " + DoubleToString (lots, 2 ) + " lots" ); Gui_Set( 0 , GUI_PROP_TOAST, "Buy|" + DoubleToString (lots, 2 ) + " lots" , GUI_NOTICE_SUCCESS, 3000 ); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit ( const int r) { Gui_Destroy(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTimer () { Gui_Timer(); ProcessEvents(); Gui_Update(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent ( const int id, const long &l, const double &d, const string &s) { Gui_ChartEvent(id, l, d, s); ProcessEvents(); Gui_Update(); }
Das Muster ändert sich nie:
- OnInit erstellt die grafische Benutzeroberfläche und die Elemente.
- OnChartEvent und OnTimer übergeben Ereignisse an die Bibliothek, lesen die Warteschlange und rufen Gui_Update auf.
- OnDeinit zerstört die grafische Benutzeroberfläche.
5. Wie die Bibliothek denkt
- IDs. Gui_Add gibt eine ganzzahlige ID zurück. Speichern Sie die benötigten IDs oder suchen Sie später mit Gui_Find("name") nach einer passenden ID. ID 0 ist die GUI selbst: Design, Benachrichtigungen, Dialoge, Zähler.
- Elternelemente. Jedes Element wird einem Elternelement, einem Fenster oder einem Container hinzugefügt. Fenster, Menüs und Preisschilder verwenden das Elternelement 0. Bei einem Tab ist das Elternelement das Tab-Element, und die zurückgegebene ID ist die Seite, der Sie die Elemente hinzufügen.
- Eigenschaften. `Gui_Set(id, property, text, a, b, c, d)` ändert eine Eigenschaft oder führt eine Aktion aus. Der Text wird im Argument `text` angegeben; Zahlen, Farben und Aufzählungen in `a` bis `d`. `Gui_Get` liest den Text und `Gui_GetNum` die Zahlen.
- Ereignisse. Die Bibliothek speichert die Benutzeraktionen in einer Warteschlange. Lesen Sie die Warteschlange mit Gui_NextEvent.
- Die Koordinaten sind in Pixeln bei 100-prozentiger Skalierung angegeben. Die Bibliothek multipliziert sie automatisch mit dem Windows-Anzeigemaßstab.
Wenn Sie eine Eigenschaft übergeben, die ein Element nicht unterstützt, tritt kein Fehler auf: Der Aufruf gibt -1 zurück und es wird eine Zeile in das Expertenprotokoll geschrieben.
6. Die Aufgaben, die Sie am häufigsten erledigen werden
Lesen Sie, was der Benutzer eingegeben oder ausgewählt hat.
string name=Gui_Get(edName,GUI_PROP_TEXT); double lots=Gui_GetNum(spLots,GUI_PROP_VALUE); int tab =( int )Gui_GetNum(tabs,GUI_PROP_SELECTED);
Registerkarten
int t=Gui_Add(GUI_OBJ_TABS,win, "tabs" , "" , 10 , 10 , 600 , 300 ); int pOrders =Gui_Add(GUI_OBJ_TAB,t, "" , "Orders" , 0 , 0 , 0 , 0 ); // returns the page int pHistory=Gui_Add(GUI_OBJ_TAB,t, "" , "History" , 0 , 0 , 0 , 0 ); Gui_Add(GUI_OBJ_BUTTON,pOrders, "b1" , "Close all" , 10 , 10 , 120 , 30 );
Tabellen
int tb=Gui_Add(GUI_OBJ_TABLE,page, "tbl" , "" , 10 , 10 , 600 , 300 ); Gui_Set(tb,GUI_PROP_ADD_COLUMN, "Symbol" , 120 ,GUI_ALIGN_LEFT); Gui_Set(tb,GUI_PROP_ADD_COLUMN, "Strength" , 130 ,GUI_ALIGN_LEFT,GUI_COL_PROGRESS); Gui_Set(tb,GUI_PROP_ADD_BUTTON_COLUMN, "Action" , 100 ,GUI_BUTTON_PRIMARY); Gui_Set(tb,GUI_PROP_ADD_ROW, "EURUSD|64|Trade" ); Gui_Set(tb,GUI_PROP_SORT, "" , 0 , true );
Ein Klick auf eine Schaltflächenzelle sendet GUI_EVENT_CELL_BUTTON mit der Zeile in lparam und der Spalte in dparam.
Diagramme
int ch=Gui_Add(GUI_OBJ_LINECHART,page, "chart" , "Price" , 10 , 10 , 500 , 260 ); int ln=Gui_Set(ch,GUI_PROP_ADD_SERIES, "Close" , clrDodgerBlue ); // returns the series index double closes[]; CopyClose ( _Symbol , PERIOD_H1 , 0 , 100 ,closes); Gui_SetArray(ch,GUI_PROP_SERIES,closes,ln); // a whole series at once int cd=Gui_Add(GUI_OBJ_CANDLECHART,page, "cd" , _Symbol , 10 , 280 , 500 , 260 ); Gui_Set(cd,GUI_PROP_LOAD_BARS, _Symbol , 80 ); Gui_Set(cd,GUI_PROP_ADD_MA, "" , 20 , clrDodgerBlue ); Gui_Set(cd,GUI_PROP_ADD_BANDS, "" , 20 , 2.0 );
Dialoge und Trinksprüche
enum { CMD_CLOSE_ALL= 500 }; Gui_Set( 0 ,GUI_PROP_CONFIRM, "Close all|Close every position?|Close|Cancel" ,CMD_CLOSE_ALL); // later, in the event loop: if (ev==GUI_EVENT_DIALOG && Gui_GetNum(sender,GUI_PROP_CMD)==CMD_CLOSE_ALL && l== 0 ) CloseAll(); // l = button index, -1 = cancelled Gui_Set( 0 ,GUI_PROP_TOAST, "Order|Filled" ,GUI_NOTICE_SUCCESS, 3000 );
Themen und Farben
Gui_Set( 0 ,GUI_PROP_THEME, "" ,GUI_THEME_MIDNIGHT); // DARK, LIGHT, MIDNIGHT, HIGHCONTRAST, SOFT Gui_Set( 0 ,GUI_PROP_ACCENT, "" , clrOrange ); Gui_Set( 0 ,GUI_PROP_RADIUS, "" , 10 );
Fenster und Werte merken
Gui_Set( 0 ,GUI_PROP_AUTO_LAYOUT, "" , true ); // load now, save when the GUI is destroyed Gui_Set( 0 ,GUI_PROP_LOAD_VALUES); // in OnInit Gui_Set( 0 ,GUI_PROP_SAVE_VALUES); // in OnDeinit
Beide verwenden kleine Textdateien. Es werden keine globalen Terminalvariablen verwendet.
Tu jede Sekunde etwas.
Gui_Set( 0 ,GUI_PROP_COUNTER, "refresh" , 1000 , true ); // name, ms, repeat // in OnTimer: if (Gui_GetNum( 0 ,GUI_PROP_COUNTER_DONE, "refresh" )!= 0 ) RefreshNumbers();
7. Ein Handelspanel mit eigener Bestellfunktion
Der Orderzettel, das Positionspanel und der Risikorechner lesen das Konto und das Symbol aus und zeigen Ihnen dann entsprechende Ereignisse an. Sie senden niemals Aufträge. Sie entscheiden, was passiert, wenn der Nutzer auf „Kaufen“ oder „Verkaufen“ klickt.
#include <GUI_Graphic_Library.mqh> #ifdef __MQL5__ #include <Trade\Trade.mqh> CTrade g_trade; #endif input bool InpLiveTrading = false ; // send real orders int g_ticket = 0 ; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit () { if (!Gui_Create( 0 , "GUI_TradePanel" )) return INIT_FAILED ; int w = Gui_Add(GUI_OBJ_WINDOW, 0 , "w" , "Trade" , 20 , 40 , 360 , 260 ); Gui_Set(w, GUI_PROP_MAIN_WINDOW, "" , true ); g_ticket = Gui_Add(GUI_OBJ_ORDERTICKET, w, "ticket" , _Symbol , 10 , 10 , 340 , 212 ); Gui_Set(g_ticket, GUI_PROP_LOTS, "" , 0.10 ); Gui_Set(g_ticket, GUI_PROP_STOP_POINTS, "" , 300 ); Gui_Set(g_ticket, GUI_PROP_TP_POINTS, "" , 600 ); Gui_Set(g_ticket, GUI_PROP_SHOW_LINES, "" , true ); // SL and TP lines on the chart Gui_Set( 0 , GUI_PROP_CLEAR_EVENTS); return INIT_SUCCEEDED ; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void MyTrade( const bool buy, const double lots, const double sl, const double tp) { if (!InpLiveTrading) { Print ( "Trading is off. Would " , buy ? "buy " : "sell " , lots, " lots" ); return ; } #ifdef __MQL5__ if (buy) g_trade.Buy(lots, _Symbol , 0.0 , sl, tp); else g_trade.Sell(lots, _Symbol , 0.0 , sl, tp); #else if (buy) OrderSend ( _Symbol , OP_BUY, lots, Ask, 3 , sl, tp, "GUI" , 0 , 0 , clrGreen ); else OrderSend ( _Symbol , OP_SELL, lots, Bid, 3 , sl, tp, "GUI" , 0 , 0 , clrRed ); #endif } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ProcessEvents() { ENUM_GUI_EVENT ev; int sender; long l; double d; string s; while (Gui_NextEvent(ev, sender, l, d, s)) if (ev == GUI_EVENT_TRADE) // l: 0 buy, 1 sell d: lots s: "sl|tp" prices { string p[]; StringSplit (s, '|' , p); double sl = ( ArraySize (p) > 0 ) ? StringToDouble (p[ 0 ]) : 0.0 ; double tp = ( ArraySize (p) > 1 ) ? StringToDouble (p[ 1 ]) : 0.0 ; MyTrade(l == 0 , d, sl, tp); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit ( const int r) { Gui_Destroy(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTimer () { Gui_Timer(); ProcessEvents(); Gui_Update(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent ( const int id, const long &l, const double &d, const string &s) { Gui_ChartEvent(id, l, d, s); ProcessEvents(); Gui_Update(); }
Testen Sie es zunächst auf einem Demokonto. Bevor Sie echte Aufträge erteilen, überprüfen Sie außerdem die Positionsgröße im Hinblick auf das Minimum, Maximum und die Schrittweite des jeweiligen Symbols sowie den Stop-Abstand im Vergleich zum Stop-Level des Brokers.
Positionen funktionieren auf die gleiche Weise: GUI_OBJ_POSITIONS hinzufügen und dann auf GUI_EVENT_POSITION reagieren (lparam ist das Ticket, dparam ist 1 für Schließen und 2 für Ändern).
8. Verwendung in einem Indikator
Ein Indikator kann die GUI in einem eigenen Unterfenster darstellen. Übergeben Sie die Nummer dieses Fensters an Gui_Create:
#property indicator_separate_window int OnInit () { int sub= ChartWindowFind (); Gui_Create( 0 , "GUI_MyIndicator" ,sub); // add windows and controls as usual return INIT_SUCCEEDED ; }
Um aus einem Indikator Daten in den Kurschart einzuzeichnen, verwenden Sie das Unterfenster 0. Die beiden Indikator-Demos sind vollständige Beispiele. Jedes Programm und jeder Chart verfügt über eine eigene grafische Benutzeroberfläche (GUI). Geben Sie daher jedem Programm einen eigenen GUI-Namen.
9. MetaTrader 4 und MetaTrader 5
| Thema | MetaTrader 4 | MetaTrader 5 |
|---|---|---|
| Bibliotheksdatei | .ex4 | .ex5 |
| Kontextmenü | Linke Maustaste lange gedrückt halten oder Strg + Klick | Rechtsklick |
| Mausrad | Wird nicht vom Terminal gesendet. Verwenden Sie die Scrollleisten. | Werke |
| Markttiefe | Füge die Level selbst hinzu | Liest das Marktbuch |
| Wirtschaftskalender | Fügen Sie die Zeilen selbst hinzu | Lasten vom Terminal |
| Tippen | Eingebaute US-Schlüsselkarte | Jedes Tastaturlayout funktioniert |
10. Wenn etwas nicht funktioniert
| Problem | Was zu tun |
|---|---|
| In der Tabelle ist nichts aufgeführt. | Prüfen Sie, ob Gui_Create true zurückgegeben hat, und lesen Sie die letzten Zeilen der Registerkarte „Experten“. |
| Der Compiler kann die Datei GUI_Graphic_Library.mqh nicht öffnen. | Die Include-Datei befindet sich nicht im Include-Ordner desselben Datenordners wie Ihr Programm. |
| Das Programm kann die Bibliothek zur Laufzeit nicht laden. | Die Datei .ex5 oder .ex4 fehlt in den Bibliotheken, oder ihr Name wurde geändert. |
| Ein im Code geänderter Wert wird nicht angezeigt | Rufen Sie Gui_Update() am Ende Ihres Handlers auf. |
| Auf der Registerkarte „Experten“ wird angezeigt, dass eine Eigenschaft nicht unterstützt wird. | Diese Eigenschaft existiert für dieses Element nicht. Bitte konsultieren Sie die API-Referenz. |
| Zwei Programme kämpfen um einen Platz in der Chartliste. | Vergeben Sie jedem Element einen eigenen Namen in Gui_Create. |
| Die Diagrammlinien decken die Benutzeroberfläche ab. | Rufen Sie Gui_BringToFront() auf, nachdem Sie Diagrammobjekte erstellt haben. |
| Der Text ist zu klein oder zu groß | Setzen Sie Gui_Set(0,GUI_PROP_SCALE,"",1.5), oder starten Sie das Terminal nach dem Ändern der Windows-Skalierung neu. |
| Sie möchten sehen, was die Bibliothek macht. | Aktivieren Sie Gui_Set(0,GUI_PROP_DEBUG,"",true) für das Debug-Overlay. |
11. Tipps
- Rufen Sie Gui_Update() am Ende jedes Handlers auf. Dadurch werden nur die geänderten Elemente neu gezeichnet.
- Ausgeblendete Tab-Seiten und minimierte Fenster verursachen keine Neuzeichnung, daher ist deren Aktualisierung über einen Timer kostengünstig.
- Verwenden Sie GUI_PROP_MAX_FPS, um die Bildrate zu begrenzen, wenn Sie viele Diagramme ausführen.
- Verwenden Sie GUI_PROP_CLEAR_EVENTS am Ende von OnInit, um Ereignisse zu löschen, die während des Aufbaus des Panels in die Warteschlange gestellt wurden.
- Verwenden Sie das Tool „Image to Code“ auf der Website, um ein PNG-Logo oder -Symbol in ein Array für Gui_AddImage umzuwandeln.
- Neue Enum-Werte werden erst am Ende hinzugefügt, sodass Programme, die mit einer älteren Include-Datei erstellt wurden, auch nach einem Update weiterhin funktionieren. Ersetzen Sie die Bibliotheksdatei und die Include-Datei gemeinsam.
12. Wohin als Nächstes?
- Elementgalerie, Installation, Anleitung, API-Referenz, Bild-zu-Code-Umwandlung und Hilfe: https://www.betasoft.dev/gui-graphic-library
- MetaTrader 5 Version: https://www.mql5.com/en/market/product/206761
- MetaTrader 4 Version: https://www.mql5.com/en/market/product/206760
Wir freuen uns über Ihre Meinung. Bei Fragen oder Verbesserungsvorschlägen schreiben Sie bitte in die Produktkommentare oder senden Sie mir eine Nachricht über MQL5.com.





