Fehler, Irrtümer, Fragen - Seite 2971

 

Ist dies das richtige Verhalten für die statischen Variablen?

Bei einem Wechsel des Zeitrahmens oder einer Änderung der Parameter ändert sich ihr Wert nicht:

int OnInit()
  {
   static int my_int=4444;
   Print(my_int);
   my_int=9999;
   return(INIT_SUCCEEDED);
  }

Das Ergebnis nach dem Start des EA und dem Wechsel des Zeitrahmens:

2021.02.24 16:23:27.999 Test1 (EURUSD,M1)       4444
2021.02.24 16:23:29.913 Test1 (EURUSD,M5)       9999
Statische Variablen

Dies ist aus der Hilfe:

Statische Variablen existieren zum Zeitpunkt der Programmausführung und werden einmalig vor dem Aufruf der spezialisierten Funktion OnInit() initialisiert.

Also einmal vor jedem Aufruf von OnInit() oder einmal vor dem Start, obwohl die Neuinitialisierung eher einem zweiten Durchlauf gleichkommt.

Passiert das auch im Testgerät?

Auch globale Variablen verhalten sich auf diese Weise.

 

Beim Wechsel des Zeitrahmens wird der Expert Advisor nicht neu gestartet, sondern arbeitet weiter.

https://www.mql5.com/ru/docs/runtime/running

При смене символа или таймфрейма графика, к которому эксперт прикреплен, выгрузка и загрузка эксперта не производится. При этом последовательно вызываются обработчики OnDeinit() на старом символе/таймфрейме и OnInit() на новом символе/таймфрейме (если они есть), значения глобальных переменных и статических переменных не сбрасываются. Все события, поступившие для эксперта до завершения инициализации (функции OnInit()), пропускаются.


Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Выполнение программ - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ilyas:

Beim Wechsel des Zeitrahmens wird der Expert Advisor nicht neu gestartet, sondern arbeitet weiter.

https://www.mql5.com/ru/docs/runtime/running

Mir ist eine Besonderheit aufgefallen, die im MetaTrader bisher nicht vorhanden war. Wenn ich einen Expert Advisor aus einem Diagramm lösche (mit dem Befehl im Kontextmenü), wird das Diagramm danach geschlossen. Zuvor wurde das Diagramm nach dem Löschen eines Expert Advisors nicht geschlossen.

 
Mihail Matkovskij:

Mir ist eine Besonderheit aufgefallen, die im MetaTrader bisher nicht vorhanden war. Wenn ich einen Expert Advisor aus einem Diagramm entferne (mit dem Befehl im Kontextmenü), wird das Diagramm danach geschlossen. Zuvor wurde das Diagramm nach dem Löschen eines Expert Advisors nicht geschlossen.

Es kann im EA selbst programmiert werden, prüfen Sie mit einem anderen EA...

 

unter Win7 werden beim Debuggen von historischen Daten die zur Beobachtung hinzugefügten Variablen nicht angezeigt. beim Debuggen von realen Daten funktioniert alles.ich habe in den Einstellungen des Meta-Editors Parameter für das Debuggenangegeben.

es stellt sich heraus, dass beim Hinzufügen von Variablen, diese nicht sofort im Fenster angezeigt werden, sondern erst beim nächsten Start des Debugging erscheinen, aber ihre Werte sind bereits <nicht implementiert>. bitte sagen Sie mir, was ich einstellen muss, damit das Debugging funktioniert

 
Vladimir Pastushak:

Es kann im EA selbst programmiert sein, überprüfen Sie es mit einem anderen EA...

In der Tat, warf die Standard-EA auf dem Diagramm. Gelöscht wurde sie ohne Probleme. Versucht, ChartClose in den Quellen meines Expert Advisors zu finden. Ich habe sie nirgends gefunden. Es war von Anfang an nicht meine Absicht, das Diagramm zu schließen, wenn ein Expert Advisor gelöscht wird. Ich verwende Standard-Benutzeroberflächenelemente, wie CAppDialog. Vielleicht wurde das Schließen der Tabelle irgendwo in den Standardklassen geschrieben...

 
Mihail Matkovskij:

In der Tat, warf ein Standard-EA auf dem Diagramm. Gelöscht wurde sie ohne Probleme. Versucht, ChartClose in den Quellen meines Expert Advisors zu finden. Ich habe sie nirgends gefunden. Meine ursprüngliche Idee war, das Diagramm nicht zu schließen, wenn ich einen Expert Advisor lösche. Ich verwende Standard-Benutzeroberflächenelemente, wie CAppDialog. Vielleicht wurde der Abschluss der Tabelle irgendwo in den Standardklassen geschrieben...

Ich habe es gefunden. Die Klasse CAppDialog hat ein CChart-Feld m_chart.

class CAppDialog : public CDialog
  {
...
protected:
   CChart            m_chart;               // object to access chart

WennCAppDialog gelöscht wird (sein Abkömmling wird in meinem Expert Advisor verwendet), wirdder m_chart destructor wahrscheinlich das Diagramm schließen.

//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CChart::~CChart(void)
  {
   if(m_chart_id!=-1)
      Close();
  }
//+------------------------------------------------------------------+
//| Chart close                                                      |
//+------------------------------------------------------------------+
void CChart::Close(void)
  {
   if(m_chart_id!=-1)
     {
      ChartClose(m_chart_id);
      m_chart_id=-1;
     }
  }

Leider kann dieser Vorgang nicht mit dem Debugger verfolgt werden. Aber wenn man sich den Quellcodevon CAppDialog undCChart ansieht, wird alles klar. Ich möchte die Entwickler darauf aufmerksam machen.

 
Mihail Matkovskij:

Ich habe es gefunden. Die Klasse CAppDialog hat das Feld CChart m_chart.

WennCAppDialog entfernt wird (sein Abkömmling,CDialog, wird in meinem Expert Advisor verwendet), schließtder Destruktor m_chart wahrscheinlich das Diagramm.

Leider kann dieser Vorgang nicht mit dem Debugger verfolgt werden. Aber wenn man sich den Quellcodevon CAppDialog undCChart ansieht, wird alles klar. Ich möchte die Entwickler darauf aufmerksam machen.

void CAppDialog::Destroy(const int reason)

Loslösen von der Karte, unter anderem.

 

Können Sie mir sagen, warum SignalBaseTotal() immer 1000 zurückgibt.

Der Signaldienst mql5.com verfügt über mehr als tausend ausgestrahlte Signale, aber das Terminal hat nur eintausend Signale zur Verfügung. Und warum?

Kann es sein, dass es eine Reihe von Signalen in diesen Tausend gibt, während sie in einer Stunde anders sein können?
Документация по MQL5: Управление сигналами / SignalBaseTotal
Документация по MQL5: Управление сигналами / SignalBaseTotal
  • www.mql5.com
SignalBaseTotal - Управление сигналами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alain Verleyen :

Fehler bei abgeleiteter Struktur, bei der beim Speichern/Laden aus Datei keine neuen Daten hinzugefügt werden.

@Ilyas Werden Sie das beheben?