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

 
Alexey Viktorov:
Artem, du irrst dich. Das auf globaler Ebene deklarierte Array ist in allen Teilen des Programms sichtbar, und es ist nicht notwendig, es irgendwo von irgendwoher zu übergeben. Man füllt sie einfach an einer Stelle im Programm aus, sortiert sie an einer anderen und liest sie an einer dritten, das spielt keine Rolle.

Dieselbe Funktion kann erfolgreich Daten in verschiedenen Arrays sortieren und/oder suchen. Oder? Und wenn ja, ist es besser, das Array per Referenz zu übergeben - für die Zukunft. Und beim Aufruf der Funktion kann es nicht schaden, zu sehen, mit welchem Array sie funktioniert.

Ich stelle nur diese Überlegungen an. Wo liege ich falsch?

 
Artyom Trishkin:

Dieselbe Funktion kann erfolgreich Daten in verschiedenen Arrays sortieren und/oder suchen. Oder? Und wenn ja, ist es besser, das Array per Referenz zu übergeben - für die Zukunft. Und wenn Sie die Funktion aufrufen, sollten Sie auch das Array sehen können, mit dem sie arbeiten wird.

Nur in diesem Punkt habe ich Recht. Wo liegt der Fehler?

Ich hab's. Ihr Rat ist für Lego-Programmierer. Sie machen diese Perversion nicht selbst.

Das lässt eine Sache falsch, dass das Array global deklariert werden muss.

Ich bin froh, dass wir uns verstehen.

 
Alexey Viktorov:

Ich hab's. Ihr Rat ist für Lego-Programmierer. Sie selbst machen solche Perversionen nicht.

Dann bleibt nur noch der Fehler, dass das Array global deklariert werden muss.

Schön, dass wir uns verstehen.

Was ich in diesem Zusammenhang sagen will, ist Folgendes:

  1. Wir müssen so wenige Schleifen pro Tick wie möglich erreichen.
  2. Wir möchten ein konstantes Array mit Daten von Marktaufträgen und Positionen und ein Array mit Daten von gelöschten/geschlossenen Aufträgen und Positionen haben
  3. Wenn wir das Array lokal in einer Funktion haben, muss es bei wiederholtem Aufruf erneut gefüllt werden. Ich schlage vor, dass es nur einmal bei einem neuen Tick gefüllt wird - das Array ist also global, sonst würden wir es beim Verlassen der Funktion verlieren.
  4. Um etwas darin (im Array) zu finden, brauchen wir ein gefülltes Array und Funktionen, die die gefundenen Daten zurückgeben. Innerhalb von Funktionen können wir Hilfsarrays für notwendige Berechnungen deklarieren.

Aus diesem Grund wäre es besser, globale Arrays zu haben - für geschlossene und offene Aufträge und Positionen. Bei einem neuen Tick übergeben wir einmalig die erforderliche Anzahl von Aufträgen/Positionen und füllen damit zwei Arrays. Und dann bekommen wir von ihnen alle notwendigen Daten auf denselben Tick. Beachten Sie, dass nicht nur der letzte geschlossene/offene Auftrag/die letzte offene Position und alle zugehörigen Daten berechnet werden, sondern auch alle übergeordneten und untergeordneten Ticks aller Positionen im Falle einer teilweisen Schließung durchsucht werden. Dementsprechend kann ich jederzeit sehen, aus welchem Ticket diese oder jene Position stammt, wenn sie mehr als einmal teilweise geschlossen wurde - all das funktioniert bereits in einer Klasse, die in einem Timer läuft. Ich habe viele andere Daten, die ich mit einer geringen Gesamtzahl von Zyklen benötige. Die erforderliche Tiefe der Historie für Arrays wird für den Prüfer festgelegt.

Und so weiter und so fort ...

 
Artyom Trishkin:

In diesem Zusammenhang möchte ich auf Folgendes hinweisen:

  1. Wir müssen so wenige Zyklen pro Tick wie möglich erreichen.
  2. Wir benötigen ein konstantes Array mit den Daten der Marktaufträge und Positionen und ein Array mit den Daten der gelöschten/geschlossenen Aufträge und Positionen
  3. Wenn wir das Array lokal in einer Funktion haben, muss es bei wiederholtem Aufruf erneut gefüllt werden. Ich schlage vor, dass es nur einmal bei einem neuen Tick gefüllt wird - das Array ist also global, sonst würden wir es beim Verlassen der Funktion verlieren.
  4. Um etwas darin (im Array) zu finden, brauchen wir ein gefülltes Array und Funktionen, die die gefundenen Daten zurückgeben. Innerhalb von Funktionen können wir Hilfsarrays für notwendige Berechnungen deklarieren.

Aus diesem Grund wäre es besser, globale Arrays zu haben - für geschlossene und offene Aufträge und Positionen. Bei einem neuen Tick übergeben wir einmalig die erforderliche Anzahl von Aufträgen/Positionen und füllen damit zwei Arrays. Und dann bekommen wir von ihnen alle notwendigen Daten auf denselben Tick. Beachten Sie, dass nicht nur der letzte geschlossene/offene Auftrag/die letzte offene Position und alle zugehörigen Daten berechnet werden, sondern auch alle übergeordneten und untergeordneten Ticks aller Positionen im Falle einer teilweisen Schließung durchsucht werden. So kann ich jederzeit sehen, welches Ticket von der einen oder anderen Position stammt, ob es teilweise mehrfach geschlossen wurde - all das funktioniert bereits in einer Klasse, die in einem Timer läuft. Ich habe viele andere Daten, die ich mit einer geringen Gesamtzahl von Zyklen benötige. Für den Prüfer wird die gewünschte Tiefe der Historie für die Arrays festgelegt.

Und so weiter und so fort ...

Wir verstehen uns also nicht ganz.

Wenn das Array global ist, warum sollte es dann per Referenz an eine Funktion übergeben werden, wenn es innerhalb dieser Funktion bereits sichtbar ist?

 
Alexey Viktorov:

Dann verstehen wir uns nicht ganz.

Wenn das Array global ist, warum sollte es dann per Referenz an eine Funktion übergeben werden, wenn es in dieser Funktion bereits sichtbar ist?

Funktionsüberladung - es gibt so einen Begriff ;)

Wenn Sie die gleichen Aktionen mit verschiedenen Arrays in einer Funktion durchführen müssen, dann...

Aber - wir sprechen hier über verschiedene Sonderfälle...

 
Artyom Trishkin:

Funktionsüberladung - so ein Konzept gibt es ;)

Wenn Sie die gleichen Aktionen mit verschiedenen Arrays in einer Funktion durchführen müssen, dann...

Aber - wir sprechen hier über verschiedene Sonderfälle...

Nun, Gott sei Dank, ich habe Ihre Gedanken verstanden. Aber sie sind den Ratschlägen für Lego-Programmierer sehr ähnlich.
 
Alexey Viktorov:
Nun, Gott sei Dank verstehe ich Ihre Gedanken. Aber sie sind sehr ähnlich wie Ratschläge für Lego-Programmierer.

Es wäre sehr seltsam, eine große Anzahl von 100% funktionierenden Funktionen auf Lager zu haben und sie jedes Mal neu zu schreiben. Dies ist kein Ratschlag für den Bau von Häusern aus Würfeln. Es ist ratsam, eigene Funktionsbibliotheken und Klassen zu erstellen. Und was ist falsch an einer Funktion, die mehrere Arrays verarbeitet, je nachdem, welches per Referenz an sie übergeben wird? Und was ist falsch an Funktionsvorlagen?

Wenn Sie Code zum Sortieren eines Arrays haben, warum sollten Sie für jeden Array-Typ eine eigene Funktion schreiben? Sie können jeden Typ einfach überladen und sortieren. Wie funktioniert ArraySort() Ihrer Meinung nach? Man übergibt dort verschiedene Typen von Arrays, und bei einer Ausgabe erhält man das sortierte, das übergeben wurde - oder Meta-Quoten auch Lego-Coder oder was?

 
Artyom Trishkin:

Es wäre sehr seltsam, eine große Anzahl von 100% funktionierenden Funktionen auf Lager zu haben und sie jedes Mal neu zu schreiben. Dies ist kein Ratschlag für den Bau von Häusern aus Würfeln. Es ist ratsam, seine eigenen Funktionsbibliotheken und Klassen zu erstellen. Und was ist falsch an einer Funktion, die mehrere Arrays verarbeitet, je nachdem, welches per Referenz an sie übergeben wird? Und was ist falsch an Funktionsvorlagen?

Wenn es einen Code zum Sortieren eines Arrays gibt, warum sollten wir dann für jede Art von Array eine eigene Funktion schreiben? Sie können einfach eine Überladung durchführen und jeden Typ sortieren. Wie funktioniert ArraySort() Ihrer Meinung nach? Du übergibst dort verschiedene Arten von Arrays, und die Ausgabe ist eine sortierte, die du übergeben hast - oder Metaquotes auch Lego-Coder, oder was?

Die Hauptsache ist, dass es nicht so weit kommt.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Простой советник. Проверка размера бара. Покупка/продажа
Простой советник. Проверка размера бара. Покупка/продажа
  • www.mql5.com
Что должен делать советник: на каждом тике проверять размер бара как только размер бара станет равным или превысит заданный размер то: если свеча б...
 
Alexey Viktorov:

Die Hauptsache ist, dass es nicht so weit kommt.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Das nützt nichts. Es gibt eine Prüfung, um zu sehen, ob es stimmt, und eine weitere Prüfung, um zu sehen, ob es stimmt. Es ist immer noch schief. Das ist nicht der Fall - hier werden Professoren gebraucht.
 

gibt es eine Variable

int Level = 0;

Während das Programm läuft, ändert es sich ständig. Helfen Sie mir, eine Bedingung zu schreiben: wenn sich der Pegel NICHT geändert hat, nichts tun, wenn sich der Pegel geändert hat (egal ob mehr oder weniger), eine Aktion ausführen { operator }

Grund der Beschwerde: