Grafische GUI-Bibliothek für MetaTrader: Installations- und Bedienungsanleitung

Grafische GUI-Bibliothek für MetaTrader: Installations- und Bedienungsanleitung

10 November 2026, 16:41
Omar Alkassar
0
4

✔️ 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

  1. Im Terminal wählen Sie „Datei“ und dann „Datenordner öffnen“.
  2. Öffnen Sie den Ordner MQL5 (MetaTrader 5) oder den Ordner MQL4 (MetaTrader 4).
  3. Kopieren Sie jede Datei in den Ordner, der in der obigen Tabelle angezeigt wird: Libraries, Include, Experts und Indicators.
  4. Öffnen Sie jede Demo im MetaEditor und drücken Sie F7. Das Ergebnis sollte 0 Fehler und 0 Warnungen lauten.
  5. 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.

  1. Öffnen Sie ein Diagramm. Ein großes Fenster, beispielsweise 1280 x 720 Pixel oder größer, zeigt die meisten Informationen an.
  2. Ziehen Sie GUI_Graphic_Library_FullDemo aus dem Navigator auf das Diagramm.
  3. 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:

  1. OnInit erstellt die grafische Benutzeroberfläche und die Elemente.
  2. OnChartEvent und OnTimer übergeben Ereignisse an die Bibliothek, lesen die Warteschlange und rufen Gui_Update auf.
  3. 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?

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.




Dateien: