Diskussion zum Artikel "Die Erstellung eines Helfers im manuellen Handeln" - Seite 6

 
zhixiong Li:
Hallo Dmitriy, kann dieses Handelspanel im MT4 History-Testing-Modus verwendet werden? Es scheint, dass die Funktion OnChartEvent() nicht ausgeführt wird, wenn man einen History-Backtest durchführt? Würden Sie mir bitte zeigen, wie ich das Problem lösen kann? Vielen Dank, Robison.
Ja, im Testmodus generieren MT4 und MT5 keine Ereignisse, um die Funktion OnChartEvent auszuführen. Aber wenn Sie einige Psnel im Testmodus von MT4 verwenden möchten, müssen Sie eine Funktion erstellen, um den Zustand der Schaltflächen bei jedem Tick zu überprüfen. Aber diese Methode funktioniert nicht in MT5.
Beste Regstds,
Dmitriy.
 

Hallo. In Ihrem Artikel habe ich nicht verstanden, wie die "Mobilität" des Panels implementiert ist, wie man das Panel mit der Maus bewegen und minimieren. Bitte erklären Sie das. Und sagen Sie mir, ob es möglich ist, das gleiche in mql4 zu implementieren.

 
Aleksandr Teleguz:

Hallo. In Ihrem Artikel habe ich nicht verstanden, wie die "Mobilität" des Panels implementiert ist, wie man das Panel mit der Maus bewegen und minimieren. Bitte erklären Sie das. Und sagen Sie mir, ob es möglich ist, das gleiche in mql4 zu implementieren.

Guten Tag,
In meinem Artikel habe ich beim Schreiben des Panels Standardbibliotheken verwendet. Die von Ihnen genannten Funktionen sind darin bereits implementiert. In mql4 gibt es ähnliche Bibliotheken mit ähnlichen Funktionen.

Mit freundlichen Grüßen,
Dmitry.

 

Dmitry, hallo! Ich mache ein Panel auf MT4, ich nahm Ihre Erfahrung als Grundlage, aber hier ist das Problem, beim Umschalten TFs, etwa das 3. Mal das Panel beginnt zu duplizieren und auseinander bewegen. Im MT5 ist in Ihrem Beispiel alles in Ordnung, im MT4 habe ich ein Problem. Vielleicht wissen Sie, wo man graben?)

 
Eugeny Kotovschikov:

Dmitry, hallo! Ich mache ein Panel auf MT4, ich nahm Ihre Erfahrung als Grundlage, aber hier ist das Problem, beim Umschalten TFs, etwa das 3. Mal das Panel beginnt zu duplizieren und auseinander bewegen. Im MT5 ist in Ihrem Beispiel alles in Ordnung, im MT4 habe ich ein Problem. Vielleicht wissen Sie, wo man graben kann?)


Guten Tag, Eugene.
Sie müssen die Funktion der erzwungenen Entfernung des Panels aus dem Chart in OnDeinit schreiben. Die Sache ist die, dass MT4 beim Wechsel des Charts nicht das Schließen des Programms und den Aufruf der OnDeinit-Funktion initiiert. Nach der ersten Deinitialisierung in der CAppDialog-Klasse wird der Grund der Deinitialisierung in die private Variable m_deinit_reason geschrieben . Aber wenn der Zeitrahmen geändert wird, löscht MT4 die Klasse nicht aus dem Speicher. Und bei späteren Versuchen, die Klasse zu löschen, liest die Klasse den Wert der Variable aus, und da sie nicht leer ist, tut sie nichts.

//+------------------------------------------------------------------+
//| Deinitialisierungsfunktion des Anwendungsdialogs |
//+------------------------------------------------------------------+
void CAppDialog::Destroy(const int reason)
  {
//--- schon zerstört?
   if(m_deinit_reason!=WRONG_VALUE)
      return;
//---

Eine einfachere und wahrscheinlich korrektere Variante wäre es, die Panel-Klasse durch einen Verweis auf die Klasse mit "*" zu deklarieren. Bei dieser Variante müssen Sie kleine Änderungen im Code vornehmen

CTradePanel *TradePanel;
//+------------------------------------------------------------------+
//| Experteninitialisierungsfunktion|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   // Init-Klasse CTradePanel
   TradePanel=new CTradePanel();
   if(CheckPointer(TradePanel)==POINTER_INVALID)
      return INIT_FAILED;
   // Creat Trade Panel
   if(!TradePanel.Create(ChartID(),"Trade Panel"))
     {
      return (INIT_FAILED);
     }
   // Run Trade Panel
   TradePanel.Run();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(CheckPointer(TradePanel)!=POINTER_INVALID)
     {
      TradePanel.Destroy(reason);
      delete TradePanel;
     }
  }

Bei dieser Variante wird die Klasse trade panel bei der Deinitialisierung zwangsweise gelöscht und anschließend neu erstellt.

Mit freundlichen Grüßen,
Dmitry.

 
Dmitriy Gizlyk:

Guten Tag, Eugene.
Ich brauche, um die Funktion der erzwungenen Entfernung des Panels aus dem Diagramm in OnDeinit zu schreiben. Die Sache ist die, dass MT4 beim Ändern des Charts nicht das Schließen des Programms und den Aufruf der OnDeinit-Funktion initiiert. Nach der ersten Deinitialisierung in der CAppDialog-Klasse wird der Grund der Deinitialisierung in die private Variable m_deinit_reason geschrieben . Aber wenn der Zeitrahmen geändert wird, löscht MT4 die Klasse nicht aus dem Speicher. Und bei späteren Versuchen, die Klasse zu löschen, liest die Klasse den Wert der Variable aus, und da sie nicht leer ist, tut sie nichts.

Eine einfachere und wahrscheinlich korrektere Variante wäre es, die Panel-Klasse durch einen Verweis auf die Klasse mit "*" zu deklarieren. Bei dieser Variante müssen Sie kleine Änderungen im Code vornehmen

Bei dieser Variante wird die Klasse trade panel bei der Deinitialisierung zwangsweise gelöscht und anschließend neu erstellt.

Mit freundlichen Grüßen,
Dmitry.


Dmitry, vielen Dank, die zweite Option hat funktioniert. )))).

 
Dmitriy Gizlyk:
Wie kann ich ein Panel erstellen, das der Funktion zum manuellen Platzieren einer Order beim Testen historischer Daten in mt4 ähnelt?

Historische Backtesting ist nicht möglich, mit Tasten zu bedienen.

 
Yupeng Xiao:

Historisches Backtesting ist mit den Schaltflächen nicht möglich.


Der MT4-Tester erzeugt keine Ereignisse, aber die Schaltflächen selbst funktionieren. Daher können Sie beim MT4-Tester den Status der Schaltflächen bei jedem Tick überprüfen.

 

Hallo Dimitrij

sehr schöne Arbeit. Könnten Sie mir erklären, wie ich die Hintergrundfarbe des Panels ändern kann? Ich weiß, dass ich die Makrodefinition in den Defines.mqh-Dateien bearbeiten kann, aber ich frage mich, ob es eine Möglichkeit gibt, dies zu tun, ohne diese Datei zu bearbeiten.

Vielen Dank im Voraus.


Savio

 

Sehr gute Idee! Sehr einfach zu bedienen, es erleichtert mt5 für Anfänger. Danke