Fehler, Irrtümer, Fragen - Seite 591

 
alexvd:

Lassen Sie uns zu servicedesk gehen.

Bitte klären Sie, wie genau die Dienste abgeschaltet wurden? Haben Sie die Dienste gelöscht (eingefroren)? Bitte fügen Sie die Protokolle der Problem-Agenten bei.

Die Proxy-Einstellungen in Ihren Protokollen sind etwas seltsam. Haben Sie die Proxy-Einstellungen in Ihre Agenten-Konfigurationen geschrieben? Bitte hängen Sie die common.ini Ihres Managers an.

Es stellt sich heraus, dass ich mir die Protokolle von gestern angesehen habe...

Alles ist in Ordnung.

 
TheXpert:

Nächster Code:

Ausgänge:

2011.12.05 22:01:28 RectLabel (EURUSD,H1) pos = {12, 176314750}
2011.12.05 22:01:28 RectLabel (EURUSD,H1) andere = {123, 456}

Die Initialisierungsliste hat also nicht funktioniert, es ist Müll in der Struktur. Ist dies ein Fehler oder nicht?

Es handelt sich um einen Fehler des Compilers - er hat keine Fehlermeldung erzeugt, die besagt, dass die Struktur nicht auf diese Weise initialisiert werden kann (ohne Kopierkonstruktor). Behoben. Vielen Dank für diesen Beitrag.
 
Ich kann die Deinitialisierung nicht verstehen. Warum erscheint die Meldung "Expert Advisor unloaded from pair ..." zweimal?
//+------------------------------------------------------------------+
//|                                                   testDeinit.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"



//+------------------------------------------------------------------+
class CTest_Expert
  {

public:
                     CTest_Expert();
                    ~CTest_Expert() { Deinit(); }
                   
   void              Processing();
   void              Deinit();
   bool              StartTimer(int nCounSeconds);
   void              StopTimer();
   string   Exp_Symbol;
  };

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Конструктор                                                      |
//+------------------------------------------------------------------+
CTest_Expert::CTest_Expert()
  {

  }
//+------------------------------------------------------------------+
//| Функция удаления динамических объектов                           |
//+------------------------------------------------------------------+
void CTest_Expert::Deinit()
  {
  
   Print("Эксперт выгружен с пары "+Exp_Symbol);
   Comment("");

  }
//+------------------------------------------------------------------+
//|Инициализация таймера                                             |
//+------------------------------------------------------------------+
bool CTest_Expert::StartTimer(int nCountSeconds)
  {
   return(EventSetTimer(nCountSeconds));
  }
//+------------------------------------------------------------------+
//|Уничтожение таймера                                               |
//+------------------------------------------------------------------+

void CTest_Expert::StopTimer()
  {
      EventKillTimer();
  }

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArrayResize(arSymbols, 5);
   arSymbols[0].Exp_Symbol="0";
   arSymbols[1].Exp_Symbol="1";
   arSymbols[2].Exp_Symbol="2";
   arSymbols[3].Exp_Symbol="3";
   arSymbols[4].Exp_Symbol="4";
  
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
  }
//+------------------------------------------------------------------+

Ergebnis

2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14:00:00
2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14:02:00 PM testDeinit (EURUSD,M5) E.T.A. wurde von Paar 3 entladen
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Heruntergeladen von Paar 2
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Heruntergeladen von Paar 1
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Ekspert entladen von Paar 0
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14
2011.12.06 16:59:52 testDeinit (EURUSD,M5) -------4--------
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) Der Experte wird von Paar 3 entladen
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------3--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) Der Experte wurde von Paar 2 entladen
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------2--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) Der Experte wurde von Paar 1 entladen
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) Der Experte wird von Paar 0 entladen
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------0--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) nSize = 5

 
Konstantin83:
Ich kann die Deinitialisierung nicht verstehen. Warum erscheint die Meldung "Expert unloaded from pair ..." zweimal?
                    ~CTest_Expert() { Deinit(); }

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }

