Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hier habe ich eine praktische Frage.
Warum ist es notwendig, den Indikator-Handle bei jedem Aufruf von CopyBuffer() auf Behinderung zu prüfen? In meinem EA habe ich diese Prozedur einmal durchgeführt (mit der Ankunft des ersten Ticks, nach der Überprüfung der Datensynchronisation), und später begann ich, den Fehler 4807 Error indicator handle. CSymTotal=7. Die Handles wurden in einem Array empfangen:
Die Druckprüfung zeigt, dass alle sieben H_Ind[0..6] jeweils die Werte 10..15 haben, d.h. von -1 verschieden sind. Die Handles scheinen gültig zu sein, aber als Antwort auf CopyBuffer(H_Ind[0-6]...) erhalte ich CopyBuffer=-1, LastError=4807(!!!).Manchmal läuft es normal, und manchmal gibt es Fehler.Nachdem ich Überprüfungen wie in diesem Artikeleingeführt habe,
funktioniert bis jetzt alles einwandfrei. Mysterium...
Ich verstehe nicht, was mein Fehler ist.... Und vor allem, warum ist es notwendig, den Handlejedes Mal auf Gültigkeit zu prüfen, wenn ich CopyBuffer() verwende und ihn neu anlege? Wird er nicht gespeichert, bis der Expert Advisor seine Arbeit beendet hat? Ist dies generell notwendig oder dient es nur der Bequemlichkeit des Beispiels?
Hier habe ich eine praktische Frage.
Warum ist es notwendig, den Indikator-Handle bei jedem Aufruf von CopyBuffer() auf Behinderung zu prüfen? In meinem EA habe ich diese Prozedur einmal durchgeführt (mit der Ankunft des ersten Ticks, nach der Überprüfung der Datensynchronisation), und später begann ich, den Fehler 4807 Error indicator handle. CSymTotal=7. Die Handles wurden in einem Array empfangen:
Die Druckprüfung zeigt, dass alle sieben H_Ind[0..6] jeweils die Werte 10..15 haben, d.h. von -1 verschieden sind. Die Handles scheinen gültig zu sein, aber als Antwort auf CopyBuffer(H_Ind[0-6]...) erhalte ich CopyBuffer=-1, LastError=4807(!!!).Manchmal läuft es normal, und manchmal gibt es Fehler.Nachdem ich Überprüfungen wie in diesem Artikeleingeführt habe,
funktioniert bis jetzt alles einwandfrei. Mysterium...
Ich verstehe nicht, was mein Fehler ist.... Und vor allem, warum ist es notwendig, den Handlejedes Mal auf Gültigkeit zu prüfen, wenn ich CopyBuffer() verwende und ihn neu anlege? Wird er nicht gespeichert, bis der Expert Advisor seine Arbeit beendet hat? Ist das überhaupt notwendig, oder dient es nur der Bequemlichkeit des Beispiels?
Im Allgemeinen sollte die Frage etwas allgemeiner formuliert werden:
Welche Überprüfungen, Bedingungen oder Verzögerungen sollten VOR und NACH CopyBuffer() eingeführt werden, um die 400(0)-Indikatorwerte, die ich jetzt(!) brauche, bei sieben (zehn) Instrumenten unter Höchstgeschwindigkeitsbedingungen (in einer Schleife) GARANTIERT zu erhalten?
Denn, return(0) = "ach, jetzt hat es nicht geklappt, vielleicht klappt es ja beim nächsten Mal...".
Hier ist übrigens der Rest von Copy daneben...
PS. Vielleicht ist es schon off-topic. Nun, die Frage richtet sich nicht an den Autor, sondern an alle, die das klären können...
In meinen Beispielen sieht die Bedingung so aus: Wenn der Handle gültig ist, fahren wir mit dem Kopieren der Daten fort. Wenn nicht, erstellen wir den Indikator erneut und verlassen diese Funktion, da die Berechnung des Indikators Zeit in Anspruch nimmt. Das Gleiche passiert mit dem Kopieren, während des Kopierens kann der Indikator neu berechnet werden, also gibt CopyBuffer() -1 zurück, sobald die Daten bereit sind, wird die Funktion ihre Arbeit tun, deshalb ist es notwendig, alles zu überprüfen.
Ja, Sergey, ich verstehe. Ich wollte den Artikel oder den Autor nicht in den Schatten stellen. Der Artikel ist ausgezeichnet. Dies ist keine Beschwerde, sondern ein Versuch, eine Antwort zu finden. Es ist einfach die beste Diskussion, die ich zu diesem Thema gefunden habe. Sie würden die Antwort wahrscheinlich auch gerne genauer wissen, oder? )
Vielleicht sollten wir es in einen separaten Thread packen?
Vielleicht in einen separaten Thread packen?
https://www.mql5.com/ru/forum/1880.
Hier, fügen Sie es in das Thema ein. Sergey, ich entschuldige mich dafür, dass ich den Rahmen des Artikels gesprengt habe. Ich werde mich freuen...)))
Ich wünsche mir, dass jemand 20 Methoden zum Geldmanagement nennen kann !!!!!!
Für diesen Artikel ist die Idee sehr gut. Aber Sie haben das Konzept von OOP und Programmierung im Allgemeinen vergessen: ABSTRACTNESS. In Ihren Funktionen sind hart kodierte Indikatoren, aktuelles Symbol, aktuelle Periode, Indikatorparameter. Die Idee ist gut, aber sie ist nicht vollständig umgesetzt, sie ist weit von Perfektion entfernt. Ich möchte zum Beispiel das Kreuzen von Indikatorlinien überprüfen, jede von ihnen in einem anderen Zeitrahmen und von verschiedenen Symbolen - das ist das eine. Zweitens - was passiert mit Ihren Funktionen, wenn das Terminal vorübergehend die Verbindung zum Server verliert und genau die drei Balken verpasst, die Sie gerade verarbeiten? Es gibt ein Signal - aber die Eingabe wird verpasst. Die Suche nach einem Signal sollte mit einem CHARGE durchgeführt werden. Dann sollte geprüft werden, ob das Signal bereits verarbeitet wurde. Es kann sein, dass Sie so viele Überschneidungen haben, dass Sie selbst überrascht sein werden. Es genügt, den Funktionen Parameter (Indikatornummer, Symbol, Zeitrahmen, Suchbeginn, Suchende, Indikatorzeile...) zu übergeben. - und Sie werden Ihr System flexibler machen und der Expert Advisor wird in der Lage sein, das zu sehen, was für Menschen unzugänglich ist - den Schnittpunkt von Linien verschiedener Symbole und verschiedener Zeitrahmen. Das ist viel besser als die hier vorgestellten Funktionen. Sie müssen auch das Konzept der Benennung von Variablen ausarbeiten - Sie haben zu wenige Variablen mit Namen, die nichts bedeuten - aber das ist ein anderes Thema. Das nennt man Programmierstil. Jeder hat seinen eigenen Stil. Aber ich sehe, dass Sie sich langsam den Konzepten annähern, die ich versucht habe, in MT4 zu verwenden - das ist sehr ermutigend.
Für diesen Artikel ist die Idee sehr gut. Aber Sie haben das Konzept von OOP und Programmierung im Allgemeinen vergessen: ABSTRACTNESS. In Ihren Funktionen sind hart kodierte Indikatoren, aktuelles Symbol, aktuelle Periode, Indikatorparameter. Die Idee ist gut, aber sie ist nicht vollständig umgesetzt, sie ist weit von Perfektion entfernt. Ich möchte zum Beispiel das Kreuzen von Indikatorlinien überprüfen, jede von ihnen in einem anderen Zeitrahmen und von verschiedenen Symbolen - das ist das eine. Zweitens - was passiert mit Ihren Funktionen, wenn das Terminal vorübergehend die Verbindung zum Server verliert und genau die drei Balken verpasst, die Sie gerade verarbeiten? Es gibt ein Signal - aber die Eingabe wird verpasst. Die Suche nach einem Signal sollte mit einem CHARGE durchgeführt werden. Dann sollte geprüft werden, ob das Signal bereits verarbeitet wurde. Es kann sein, dass Sie so viele Überschneidungen haben, dass Sie selbst überrascht sein werden. Es genügt, den Funktionen Parameter (Indikatornummer, Symbol, Zeitrahmen, Suchbeginn, Suchende, Indikatorzeile...) zu übergeben. - und Sie werden Ihr System flexibler machen und der Expert Advisor wird in der Lage sein, das zu sehen, was für Menschen unzugänglich ist - den Schnittpunkt von Linien verschiedener Symbole und verschiedener Zeitrahmen. Das ist viel besser als die hier vorgestellten Funktionen. Sie müssen auch das Konzept der Benennung von Variablen ausarbeiten - Sie haben zu wenige Variablen mit Namen, die nichts bedeuten - aber das ist ein anderes Thema. Das nennt man Programmierstil. Jeder hat seinen eigenen Stil. Aber ich sehe, dass sie sich langsam den Konzepten annähern, die ich versucht habe, in MT4 zu verwenden - das ist sehr ermutigend.