Fehler, Irrtümer, Fragen - Seite 38

 

Es ist ein Problem aufgetaucht, ich weiß nicht, wohin ich es bringen soll.

Hier ist der Codeabschnitt, der mich interessiert:

      Print("itogo do=",itogo);
      if(itogo>1000)
        {
         Print("itogo>1000 =",itogo);
         itogo=500;
         Print("vsego_if=",itogo);
        }
      Print("itogo posle=",itogo);
      Print("+-----------------------------------------------------------+");

Sie besagt, dass wir zuerst den Wert der Variablen itogo mit dem Text "itogo do" ausdrucken müssen,

wenn itogo größer als 1000 ist, dann drucke itogo mit dem Text "itogo>1000"

itogo wird 500

itogo mit dem Text "vsego_if=" ausdrucken und den geschützten Bereich verlassen

print itogo mit dem Text "itogo posle="

einen Strich ziehen.

Warum gehe ich ins Detail?

es sollte klar sein, dass, wenn es keine Bedingung gab, zwei Zeilen zwischen ihnen stehen; wenn es eine Bedingung gab, sind es vier Zeilen.

Wir wissen, dass sich der Wert der Variablen ändert, wenn die Bedingung ausgelöst wird.

Als erstes muss die itogo do-Variable ausgedruckt werden. Hier ist der Ausdruck, der zwei Drucker zeigt, also keine Bedingungen ausgelöst hat, aber der Wert der Variablen hat sich geändert.

Wie kann das sein ??????????


Hier ist ein Screenshot des Codes, um zu zeigen, dass nichts zwischen den Zeilen, irgendwo jenseits der Feldgrenzen, verborgen ist.

Der Code stürzt überhaupt nicht ab, lässt sich problemlos kompilieren, funktioniert aber nicht wie vorgesehen.

Die Variable ist global als int deklariert, der Code selbst ist groß, aber die Ausdrucke sind nirgendwo sonst im Code zu finden.

Und die interessanteste Sache mit dem Debugger funktioniert gut, aber wenn Sie im normalen Modus ausgeführt werden, hier sind solche Shuffles

und dies ist nicht der Drucker Bot auf die Logik des Programms sehe ich, dass etwas falsch ist.

 

Ich konnte das Problem bei anderen Beispielen noch nicht reproduzieren, aber dies scheint die Lösung zu sein

Früher gab es DebugBreak(); und der Code wurde durch den Debugger ausgeführt, später wurde DebugBreak() entfernt und alles wurde neu kompiliert

aber anscheinend merkt sich ME, dass der Debugger verwendet wurde und weigert sich, nach der Kompilierung ohne Debugger korrekt zu arbeiten.

Wenn ich den Debugger ausführe, funktioniert das Skript sogar beim normalen Start problemlos.

 
Urain:

Ich konnte das Problem bei anderen Beispielen noch nicht reproduzieren, aber dies scheint die Lösung zu sein

Früher gab es DebugBreak(); und der Code wurde durch den Debugger ausgeführt, später wurde DebugBreak() entfernt und alles wurde neu kompiliert

aber anscheinend merkt sich ME, dass der Debugger verwendet wurde und weigert sich, korrekt zu arbeiten, ohne ihn nach der Kompilierung zu durchlaufen.

Wenn Sie das Skript mit dem Debugger ausführen, funktioniert es auch im Normalbetrieb einwandfrei.


Und das nennen sie eine Freilassung?

Der potenzielle Teilnehmer an der Meisterschaft 2010 hat einen Expert Advisor geschrieben und debuggt ihn, aber das Material des Debuggers bleibt im Code. Der Expert Advisor funktioniert jedoch gut. Sie funktioniert jedoch nur mit "Tricks", was dem Teilnehmer jedoch nicht bekannt ist - wie könnte er/sie von einer solchen undokumentierten Funktion wissen?

Also schickte dieser Teilnehmer den Quellcode seines EA an MetaQuotes, um an der Meisterschaft 2010 teilzunehmen, und sie kompilierten ihn einfach, und natürlich stellte sich der Code als sauber heraus, ohne irgendwelchen "Debugger-Kram".

Die Meisterschaft 2010 läuft, aber der MetaQuotes Expert Advisor handelt nicht auf die gleiche Weise wie auf dem Computer. Ein Teilnehmer ist perplex und hat alle möglichen Gedanken...

 
Urain:

Es ist ein Problem aufgetaucht, von dem ich nicht einmal weiß, wo ich es einordnen soll.

Ich habe diesen Code als Beispiel erstellt (ich habe Ihre Werte eingesetzt):

void Check(int itogo)
  {
   Print("itogo do=",itogo);
   if(itogo>1000)
     {
      Print("itogo>1000 =",itogo);
      itogo=500;
      Print("vsego_if=",itogo);
     }
   Print("itogo posle=",itogo);
   Print("+-----------------------------------------------------------+");  
  }
void OnStart()
  {
   Check(158);
   Check(179);
   Check(202);
   Check(222);
   Check(243);
   Check(261);
   Check(288);
   Check(301);
  }

Es hat gut funktioniert:

2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=301
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=301
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=288
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=288
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=261
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=261
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=243
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=243
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=222
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=222
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=202
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=202
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=179
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=179
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=158
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=158

Wie Sie sehen können, gibt es keine Fehler oder Unstimmigkeiten bei den Variablenwerten.

Vielleicht haben Sie vergessen, den Code nach zahlreichen Überarbeitungen neu zu kompilieren und eine alte Version verwendet.

Was Sie tun müssen:

  • Kopieren Sie Ihren Code von Grund auf, starten Sie das Terminal neu (zur Sicherheit) und prüfen Sie
  • Wenn der Fehler weiterhin besteht, senden Sie uns den vollständigen Code über servicedesk (oder auch im Forum) - wir werden ihn sicher überprüfen
 
simpleton:

Hören Sie endlich auf, hysterisch zu sein.

Sollte sich dieser Fehler bestätigen, wird er unverzüglich korrigiert. Die Entwicklung von Software kann nicht ohne Fehler ablaufen.

 
Renat:

Hören Sie schon auf, hysterisch zu sein.

Sollte sich dieser Fehler bestätigen, wird er unverzüglich korrigiert. Die Entwicklung von Software kann nicht ohne Fehler ablaufen.

Renat, ich schlage vor, das Thema "Kritik an MQL5" oder etwas Ähnliches zu eröffnen. Und alle derartigen Nachrichten aus anderen Themen (Threads) sollten als off-top gelöscht werden.

Auf diese Weise haben die Kritiker die Möglichkeit, sich zu äußern, und die Themen werden geordnet.

 

Ich würde gerne wissen, was mit der Anfrage#18261 füreinen Indikatoraufruf aus einem EA geschieht (der Wert stimmt nicht mit dem Indikator überein).

Es wäre schön, wenn sie auf irgendeine Weise reagieren würden...

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
ddd06:

Ich würde gerne wissen, was mit der Anfrage #18261 für einen Indikatoraufruf aus einem EA geschieht (der Wert stimmt nicht mit dem Indikator überein).

Es wäre schön, wenn sie auf irgendeine Weise reagieren würden...

Ihre Anfrage wurde beantwortet. Es wurde beraten.

Warum es nicht in Ihrem Profil aktualisiert wurde - wir werden es herausfinden.

 
Renat:

Ich habe diesen Code als Beispiel erstellt (setzen Sie Ihre Werte ein):

Es hat gut funktioniert:

Wie Sie sehen können, gibt es keine Fehler oder Inkonsistenzen bei den Variablenwerten.

Es ist möglich, dass Sie nach zahlreichen Überarbeitungen vergessen haben, den Code neu zu kompilieren und eine alte Version verwendet haben.

Was ist zu tun?

  • Kopieren Sie Ihren Code von Grund auf neu, starten Sie das Terminal neu (um sicherzugehen) und überprüfen Sie
  • Wenn Sie den Fehler immer noch haben, senden Sie uns den vollständigen Code über servicedesk (oder auch im Forum) - wir werden das auf jeden Fall überprüfen

Und bevor ich hier gepostet tat das gleiche, und das Ergebnis war, wie Sie haben aber hier auf dem Blatt, wo der Fehler zunächst entstanden alle und stürzt ab.

Ich wiederhole den Grund in den Debugger, wenn auf diesem bestimmten Arbeitsblatt tat Neukompilierung und nicht durch Debugging funktioniert falsch, nach einem Lauf in der Debug alles normal ist. Ich weiß nicht, warum der Debugger an diesem bestimmten Arbeitsblatt hängt, Codekopien auf anderen Arbeitsblättern funktionieren gut, aber dieses nicht.

Deshalb habe ich oben geschrieben, dass ich den Fehler bisher nicht reproduzieren kann (oder besser gesagt, er reproduziert sich, aber nur innerhalb des lokalisierten Projekts).

Vielleicht gibt es eine Funktion im Debugger oder in ME, die sich an den Verlauf der Änderungen erinnert, vielleicht gab es vor dem Vorfall einen kritischen Fehler, den ich nicht beachtet habe.

Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 
Urain:

Und ich habe dasselbe getan, bevor ich es hier gepostet habe, und das Ergebnis war wie Ihres, aber auf dem Blatt, auf dem der Fehler ursprünglich auftrat, stürzt alles ab.

Ich wiederhole den Grund im Debugger, wenn ich auf bestimmten Blatt neu kompiliert und nicht durch Debug-Arbeiten falsch ausgeführt, nach dem Debuggen alles normal ist. Ich weiß nicht, warum der Debugger an diesem bestimmten Arbeitsblatt hängt, Codekopien auf anderen Arbeitsblättern funktionieren gut, aber dieses nicht.

Deshalb habe ich oben geschrieben, dass ich den Fehler bisher nicht reproduzieren kann (oder besser gesagt, er reproduziert sich, aber nur innerhalb des lokalisierten Projekts).

Vielleicht gibt es eine Funktion des Debuggers oder von ME, die sich an den Verlauf der Änderungen erinnert, vielleicht gab es vor dem Vorfall einen kritischen Fehler, den ich nicht beachtet habe.

Wissen Sie noch, wo DebugBreak() gesetzt wurde?

Bislang ist es mir nicht gelungen, das Problem zu reproduzieren.