Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1740

 
Maxim Kuznetsov #:

sagen Sie den Leuten nicht, was sie tun sollen.

Sie müssen sich Ihre Daten merken und mit ihnen arbeiten

Maxim, in dieser Situation brauchen Sie sich nichts zu merken. Es ist viel sicherer, sich nur die letzte geschlossene Position anzusehen.

Sie müssen sich nicht um die Speicherung der Daten und ihre Wiederherstellung nach einer außergewöhnlichen Situation kümmern. Wenn das Terminal geschlossen wird, gehen die Positionsdaten verloren. Wenn Sie sie auswendig lernen, sollten Sie daher sofort die Möglichkeit in Betracht ziehen, sie schnell und effektiv wiederherzustellen.

(Einen Auftrag in den Kommentaren zu vermerken, wäre keine zuverlässige Lösung - es würde bedeuten, sich auf den Willen des Brokers/Händlers zu verlassen).

Das Interessante daran ist, dass diese Daten ohnehin von irgendwoher gelesen werden. Wäre es also nicht einfacher, sie direkt an der Quelle zu lesen?

 
Sergey Zhukov #:

Wie zwinge ich den Compiler, für MT4 und nicht für MT5 zu kompilieren?

#ifdef __MQL4__

#else

#endif
 
Artyom Trishkin #:

Maxim, in dieser Situation brauchen Sie sich nichts zu merken. Es ist viel sicherer, sich nur die letzte geschlossene Position anzusehen.

Sie müssen sich nicht um die Speicherung der Daten kümmern und sie im Notfall wiederherstellen. Wenn das Terminal geschlossen wird, gehen die Positionsdaten verloren. Wenn Sie sie auswendig lernen, sollten Sie daher sofort die Möglichkeit in Betracht ziehen, sie schnell und effektiv wiederherzustellen.

(Einen Auftrag in den Kommentaren zu vermerken, wäre keine zuverlässige Lösung - es würde bedeuten, sich auf den Willen des Brokers/Händlers zu verlassen).

Das Interessante daran ist, dass diese Daten ohnehin von irgendwoher gelesen werden. Wäre es also nicht einfacher, sie direkt an der Quelle zu lesen?

und dann folgt "warum OnTimer nicht in ein paar Sekunden passt oder OnTick wild danebengeht" :-)

Den Zustand einmal bei der Initialisierung wiederherstellen (entweder durch Lesen aus einer Datei oder aus der Browser-Historie/Umgebung) und das war's... Der letzte Auftrag wird zusammen mit seinen Eigenschaften in einer Variablen gespeichert und ist immer bekannt

 
Maxim Kuznetsov #:

und dann folgt das Thema "warum OnTimer nicht in ein paar Sekunden passt oder OnTick total daneben geht" :-)

Bei der Initialisierung wird der Zustand einmal wiederhergestellt (entweder durch Lesen aus einer Datei oder durch Durchsicht der Historie/Umgebung) und das war's... Der letzte Auftrag wird zusammen mit seinen Eigenschaften in einer Variablen gespeichert und ist immer bekannt

Um zu erfahren, wie die letzte Position geschlossen wurde, müssen Sie sie finden. Solange sie offen ist, gibt es nämlich keine Möglichkeit, aufzuzeichnen und sich daran zu erinnern, wie sie geschlossen wurde, denn sie ist ja noch offen.

Es ist möglich, ein Ticket der zuletzt geöffneten Position zu speichern und damit zu ermitteln, wie sie geschlossen wurde, aber ... Bei der Manipulation einer offenen Position kann sich deren Ticket ändern. Dementsprechend müssen wir eine Funktion implementieren, um das geänderte Ticket neu zu schreiben. All dies verkompliziert den Code.

Ich habe nur vorgeschlagen, nach der letzten geschlossenen Position zu suchen. Und es kombiniert die Suche nach allen Positionen beim Neustart des EA und liest die Daten nur einer Position beim Schließen einer neuen Position.

Schließlich hoffe ich, dass alle verstehen, dass wir dafür nicht alle historischen Positionen durchlaufen müssen, sondern nur die letzte. D.h. wir merken uns nur eine Variable des Schleifenindexes - den aktuellen Wert - und wir beginnen eine neue Schleife (wenn die Anzahl der historischen Aufträge steigt) mit dem Wert dieser Variable, nicht mit Null. Und der Wert dieser Variablen wird in OnInit() beim Start und Neustart des Expert Advisors sowie beim Schließen einer neuen Position geschrieben. D.h. auf diese Weise vermeiden wir die Notwendigkeit, Positionsdaten zu schreiben und zu lesen und mit dem Antrieb zu arbeiten.

Meiner Meinung nach ist dieser Ansatz am rentabelsten, denn

1. Sie müssen sich nur den Wert des Schleifenindexes
2 merken. Abrufen von Daten nur zum erforderlichen Zeitpunkt durch direkten Zugriff auf einen abgeschlossenen Auftrag über dessen Index
3. Sie müssen keine Lese-/Schreibfunktion erstellen
4. Es geht schneller, sowohl beim Arbeiten als auch beim Schreiben.

Und ja, ich stimme zu, dass Sie alle Ihre Daten kennen müssen - ich tue es selbst. Aber es ist wünschenswert, sie zu kennen, was dem Programm und Ihnen selbst zugute kommt.

 
Ivan Butko #:

