Fehler, Irrtümer, Fragen - Seite 2012

 
A100:

Ein weiterer Fehler ist, dass die 32-Bit-Version (bei mir ist es genau die) keine Fehler bei der Ausführung aufweist. ungültiger Zeiger - nur wenn die Klasse um ein Mitglied erweitert wird, z. B. int i

Sie müssen auf MT4 getestet haben, aber auch dort ist der Build niedriger.

 
Kirill Belousov:

Fehler.

Der Fehler 4200 wird nicht generiert, wenn ein doppeltes Objekt auf der NICHT AKTUELLEN KARTE erstellt wird (was auf der aktuellen Karte der Fall ist - [siehe "AKTUELLE KARTE" im Protokoll]),

sowie herausgefunden, dass die Suche nach einem Objekt in der AKTUELLEN KARTE bis zu 500 Mal länger dauert als die Suche nach dem aktuellen Objekt.

а :) denn es hat sich herausgestellt, dass ich nicht der Einzige bin, der dieses Problem hat.

Das Objekt wird nicht sofort beim Funktionsaufruf erzeugt. Ein asynchroner Befehl wird an das Diagramm gesendet. Für unsere eigene Karte haben wir die Möglichkeit, eine Vorabkontrolle durchzuführen. Für das Horoskop eines anderen gibt es diese Möglichkeit nicht - oder besser gesagt, es gibt sie, aber sie ist sehr teuer.

Der Rückgabewert "keine Fehler" bedeutet daher, dass dieses sehr fremde Diagramm gefunden wurde und der Befehl zur Objekterstellung erfolgreich in die Warteschlange zur Ausführung gestellt wurde.

 
fxsaber:

Sie müssen es auf MT4 getestet haben, aber auch dort ist der Build niedriger.

MT5\1653\32\Win10 - mein Code erreicht die Zeile //Ergebnis: false

Wenn Sie auch 32-Bit und einen ungültigen Zeiger haben - dann ist es ein Zufallsfehler

Das schreibt ServiceDesk: Die Funktion f ist leer und der Aufruf wird vom Optimierer herausgeschnitten, ebenso wie der Aufruf des Kopieroperators.

Aber wenn

        void f() { Print( __FUNCTION__ ); }

dann Ergebnis:

2017.09.26 14:03:55.853 Demo (GBPUSD,M15) A::f
2017.09.26 14:03:55.853 Demo (GBPUSD,M15) false
im Wesentlichen keine Änderung

 
A100:

Wenn Sie auch 32 Bit haben - dann irgendeinen zufälligen Fehler bei allen

Nein, ich habe Win7x64 benutzt.

ServiceDesk sagt das: Die Funktion f ist leer und der Aufruf wird vom Optimierer herausgeschnitten, genau wie der Aufruf des Kopieroperators aus Schritt 1.

Aber wenn

dann ändert sich nichts

Ich habe schon erlebt, dass die Vertriebsmitarbeiter schnell reagieren, ohne zu prüfen. Und für 90 % der Anwendungen ist dies wahrscheinlich richtig, da die meisten Anwendungen wahrscheinlich nicht auf Fehler, sondern auf Unwissenheit zurückzuführen sind. Bitte sehen Sie sich das genauer an - es funktioniert.

 

Ein Seitenfehler mit Links.

Wenn ein Forumsbeitrag von einem Moderator in ein anderes Thema verschoben wurde, wird dieser Beitrag in der Profilsuche "Alle Beiträge" mit dem alten Ort verlinkt. Sie kann daher nicht angesteuert werden.

 
A100:

MT5\1653\32\Win10 - Ich komme zur Zeile //Ergebnis: false

Wenn Sie auch 32-Bit und einen ungültigen Zeiger haben - dann ist es ein Zufallsfehler.

Das schreibt ServiceDesk: Die Funktion f ist leer und der Aufruf wird vom Optimierer herausgeschnitten, ebenso wie der Aufruf des Kopieroperators.

Aber wenn

dann Ergebnis:

2017.09.26 14:03:55.853 Demo (GBPUSD,M15) A::f
2017.09.26 14:03:55.853 Demo (GBPUSD,M15) falsch
im Wesentlichen keine Veränderung

Ich füge hinzu, dass die Funktion f keine Objektfelder anspricht, so dass ein Objektzeiger (this) für die Funktion f nicht benötigt wird.
Der Optimierer entfernt die unnötige Dereferenzierung des Handles (denken Sie daran, in MQL ist das Handle ein Zeiger) auf den Objektzeiger, da er (der Zeiger) nicht innerhalb von f verwendet wird

 
Ilyas:

Ich möchte noch hinzufügen, dass die Funktion f keine Adressierung von Objektfeldern enthält und daher keinen Zeiger auf ein Objekt (this) für die Funktion f benötigt.
Der Optimierer entfernt die unnötige Dereferenzierung des Handles (erinnern Sie sich, in MQL ist der Zeiger ein Handle) auf den Objektzeiger, da er (der Zeiger) nicht innerhalb von f verwendet wird

Es ist klar, dass wir mit f wie mit statisch arbeiten. Aber wie kann man erklären, dass der eine läuft und der andere unterbricht?

 
In der Tat wäre dies zumindest praktisch.
input string Value = _MarketWatch; // Выпадающий список (а-ля enum) символов из Обзора рынка

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

ENUM Symbolliste als INPUT

Martin Nohejl, 2017.09.26 13:01

Hallo, ich werde das Folgende tun:

Ich möchte ein Symbol als Eingabeparameter haben , also möchte ich eine Eingabevariable (Aufzählung), aus der ich das richtige Symbol auswähle, wie folgt:

Ich habe dies mit diesem Code getan:

enum ENUM_SYMBOL
   { 
    EURUSD=0, 
    GPBUSD=1, 
    USDCHF=2
   };

Das funktioniert bei mir perfekt. Aber ich möchte die Aufzählung dynamisch mit der gesamten Liste der Symbole füllen (SymbolsTotal(0);).

Irgendwie wahrscheinlich per Code:

int a = SymbolsTotal(0);
for(int i=0; i!=a;i++){
....
}
 
fxsaber:

Es ist klar, dass wir mit f wie mit statisch arbeiten. Aber wie ist es zu erklären, dass der eine ausgeführt und der andere unterbrochen wird?

Höchstwahrscheinlich starten Sie die Fehlersuche (F5) und A100 kompiliert (F7) zuerst und erstellt dann Diagramme.

Beim Kompilieren zum Debuggen entfernt der Optimierer nur explizit nicht verwendeten Code, alle anderen Optimierungen werden nicht durchgeführt.
 
Ilyas:
Höchstwahrscheinlich starten Sie das Debugging (F5) und A100 kompiliert zuerst (F7) und wirft es dann auf das Diagramm.

Beim Kompilieren zum Debuggen entfernt der Optimierer nur explizit nicht verwendeten Code, alle anderen Optimierungen werden nicht durchgeführt.

Ich habe dieses Merkmal sofort berücksichtigt. Ich habe das jetzt selbst noch einmal überprüft.

Release-Version:

Test (EURUSD,H1)        invalid pointer access in 'Test.mq5' (9,11)
Grund der Beschwerde: