Fehler, Irrtümer, Fragen - Seite 1524

 
Slawa:

Was ist zu dokumentieren? "Brüder, entspannt euch und geht es ruhig an, deinitialisiert, wie ihr wollt. Die Entwickler haben es zugelassen.

Aber wenn Sie das Terminal schließen, löst das Terminal strenge Bedingungen aus, die in der Dokumentation bereits ausdrücklich erwähnt wurden. Und wenn Sie das Terminal das nächste Mal öffnen, haben Sie möglicherweise keine Diagramme geöffnet, weil sie es nicht geschafft haben, in der vorgegebenen Zeit zu speichern.

Was hat das mit der Sache zu tun?

Versuchen Sie, das Protokoll in einer Endlosschleife zu überfluten, um zu sehen, wie schnell es wächst und wie 64 MB doppelte Datensätze abschneiden und den Anfang des Protokolls abkürzen. Mit Ihrer Behauptung über den fehlenden Schutz reagieren Sie über. Dann hätten wir schon längst alle Laufwerke der Hosting-Sites verstopft.

Dokumentieren wie es ist oder tun wie dokumentiert... Gut, das ist Ihre Sache.

Ausprobiert, auf die Gesundheit des Computers gesetzt, Füllrate ~1,5 GB/min. Aber das Terminal bleibt nicht hängen, im Vergleich zu 4.)

 
-Aleks-:

Ach so, der Fehler ist nicht wieder da - Sie können das Terminal schließen und sicher sein, dass alle Diagramme gespeichert sind.

Ich habe festgestellt, dass das Programm beim Schließen des Terminals jetzt nach 3 Sekunden zwangsweise beendet wird. So funktioniert es jetzt und so wird es auch in Zukunft funktionieren. Sie wollen nicht das erzwungene Herunterfahren zurückgeben, wenn das Programm aus dem Diagramm entfernt wird, ohne das Terminal zu beenden.
 
Slawa:

Ursprünglich ging es um eine Schleifenanzeige. Das ist kategorisch nicht zu empfehlen. Auch zur Veranschaulichung

Wir sprechen hier nicht über den Indikator mit Schleife, sondern über jeden Indikator ohne IsStopped-Prüfung innerhalb seiner Zyklen. Denn die Zyklen zur Erstellung komplexer Indikatoren können lang sein. Natürlich ist dieses Problem für mich wegen der Endlosschleife nicht so aktuell, ich kann den Quellcode einfach nicht zeigen, und er ist nutzlos, weil er zu umständlich ist.
 

Jeder Indikator verwendet mindestens einen Zyklus.

Eine Schleife ohne IsStopped-Prüfung macht diese Schleife potentiell unendlich. Denn es können Millionen von Preisdaten im Array sein, und jede Iteration kann nicht optimal geschrieben werden.

Ein Programmierer, der absichtlich eine Endlosschleife erzeugt, kann sich nicht auf fehlende Informationen in der Dokumentation berufen; außerdem heißt es in der Dokumentation ausdrücklich

В одном потоке с индикаторами также последовательно выполняются остальные действия по данному символу - обработка тиков и синхронизация истории. Это означает, что если в индикаторе выполняется бесконечное действие, все остальные события по его символу никогда не выполнятся.

Der bewusste Programmierer versteht sofort, dass in diesem Fall er/sie für die Effizienz des Indikators verantwortlich ist, nicht die Dokumentation. Außerdem gibt es viele Diskussionen und Artikel zu diesem Thema

 
Slawa:

Der gewissenhafte Programmierer versteht sofort, dass in diesem Fall er/sie für die Effizienz des Indikators verantwortlich ist, nicht die Dokumentation. Darüber hinaus gab es zahlreiche Diskussionen und Artikel zu diesem Thema

Ich gebe zu, dass ich die IsStopped-Prüfung nicht hatte, und deshalb hatte ich Probleme mit Unterbrechungen bei der Konstruktion komplexer Indikatoren, die allein auf mein Verschulden zurückzuführen waren. Andererseits habe ich mich an die Tatsache gewöhnt, dass die Arbeit des Programms und seine Dokumentation übereinstimmen müssen.
 
Ilya Malev:
Wenn Sie das Terminal schließen, wird das Programm bereits nach 3 Sekunden zwangsbeendet. So funktioniert es jetzt und so wird es auch in Zukunft funktionieren. Sie wollen das erzwungene Herunterfahren nicht wiederherstellen, wenn sie das Programm aus der Tabelle entfernen, ohne das Terminal zu beenden.
Ähm, ich habe meinen Standpunkt zu Quadruple dargelegt - es scheint jetzt alles korrekt zu beenden und zu schließen, während es früher Charts mit EAs verlor.
 
Ilya Malev:
Das ist alles richtig, ich bereue, dass ich die IsStopped-Kontrolle nicht hatte und deshalb Probleme mit der Unterbrechung des Aufbaus komplexer Indikatoren hatte, die allein auf meinen Fehler zurückzuführen sind. Andererseits habe ich mich daran gewöhnt, dass die Arbeit des Programms und seine Dokumentation übereinstimmen sollten.

In der Dokumentation können nicht alle Nuancen berücksichtigt werden. Vor allem, wenn es um Sekunden, Gigahertz, Megabyte geht - Werte, die zwar messbar sind, aber stark von ihrer Umgebung abhängen.

Wir versuchen, die Lücken in der Dokumentation auszufüllen (obwohl wir insgeheim auf die Vermutung der Gewissenhaftigkeit hoffen)

 
-Aleks-:
Ähm, ich habe eine Bemerkung zu Quadruple gemacht - es scheint jetzt alles korrekt zu vervollständigen und zu schließen, aber früher hat es Charts mit EAs verloren.

Der Vierer hat die Abschlussprozesse der einzelnen Charts parallel verfolgt. Daher konnten sie die Zeitspanne für jeden einzelnen erhöhen.

In der Vergangenheit wurden die Karten einzeln abgespeichert, und für jede Karte wurde die gleiche Zeitspanne festgelegt. Je mehr Diagramme und je mehr gehemmte EAs es gab, desto länger dauerte der Abschlussprozess.

 
Slawa:

Der Vierer hat die Abschlussprozesse der einzelnen Charts parallel verfolgt. Daher konnten sie die Zeitspanne für jeden einzelnen erhöhen.

In der Vergangenheit wurden die Karten einzeln abgespeichert, und für jede Karte wurde die gleiche Zeitspanne festgelegt. Je mehr Diagramme, desto länger dauerte der Abschlussprozess.

Grob verstanden.

Langsam ist nicht langsam, vieles hängt von der Hardware und den Aufgaben ab, die der EA ausführt, und man muss berücksichtigen, dass Programme oft nicht von professionellen Programmierern geschrieben werden - deshalb gibt es ja auch eine Programmiersprache, denke ich.

 

MT4. Ich möchte Ihre Aufmerksamkeit noch einmal auf die Besonderheiten der Initialisierung globaler Variablen des Programms lenken.

Globale Variablen werden einmal initialisiert, wenn Sie das Programm auf einer Karte installieren oder den Code neu kompilieren.

Wenn Sie den Zeitrahmen, das Symbol oder die Eingabeparameter ändern möchten, werden die globalen Variablen nicht neu initialisiert (d.h. sie werden nicht gelöscht) und behalten ihre Werte, die sie bei der Arbeit mit den vorherigen Zeitrahmen, Symbolen oder Eingabeparametern erhalten haben.

input int c;
int a,b;
void OnInit() {
 a++; Print(" a=",a," b=",b," c=",c); }

Es hat sich herausgestellt, dass, wenn Sie nicht alle globalen Variablen programmatisch löschen, der Code mit den vorherigen Werten arbeitet, wenn Sie die TF, das Instrument oder die Eingabeparameter ändern, d.h. falsch.

Ist das vernünftig? Wäre es nicht besser, dies mit dem Strategietester zu tun? Dort werden die globalen Variablen bei jeder Änderung von TF, Instrument oder Eingabeparametern neu initialisiert.