Diskussion zum Artikel "Wie schnell ein Bedienfeld zu einem Indikator und Expert Advisor hinzugefügt werden kann"

 

Neuer Artikel Wie schnell ein Bedienfeld zu einem Indikator und Expert Advisor hinzugefügt werden kann :

Möchten Sie zu Ihrem EA oder einem Indikator ein grafisches Feld für eine einfache und schnelle Kontrolle hinzufügen, aber Sie wissen nicht, wie Sie dies tun können? In diesem Artikel werde ich Ihnen Schritt um Schritt zeigen, wie man ein einfaches Feld zu Ihrem MQL4 / MQL5-Programm hinzufügen kann.

Ihr MQL4 / MQL5-Programm - ein Indikator oder EA - kann einer der besten sein und vollständig seine Aufgaben erfüllen. Aber Sie können es immer etwas verbessern. In der Regel muss der Benutzer in 99% für Änderungen der Eingangsparameter des Programms die Einstellungen zugreifen. Wollen Sie es umgehen?

Sie können dies tun, indem Sie Ihr eigenes Bedienfeld auf der Basis der Klassen von Standardbibliothek erstellen. Dadurch kann man die Einstellungen ändern, ohne das Programm neu zu starten. Außerdem wird eine solche Vorgehensweise das Programm attraktiver machen und macht einen Unterschied unter anderen. Die Beispiele von grafischen Feldern können Sie im Markt ansehen.

In diesem Artikel werde ich Ihnen zeigen, wie man ein einfaches Feld zu Ihrem MQL4 / MQL5-Programm hinzufügen kann. Sie erfahren, wie man das Programm gestalten kann, dass er Eingangsparameter lesen wird und auf Änderungen in ihren Werten reagieren wird.

Autor: Karputov Vladimir

 
Ziemlich nützlich. Danke!
 
Vielen Dank für diesen Artikel! Wie kann ich die Hintergrund- und Rahmenfarbe des Panels selbst ändern? Ich habe es nicht in den Standardklassen gefunden.
 
Maxim Dmitrievsky:
Vielen Dank für diesen Artikel! Wie kann ich die Hintergrund- und Rahmenfarbe des Panels selbst ändern? Ich habe es in den Standardklassen nicht gefunden.
Wenn man den einfachen Weg benutzt, geht es nicht. Ich habe nicht nach einem komplizierten Weg gesucht.
 
Maxim Dmitrievsky:
Vielen Dank für diesen Artikel! Wie kann ich die Hintergrund- und Rahmenfarbe des Panels selbst ändern? Ich habe es nicht in den Standardklassen gefunden.
Überschreiben Sie Defines in Defines.mqh.
 
Andrey Khatimlianskii:
Definieren Sie Defines in Defines.mqh neu.
  1. Bei der nächsten Aktualisierung wird die Standardbibliothek wiederhergestellt und die Datei Defines.mqh wird entsprechend wiederhergestellt.
  2. Es ist nicht sinnvoll, die Standardbibliothek zu bearbeiten.
 
Karputov Vladimir:
  1. Beim nächsten Update wird die Standardbibliothek wiederhergestellt - entsprechend wird auch die Datei Defines.mqh wiederhergestellt.
  2. Es ist nicht gut, die Standardbibliothek zu bearbeiten.
Ich habe nicht vorgeschlagen, sie zu bearbeiten. Sie sollten sie neu definieren, nachdem Sie diese Datei eingebunden haben, aber bevor Sie das Panel erstellen.
 
Andrey Khatimlianskii:
Ich habe nicht vorgeschlagen, sie zu bearbeiten. Sie müssen es überschreiben, nachdem Sie diese Datei aktiviert haben, aber bevor Sie das Panel erstellen.
Könnten Sie mir bitte anhand eines einfachen Beispiels erklären, wie man das macht, ich bin nicht sehr gut in oop. Ich habe die Farben der Defines in der Bibliothek selbst geändert - die Farbe des Panels ändert sich nicht.
 
Maxim Dmitrievsky:
Bitte sagen Sie mir anhand eines einfachen Beispiels, wie das geht, ich kenne mich mit oop nicht aus. Ich habe die Farben der Defines in der Bibliothek selbst geändert - die Farbe des Panels ändert sich nicht.

Nachdem Sie die Datei geändert haben, kompilieren Sie den EA neu, dann sollte es funktionieren. Und vergessen Sie nicht, ein Backup zu machen, um Ihre Variante nach dem Update wiederherzustellen.

Das Überschreiben wird mit #undef und #define durchgeführt. Aber man muss sie an der richtigen Stelle einfügen ;)

 
Andrey Khatimlianskii:

Überschreiben wird mit #undef und #define gemacht. Aber man muss sie an der richtigen Stelle einsetzen ;)

Das einzige Detail, das den Unterschied zwischen ... von ... .
 
Andrey Khatimlianskii:

Nachdem Sie die Datei geändert haben, kompilieren Sie den EA neu, dann sollte er funktionieren. Vergessen Sie nicht, eine Sicherungskopie zu erstellen, um Ihre Variante nach der Aktualisierung wiederherzustellen.

Überschreiben wird mit #undef und #define gemacht. Aber man muss sie an der richtigen Stelle einfügen ;)

Nun, so habe ich es gemacht, nichts funktioniert. Das Panel ist immer noch weiß wie vorher

Der Compiler schreibt Macro redifinition, d.h. es ist eine Art von Overriding....

//+------------------------------------------------------------------+
//|MyPanel.mqh |
//|Copyright © 2013, DeltaTrader |
//| http://www.deltatrader.com.br | 
//+------------------------------------------------------------------+
#property copyright     "DeltaTrader © 2013"
#property link          "www.deltatrader.com.br"
#property version       "1.000"
#property description   "Test Panel"
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Enthält|
//+------------------------------------------------------------------+
#include <Controls\Dialog.mqh>
#include <Controls\Label.mqh>
#include <Controls\Panel.mqh>
#include <Controls\Edit.mqh>
#include <Controls\Defines.mqh>

#define  CONTROLS_DIALOG_COLOR_BORDER_LIGHT  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_BORDER_DARK  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_BG            C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CAPTION_TEXT  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CLIENT_BG     C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CLIENT_BORDER C'0x00,0x00,0xFF'

//+------------------------------------------------------------------+
//| Globale Parameter|
//+------------------------------------------------------------------+
int      panelXX     =  200;
int      panelYY     =  200;
int      panelWidth  =  600;
int      panelHeight =  400;

CAppDialog m_panel;

//--- Gebotsobjekte
CPanel m_bidcolor;
CLabel m_bidlabel;
 

//--- Objekte fragen
CPanel m_askcolor;
CLabel m_asklabel;
CEdit m_edit;
//+------------------------------------------------------------------+
//| On Init|
//+------------------------------------------------------------------+
int OnInit() 
  {
//--- Panel erstellen
   m_panel.Create(0,"blablabla",0,panelXX,panelYY,panelWidth,panelHeight);
//--- Gebotsaufkleber und Farben
   m_bidcolor.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
   m_bidcolor.ColorBackground(clrYellow);
   m_panel.Add(m_bidcolor);
   
   m_bidlabel.Create(0,"Bid Text",0,5,5,0,0);
   m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
   m_bidlabel.Color(clrBlue);
   m_panel.Add(m_bidlabel);
//--- Etiketten und Farben fragen
   m_askcolor.Create(0,"Ask Background Color",0,1,1,panelWidth-30,30);
   m_askcolor.ColorBackground(clrAqua);
   m_panel.Add(m_askcolor);
   
   m_asklabel.Create(0,"Ask Text",0,5,30,0,0);
   m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
   m_asklabel.Color(clrRed);
   m_panel.Add(m_asklabel);
   
   m_edit.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
   m_panel.Add(m_edit);
//--- Bedienfeld ausführen
   m_panel.Run();
   return(0);
  }
//+------------------------------------------------------------------+
//| Bei DeInit|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Panel zerstören
   m_panel.Destroy(reason);
//--- Alle Objekte löschen
   ObjectsDeleteAll(0,0);
  }
//+------------------------------------------------------------------+
//| Am Berechnen|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//--- Ein sehr einfaches Gebotsetikett
   m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
//--- Ein sehr einfaches Fragezeichen
   m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| On Chart Event|
//+------------------------------------------------------------------+

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Verschieben Sie das Panel mit der Maus
   m_panel.ChartEvent(id,lparam,dparam,sparam);
//--- 
  }
//+------------------------------------------------------------------+