Vielen Dank für die Informationen!

Wenn Sie Zeit haben, antworten Sie bitte, wie man das Problem behebt:

Bei einer Historie von N Kerzen werden zwei unterschiedlich gerichtete Ziele gesetzt: Close[N]+50*Point und Close[N]-50*Point.
Dann gibt es eine Bedingung, dass der Kurs eines der Ziele erreicht (wenn (High[i]> Close[N]+50*Point) oder (wenn (Low[i]<Close[N]-50*Point)
Wenn die Bedingung erfüllt ist, wird der Abstand von Close[N] zu High[i] in das Array x[high]=High[i] geschrieben.
Dann wird er jederzeit zufällig auf einen der Graphen geworfen.

Und wenn man mit Print(x[high]) prüft, zeigen 1-2 von zehn Werten weniger als 50! Einer hat 12, der andere 49. Obwohl es streng genommen+50*Punkte sind. 8-9 sind richtig (über 50) und 1-2 sind abnormal. Es ist nicht durch den Tester, aber mit einem echten Chart platziere ich einen Expert Advisor (ohne Handelsfunktionen), aber mit den oben genannten arbeitet er mit der Historie und zeigt falsche Ergebnisse an.

Je größer der Wert ist, desto weniger treten solche Fehler auf. Ich dachte, es könnte die Streuung sein, die stört, aber... Ich glaube nicht, dass es in MT4 einen Spread für die Historie gibt.

Gelöst.

 
Muss ich RefreshRates() zu OnTimer() hinzufügen, oder aktualisiert sich der Timer standardmäßig selbst?
 
Ivan Butko #:
Muss ich RefreshRates() zu OnTimer() hinzufügen, oder aktualisiert sich der Timer standardmäßig selbst?
Das tut es nicht
 
Aliaksandr Hryshyn #:
Wird nicht aktualisiert

Dankeschön

 
Artyom Trishkin #:

Um herauszufinden, wie die letzte Position geschlossen wurde, müssen Sie sie finden. Solange sie offen ist, gibt es keine Möglichkeit, aufzuzeichnen und sich zu merken, wie sie geschlossen wurde - sie ist immer noch offen.

Es ist möglich, ein Ticket der zuletzt geöffneten Position zu speichern und damit zu bestimmen, wie sie geschlossen wurde, aber ... Bei der Manipulation einer offenen Position kann sich deren Ticket ändern. Dementsprechend müssen wir eine Funktion implementieren, um das geänderte Ticket neu zu schreiben. All dies verkompliziert den Code.

Ich habe nur vorgeschlagen, nach der letzten geschlossenen Position zu suchen. Und es kombiniert die Suche nach allen Positionen beim Neustart des EA und liest nur die Daten einer Position beim Schließen einer neuen Position.

Schließlich hoffe ich, dass alle verstehen, dass wir dafür nicht alle historischen Positionen durchlaufen müssen, sondern nur die letzte. D.h. wir merken uns nur eine Variable des Schleifenindexes - den aktuellen Wert - und wir beginnen eine neue Schleife (wenn die Anzahl der historischen Aufträge steigt) mit dem Wert dieser Variable, nicht mit Null. Und der Wert dieser Variablen wird in OnInit() beim Start und Neustart des Expert Advisors sowie beim Schließen einer neuen Position geschrieben. D.h. auf diese Weise vermeiden wir die Notwendigkeit, Positionsdaten zu schreiben und zu lesen und mit dem Antrieb zu arbeiten.

Meiner Meinung nach ist dieser Ansatz am rentabelsten, denn

1. Sie müssen sich nur den Wert des Schleifenindexes
2 merken. Abrufen von Daten nur zum erforderlichen Zeitpunkt durch direkten Zugriff auf einen abgeschlossenen Auftrag über dessen Index
3. Sie müssen keine Lese-/Schreibfunktion erstellen
4. Es geht schneller, sowohl beim Arbeiten als auch beim Schreiben.

Und ja, ich stimme zu, dass Sie alle Ihre Daten kennen müssen - ich tue es selbst. Sie zu kennen, ist jedoch für das Programm und für Sie selbst wünschenswert.

Ich habe nicht bemerkt, dass sich das Ticket einer Position ändert, während sie offen ist. Sie entspricht in der Regel dem Ticket der ersten Bestellung, die diese Position eröffnet hat.

Der letzte wurde geschlossen - was ist, wenn mehr als ein EA auf dem Symbol gehandelt wird, plus manueller Handel?
 
JRandomTrader #:

Ich habe nicht bemerkt, dass sich das Ticket einer Position ändert, während sie offen ist. Es ist in der Regel dasselbe wie das Ticket des ersten Auftrags, mit dem die Position eröffnet wurde.

Zuletzt geschlossen - aber was ist, wenn es mehr als einen EA gibt, der auf dem Symbol handelt, plus manuellen Handel?

Ein Voll- oder Teilschluss, und das Ticket ist anders. Wir müssen feststellen, welches Ticket von welchem Ticket stammt, und das erinnerte Ticket neu schreiben. Es ist jedoch nicht klar, über welche Plattform wir sprechen - beide sind leicht unterschiedlich, aber man muss trotzdem den Überblick behalten.

Gemeint ist die "letzte geschlossene, zu diesem EA gehörende".