Erster Aufruf von OnDeinit. Zweiter Aufruf vom Destruktor
 
mql5:
Dies ist ein Fehler im Compiler - er hat keine Fehlermeldung erzeugt, die besagt, dass eine Struktur auf diese Weise nicht initialisiert werden kann (ohne Kopierkonstruktor). Behoben. Vielen Dank für diesen Beitrag.

Äh, nein. Weitere Einzelheiten sind hier zu finden.

In Help heißt es, dass einfache Strukturen als Variablen einfachen Typs kopiert werden können:

{
   Pos pos = {100, 100};
   Pos pos1 = pos; // копи конструктор
   pos = pos1; // копи оператор
}

Warum kann dies dann nicht in der Initialisierungsliste geschehen? Ich möchte nicht explizit Konstruktoren definieren, um die oben verwendete Initialisierungsmethode nicht zu verlieren.

Ich bin nicht grundsätzlich kritisch, sondern möchte nur den letzten Kommentar hören.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

Wenn ich das Terminal mit 12 geöffneten Fensternlaufen lasse, verbraucht es 325 MB RAM.

Wenn der Expert Advisor für mehrere Währungen ausgeführt wird, verbraucht das Terminal 990 MB Speicherplatz. Der Expert Advisor zeigt 5-Minuten-Balken der letzten 48 Stunden an und verwendet den Indikator "Fraktal". Wenn ich nur mit einem Symbol handele, dauert es 400 Mb. Ist dieser Speicherverbrauch normal, wenn man mit 12 Symbolen arbeitet?

 
Konstantin83:
Ich führe einen Multi-Currency Expert Advisor aus, das Terminal verbraucht 990 Mb RAM. Der Experte betrachtet die 5-Minuten-Balken der letzten 48 Stunden und verwendet den Indikator "Fractal". Wenn ich nur mit einem Symbol handele, dauert es 400 Mb. Ist dieser Speicherverbrauch normal, wenn man mit 12 Symbolen arbeitet?
Siehe Artikel Prinzipien der ökonomischen Neuberechnung von Indikatoren
 
Ich habe vergessen, darauf hinzuweisen, dass das Fraktal ein Standardindikator ist und alle Berechnungen alle fünf Minuten stattfinden.
 
Konstantin83:
Ich vergaß zu erwähnen, dass das Fraktal ein Standardindikator ist und alle Berechnungen alle fünf Minuten stattfinden.

Woher wissen die Entwickler, was Sie tun und wie Sie es tun?
Versuchen Sie, die Ursache des Problems in Ihrem Code klar zu formulieren und zu erklären.
Beschreiben Sie das Problem auf technische Art und Weise.

 
sergeev:

Wie können Entwickler wissen, was Sie tun und wie Sie es tun?
Versuchen Sie, den Kern des Problems in Ihrem Code klar zu formulieren und herauszustellen, unter welchen Bedingungen der Verbrauch zu steigen beginnt, und zeigen Sie den Protokollausdruck.
Beschreiben Sie das Problem auf technische Art und Weise.

Ich habe vorher nicht auf die Größe des Speichers geachtet, weil es wohl nicht viel war. Gestern und heute bemerkte ich, dass das System hinkt, öffnete den Task-Manager und dort fraß das Terminal 900MB. Ich habe angefangen zu suchen. Beim Start sind 12 Fenster geöffnet - 325 MB, ich habe es auf das Expert Advisor-Fenster gelegt - 990 MB, also dachte ich, es würde Expert Advisor auffressen. Ich habe "Charts - maximale Balken pro Fenster" auf unbegrenzt eingestellt. Nachdem ich es auf 50 000 geändert habe , habe ich das Terminal gestartet und es wiegt 110, dann habe ich es wieder auf unbegrenzt geändert. Jetzt ist mein Expert Advisor 208 MB groß, d. h. er ist in Ordnung.