Event-Stream. Wie kann man das Ereignis kontrollieren und in den Leerlauf versetzen? (+ gelöst) - Seite 5

 
Yedelkin:

OK, ich verstehe.TheXpert machte eine Welle und das Problem begann.

Das ist wirklich schade für Sie. Ist es meine Schuld, dass Sie nicht mit Menschen kommunizieren können?

Der Expert Advisor hat einen festen Speicherbedarf, wenn

(1) keine Pufferemulation

(2) keine Zeichnung von Gegenständen in der Geschichte.

(3) keine Fehler bei der Speicherzuweisung. Dies ist jedoch in der Regel bei deinit der Fall.

(4) Es gibt keine Fehler bei der Arbeit mit den Indizes. Wenn ein Indikator einen Puffer in voller Größe hat, handelt es sich um einen Fehler.

Wenn es (1) oder (2) brennt, ist das mit Tester + Dispatcher leicht zu verfolgen. Sie wird durch Größenkontrolle behandelt.

Die Ereignisse selbst verbrauchen überhaupt keinen Speicherplatz (in aufsteigender Reihenfolge). Wenn es also kein Problem im Expert Advisor gibt, liegt das Problem definitiv im Indikator.

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
TheXpert:

In einem EA ist der Speicherverbrauch festgelegt, wenn

(1) Es gibt keine Pufferemulation

(2) Es gibt keine Zeichnung von Objekten in der Geschichte.

(3) keine Fehler bei der Speicherzuweisung. Dies ist jedoch in der Regel bei Deiniteration der Fall.

(4) keine Fehler bei der Arbeit mit Indulatoren. Wenn ein Indikator einen Puffer in voller Größe hat, ist das ein Fehler.

Wenn Sie (1) oder (2) haben, ist es einfach, die Überlastung mit dem Prüfgerät und dem Dispatcher zu verfolgen. Sie kann mit einer Größenkontrolle behandelt werden.

Die Ereignisse selbst verbrauchen überhaupt keinen Speicherplatz (aufsteigend). Wenn also der Expert Advisor kein Problem hat, liegt das Problem definitiv beim Isolator.

Vielen Dank für diese ausführliche Antwort. Ich werde darüber nachdenken. (1) - (3) ist definitiv nicht.

Zu (4) erläutern Sie bitte, was es bedeutet, "wenn der Indikator den Puffer auf die volle Größe bringt", um sich nicht in Mutmaßungen zu verlieren.

Über "Wenn es (1) oder (2) brennt, ist es einfach, durch Tester + Manager zu verfolgen", bitte ich zu präzisieren: d.h. Sie schlagen vor, den Tester nicht nur für die Messung der Geschwindigkeit des Programms zu verwenden, sondern auch für die Messung des verbrauchten Volumens? Ja, eine so einfache Lösung, die mir nie in den Sinn gekommen wäre!

Weiter. Es hat sich herausgestellt, dass ein Expert Advisor, der mit dynamischen Objekten erstellt wurde, keinen festen Speicher haben kann. Andererseits gibt es keine Berichte über fehlerhaften Betrieb mit dynamischen Objekten; wie oft habe ich den Expert Advisor gelöscht und gestartet...

Wie auch immer, mein Brainstorming brachte mich auf eine triviale Idee: Wenn ich die Volumina der zusammen laufenden Programme nicht trennen kann, muss ich sie getrennt laufen lassen und sehen, wie ihr Verbrauch steigt. Der Expert Advisor sollte nicht von seinem benutzerdefinierten Indikator, sondern von den Ticks in seinem eigenen Chart gestartet werden. In Anbetracht Ihres Hinweises, dass der Tester die Lautstärke misst, scheint alles in Ordnung zu sein. Vielleicht ist es das, was Roche mit seinem Verweis auf den Artikel meinte...? Aber auch beim erneuten Lesen des Artikels kam mir ein solcher Gedanke nicht in den Sinn. Nicht ohne einen Anhaltspunkt!

TheXpert :

Du machst mich verrückt. Bin ich auch schuld daran, dass Sie nicht mit Menschen kommunizieren können?

Schuld ist Schuld, die Welle ist Schuld :)

Und ich habe Ihren Standpunkt bezüglich meiner extremen Unhöflichkeit bereits begriffen und mich im Voraus entschuldigt :) Dennoch sagt mir meine Unhöflichkeit, dass es produktiver ist, für mich selbst zu sprechen, als für andere :) Wir sind nicht in der Staatsduma :)

 
Yedelkin:

Zu (4) erläutern Sie bitte, was es bedeutet, "wenn der Indikator eine volle Größe des Puffers hat", damit wir uns nicht in Vermutungen verlieren.

Was ich damit meine, ist, dass, wenn der Chart, sagen wir, 100000 Balken hat und der Expert Advisor einen Puffer für alle 100000 Balken zieht - das ist nicht richtig.

Zu "Wenn es (1) oder (2) gibt, ist es einfach, die Verbrennung durch Tester + Dispatcher zu verfolgen" bitte ich um Präzisierung: d.h. Sie schlagen vor, den Tester nicht nur zur Messung der Programmgeschwindigkeit, sondern auch zur Messung des verbrauchten Volumens zu verwenden? Ja, eine so einfache Lösung, die mir nie in den Sinn gekommen wäre!

Na ja... Sie meinen, dass Sie den Tester ausführen und irgendwo (z. B. im Windows Task Manager) die Speicherzuweisung überwachen müssen. Keine sehr zuverlässige Methode, aber wenn das Problem in EA liegt, ist der Speicherverbrauch wahrscheinlich sehr hoch.

Ein Brainstorming führte also zu einer scheinbar trivialen Idee: Wenn wir die Mengen der zusammen laufenden Programme nicht aufteilen können, müssen wir sie getrennt laufen lassen und sehen, wer den höheren Verbrauch hat.

Nun, so wurde es tatsächlich entwickelt...
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
sergeev:
...

Das heißt, zum Beispiel, wenn Sie auf das Objekt klicken - Ereignis CHARTEVENT_OBJECT_CLICK wird nicht sofort kommen, sondern erst nach Rückzug aller vorherigen Ereignisse aus der Warteschlange.
Und wie Sie verstehen, ist die Warteschlange fest mit dem EventChartCustom gefüllt .

...

Alex, ich habe jetzt ein ähnliches Problem. Das heißt, unmittelbar nach der EA-Initialisierung funktioniert alles einwandfrei. Eine Zeit lang komme ich überhaupt nicht in das Terminal, ich versuche, von einer Benutzerinformationstafel zu einer anderen zu wechseln, und das Programm "bleibt stecken". Es kann sogar ein paar Sekunden lang einfrieren, bis der Wechsel erfolgt. Ist es derselbe Fall?

Ich habe Ihre Lösung noch nicht ausprobiert, da ich mit einem anderen Problem beschäftigt bin, aber ich werde es auf jeden Fall versuchen, da ich die Lösung selbst nicht gefunden habe. Bislang gibt es nur eine Frage.

In Ihrem Beispiel gibt es fünf Parameter in der Funktion OnChartEvent (). Was ist dieAussicht?

ulong event_idle=0; bool bidle;
//---
void OnChartEvent(int iview, int id, long lparam, double dparam, string sparam)
  {
    if(id==CHARTEVENT_CUSTOM+VM_IDLE)
      {
        if(event_idle>(ulong)lparam || bidle) // если последнее посланное больше чем пришедшее, то сразу выходим
          {
           bidle=event_idle > (ulong)lparam;
           //---
           if(bidle) return;
           //---
           event_idle=0;
          } 
        event_idle++;
        ChartRedraw(m_chart); // обновили чарт
        EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика
        return; 
      }
    EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика

    /*
        обработка остальных событий
    */
  }
 
tol64:

Alex, ich habe jetzt ein ähnliches Problem. Das heißt, direkt nach der EA-Initialisierung funktioniert alles einwandfrei. Eine Zeit lang komme ich überhaupt nicht in das Terminal, ich versuche, von einer Benutzerinformationstafel zu einer anderen zu wechseln, und das Programm "bleibt stecken". Es kann sogar ein paar Sekunden lang einfrieren, bis der Wechsel erfolgt. Ist es derselbe Fall?

Ja, das ist sie. Sie haben mehr als ein EventChart zwischen OnChartEvent-Aufrufen gesendet. Wenn Sie das von mir vorgeschlagene Add-on einbauen, um die eingegangene Ereignisnummer zu analysieren, ist das Problem verschwunden.

Ihr Beispiel hat fünf Parameter in der Funktion OnChartEvent (). Was istiview?

Ich habe es versehentlich in die Funktionsüberschrift geschrieben. Ignorieren Sie es.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
Ich kann gar nicht glauben, wie viel Energie die Leute haben.) Eh, wo sind meine 17 Jahre!
 

tol64:

sergeev:
.
..

Wenn Sie also zum Beispiel auf ein Objekt klicken, wird das Ereignis CHARTEVENT_OBJECT_CLICK nicht sofort ausgelöst, sondern erst, nachdem alle vorherigen Ereignisse aus der Warteschlange entfernt wurden.
Und wie Sie verstehen, ist die Ereigniswarteschlange mit EventChartCustom verstopft.

Leute, kommt schon, lest Punkt 1.1 in diesem Beitrag. Die dort besprochenen Informationen wurden heute vorgelegt, wir können sie als offiziell betrachten. Nun kann es (in diesem Fall) solche Phänomene wie "frühere" Ereignisse und "taubes Blockieren" der Warteschlange durch die Funktion EventChartCustom nicht geben . ...Oder wir brauchen eine offizielle Widerlegung der neuen Informationen aus dem Handbuch.

TheXpert, danke für die Klarstellung.

 
Yedelkin:

Leute, kommt schon, lest Punkt 1.1 in diesem Beitrag. Die dort besprochenen Informationen wurden heute vorgelegt, wir können sie als offiziell betrachten. Nun, es kann (in diesem Fall) jetzt nicht in der Warteschlange solche Phänomene wie "frühere" Ereignis-Ereignisse und "taubes Blockieren" der Warteschlange durch EventChartCustom-Funktion geben. ...Oder eine offizielle Widerlegung der neuen Informationen aus dem Handbuch ist erforderlich.

Ist das hier eine Art Zirkus?
 
sergeev:
Ist das eine Art Zirkus, der hier stattfindet?

Wenn Sie es für einen Zirkus halten, können Sie es gerne löschen, oder versuchen, es in der Sache selbst zu beantworten.

 
und haben Sie schon eine neue Frage gestellt?
Grund der Beschwerde: