Fehler, Irrtümer, Fragen - Seite 1904

 
Artyom Trishkin:

Wenn es mehrere Instanzen gibt, warum die gleiche Berechnung in anderen Instanzen derselben Klasse duplizieren?

Warum brauchen Sie weitere Instanzen, wenn es nur eine Berechnung gibt?


Artyom Trishkin:
Andrey, könnten Sie etwas genauer werden? Das verstehe ich nicht ganz.

Beschreiben Sie das Problem genauer, dann wird die Antwort konkreter sein.

 
Artyom Trishkin:

Die Berechnung ist nicht eindeutig - wenn es nur eine einzige Instanz der Klasse gibt, dann sollte die Berechnung auch eindeutig sein, wenn es mehrere Instanzen gibt, warum dann die gleiche Berechnung in anderen Instanzen der gleichen Klasse duplizieren? Es braucht Ressourcen.

Gleichzeitig ist ein weiterer langer Zyklus in der übergeordneten Klasse zur Berechnung eben dieser Daten auch nicht optimal (wir haben bereits zwei lange Zyklen), und die untergeordnete Klasse ist dann nicht autark.

Ich habe vorgeschlagen, wie wir das, was wir brauchen, ohne Doppelarbeit erledigen können. Wir sprechen hier nicht von Nachkommenschaft.
 

Guten Tag!

Nach 4 Jahren kehrte ich zu einem EA zurück (ich hatte ihn 2013 gekauft und dann vergessen). Ich beschloss, es noch einmal zu versuchen. Aber jetzt meldet das System einen Fehler in einer der Codezeilen. Ich vermute, dass sich in den 4 Jahren mit Metatrader etwas geändert hat, denn vorher hat es gut funktioniert. Ich habe keine Ahnung, wie man programmiert, deshalb habe ich Expert Advisor gekauft). Können Sie mir sagen, was der Fehler sein könnte?

Hier ist ein Teil des Codes

extern int Bperiod = 20; // Mittelungszeitraum der Hauptindikatorlinie.

extern int Bdeviation = 2; // Abweichung von der Basislinie.

extern int Bshift = 0; // Verschiebung des Indikators relativ zum Kurschart.

extern int Baprice = 0; // CLOSE=0, OPEN=1, HIGH=2, LOW=3, MEDIAN=4, TYPICAL=5, WEIGHTED=6 .

externer String _6 = "========";

extern bool UseAutoDig = true; // If=true->externe Variablen in Punkten werden mit 10 multipliziert.

extern bool UseECN\NDD = true; // Wenn=true->Bestellungen werden ohne Stopps gesetzt, dann geändert.

Der Fehler wird in der letzten Zeile des

UseECN\NDD-Befehls

angezeigt,

dieser Befehl wird im EA viele Male wiederholt und ein Fehler tritt in jeder Zeile mit diesem Befehl aufBeispiele für

Fehler

'\' - illegale Escape-Sequenz e_plat2.mq4 49 22

'NDD' - Semikolon erwartet e_plat2.mq4 49 23

'UseECN' - nicht deklarierter Bezeichner e_plat2.mq4 144 6

'NDD' - nicht deklarierter Bezeichner e_plat2.mq4 144 13

'NDD' - irgendein Operator erwartet e_plat2.mq4 144 13

UseECN' - nicht deklarierter Bezeichner e_plat2.mq4 172 6

'4206' - case value already used e_plat2.mq4 643 8


Woran kann das liegen?




 
platoshkasexy:

UseECN\NDD dieser Befehl wird im Expert Advisor mehrmals wiederholt und in jeder Zeile, in der er vorkommt, wird ein Fehler angezeigt

Ersetzen Sie im gesamten Code "UseECN\NDD" durch "UseECN_NDD" (Strg+H)

 
Andrey Khatimlianskii:

Ersetzen Sie im gesamten Code "UseECN\NDD" durch "UseECN_NDD" (Strg+H)


Ich danke Ihnen vielmals! Sieht aus, als wäre es kompiliert!

Ich werde es testen...

 
Andrey Khatimlianskii:

Warum gibt es weitere Instanzen, wenn es nur eine Berechnung gibt?


Sie sollten das Problem genauer beschreiben, dann wird die Antwort konkreter.

Die Klasse verfügt über eine Schleife, die Daten zu allen Aufträgen und Positionen 1) im Konto und 2) nur zu denen, die dem Filter m_symbol und m_magic entsprechen, sammelt.

Wenn die Schleife abgeschlossen ist, haben wir also 1) Daten über das gesamte Konto und 2) nur über die Aufträge und Positionen, die zum EA gehören.

Wenn ein EA jedoch mehrere Symbole oder Magier verwendet, müssen wir Instanzen der Klasse erstellen, um Statistiken für jedes Symbol/jede Magie zu sammeln. Hier stellt sich die Frage: Warum müssen wir in diesen neuen Instanzen Statistiken (1) erheben, die bereits in der allerersten Instanz der Klasse erhoben wurden?

Daher die Frage - wie innerhalb der Klasse zu wissen, ob seine Instanz die einzige ist, und daher brauchen, um Statistiken 1 zu sammeln, oder, wenn die Instanz nicht die einzige ist, nicht um Statistiken 1 zu sammeln, und geben Sie es von der allerersten Instanz (hier ist auch nicht klar, wie innerhalb der Klasse, wenn es nicht die einzige Instanz ist, um die Anforderung an die allererste Instanz der Klasse umleiten, um Statistiken 1 zu geben)

 
Artyom Trishkin:

Die Klasse verfügt über eine Schleife, die Daten zu allen Aufträgen und Positionen 1) im Konto und 2) nur zu denen, die dem Filter m_symbol und m_magic entsprechen, sammelt.

Wenn die Schleife abgeschlossen ist, haben wir also 1) Daten über das gesamte Konto und 2) nur über die Aufträge und Positionen, die zum EA gehören.

Wenn ein EA jedoch mehrere Symbole oder Magier verwendet, müssen wir Instanzen der Klasse erstellen, um Statistiken für jedes Symbol/jede Magie zu sammeln. Hier stellt sich eine Frage: Warum müssen wir in diesen neuen Instanzen Statistiken (1) erheben, die bereits in der ersten Instanz der Klasse erhoben wurden?

Daher die Frage - wie innerhalb der Klasse zu wissen, dass seine Instanz die einzige ist, und daher die Notwendigkeit, Statistiken 1 zu sammeln, oder, wenn die Instanz nicht die einzige ist, dann nicht sammeln Statistiken 1, und geben Sie es von der allerersten Instanz (auch noch nicht klar, wie innerhalb der Klasse, wenn es nicht die einzige Instanz ist, um die Anforderung an die allererste Instanz der Klasse für die Ausgabe von Statistiken 1 umzuleiten)

1) Sammle Statistiken für alle Magier/Werkzeuge innerhalb einer Klasse. Die Liste der Magier sollte während der Initialisierung angegeben und in einem Array abgelegt werden.

2) Wie bereits empfohlen, sollten die Ergebnisse der Statistik Nr. 1 statisch sein, und wenn sie verfügbar sind, sollten Sie keine Neuberechnung vornehmen.

 
Artyom Trishkin:

Die Klasse verfügt über eine Schleife, die Daten zu allen Aufträgen und Positionen 1) im Konto und 2) nur zu denen, die dem Filter m_symbol und m_magic entsprechen, sammelt.

Wenn die Schleife abgeschlossen ist, haben wir also 1) Daten über das gesamte Konto und 2) nur über die Aufträge und Positionen, die zum EA gehören.

Wenn ein EA jedoch mehrere Symbole oder Magier verwendet, müssen wir Instanzen der Klasse erstellen, um Statistiken für jedes Symbol/jede Magie zu sammeln. Hier stellt sich die Frage: Warum sollten wir in diesen neuen Instanzen Statistiken (1) erheben, die bereits in der ersten Instanz der Klasse erhoben wurden?

Daher die Frage - wie innerhalb der Klasse zu wissen, ob seine Instanz die einzige ist, und daher brauchen, um Statistiken 1 zu sammeln, oder, wenn die Instanz nicht die einzige ist, nicht um Statistiken 1 zu sammeln, und geben Sie es von der allerersten Instanz (hier ist auch nicht klar, wie innerhalb der Klasse, wenn es nicht die einzige Instanz ist, um die Anforderung an die allererste Instanz der Klasse umleiten, um Statistiken 1 zu geben)

Falls Englisch kein Problem ist - ich habe ein Beispiel für eine Hyperwürfelanalyse in meinem Blog veröffentlicht. Gehen Sie einmal durch die Historie und fordern Sie dann Informationen aus dem Hyperkubus in den gewünschten (verschiedenen) Slices an. Natürlich gibt es Selektoren sowohl nach Magier als auch nach Symbol.
 
Artyom Trishkin:

Daher die Frage - wie kann man innerhalb der Klasse wissen, dass ihre Instanz die einzige ist, was bedeutet, dass wir die Statistik 1 sammeln müssen, oder, wenn die Instanz nicht die einzige ist, sammeln wir die Statistik 1 nicht, sondern geben sie von der allerersten Instanz an aus

Das wurde Ihnen bereits gesagt:

Noch besser wäre es, alle einzigartigen Berechnungen in eine eigene Klasse zu packen und diese zu einem Singleton zu machen.

Wenn das erste Mal auf ein Singleton zugegriffen wird, lesen Sie die Statistiken und rufen sie dann nur noch ab.


 

Entwickler, bitte erklären Sie, warum das Ereignis des TypsOnTesterPass bei der Optimierung der Anzahl der Varianten größer als8,6e+18 nur bei der Erstellung einer neuen Generation aufgerufen wird?

Und warum findet sich in der Hilfedatei kein einziges Wort über diese Funktion?

Warum soll ich mich durch die Hälfte eines Expert Advisors wühlen, um eine Antwort darauf zu finden, warum diese Funktion in einem EA richtig funktioniert, während sie im anderen nur bei einer neuen Generation Optimierungsergebnisse in die Datei schreibt?


Wie kann ich diese Einschränkung umgehen?