Fragen zu OOP in MQL5 - Seite 42

 
Igor Makanu:

...

alle Aufrufe in privaten Methoden, aber gibt es eine "Jedi-Mentalität?", um CheckPointer(m_order)==POINTER_INVALID im Quellcode zu vermeiden

...

Es ist wahrscheinlicher, dass es sich nicht um einen Trick handelt, sondern dass der Algorithmus so beschaffen ist, dass dieser Teil des Codes nicht ausgeführt wird, wenn es keine Reihenfolge gibt.

Vielleicht war das auch so beabsichtigt. Aber unwahrscheinlich, wenn es einen Zeiger gibt, bedeutet das nicht, dass es einen Auftrag gibt, also müssen wir prüfen, ob es einen Auftrag gibt.

 
Igor Makanu:

und wenn ich mich richtig erinnere, war es zu Beginn des Jahres möglich, NULL im Protokoll zu löschen und dort 0 zu erhalten, jetzt gibt es einen Fehler

Änderungen

Forum zum Thema Handel, automatische Handelssysteme und Strategietester

Wanzen, Wanzen, Fragen

Kirill Belousov, 2017.12.14 21:34

Print(NULL); // 'NULL' - expression of 'void' type is illegal
Alert(NULL); // 'NULL' - expression of 'void' type is illegal

Zeit für den Ruhestand

 
A100:

Änderungen

Ja, in der Tat, aber ich erinnerte mich, wie ich es in MT4 zu tun, das ist, wie ich deregistriert die Zeiger:

class A {};

A *a;
void OnStart()
{  Print("1 : ",a);
   a= new A;
   Print("2 : ",a);
   a = NULL;
   Print("3 : ",a);

delete a;
}

2019.09.17 07:52:40.855 tst (EURUSD,H1) 1 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 2 : 1048576

2019.09.17 07:52:40.856 tst (EURUSD,H1) 3 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 nicht gelöschte Objekte übrig

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 Objekt vom Typ A übrig

2019.09.17 07:52:40.856 tst (EURUSD,H1) 24 Bytes an ausgelaufenem Speicher

Dmitry Fedoseev:

Dies ist wahrscheinlich nicht der Fall. Der Algorithmus sollte so beschaffen sein, dass dieser Teil des Codes nicht ausgeführt wird, wenn kein Auftrag vorliegt.

Vielleicht ist es aber auch so gewollt. Aber es ist unwahrscheinlich, wenn es einen Zeiger gibt, bedeutet das nicht, dass es einen Auftrag gibt, also müssen wir prüfen, ob es einen Auftrag gibt.

Je nach Problem habe ich bereits in Code geschrieben, wie man ein "Order-Objekt" erstellt, das selbst nachschaut, was auf dem Markt ist - Suche nach einer Order im Designer mit Hilfe einer Magie, wenn es gefunden wird, wird es sie aufheben, eine Order zu einem Preis öffnen, der Ordertyp selbst zählt (Markt oder Pending), Lot-Normalisierung, erneuter Versuch, eine Order zu öffnen, wenn Requotes auf einem vorherigen Tick waren, nach einer erfolgreichen Orderplatzierung auf dem nächsten Tick, einen Sl platzieren und so weiter... dies alles geschieht von selbst, ohne dass das "Auftragsobjekt" eingreifen muss.

Und wenn der Auftrag geschlossen wurde, ist er für die Strategie immer noch da - schließlich interessiert sich die Strategie für den Auftragsgewinn (aktuell oder bereits geschlossen - das spielt keine Rolle!) und für denZustand des Auftrags selbst (noch nicht erteilt, aktiv und bereits geschlossen)


alles funktioniert wie geplant, vielleicht haben Sie irgendwo Recht, aber für jetzt ist der Code noch getestet werden, Zeiger müssen überprüft werden, später können wir versuchen, ohne diese Prüfung ... obwohl die Logik der Arbeit impliziert die folgenden Aktionen, wenn es keine solche Objekt.... im Prinzip nicht viel übrig, um alles zu virtuellen Bestellungen neu zu machen, muss ich noch denken ))))

 
Igor Makanu:

Ich wollte schreiben, was ich früher hatte, anstatt

Es war so:

erinnerte mich aber daran, wie man Makro-Ersetzungen in MQL überprüft

2019.09.16 22:57:42.837 tst (EURUSD,H1) a = 1

2019.09.16 22:57:42.837 tst (EURUSD,H1) POINTER_INVALID = 0

2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0


und wenn ich mich recht erinnere, war es zu Beginn des Jahres möglich, NULL in das Protokoll zu drucken und dort 0 zu erhalten, jetzt erscheint ein Fehler

D.h. das Verhalten NULL as if sollte sich in Zukunft nicht ändern, aber was dort anstelle von NULL ersetzt wird, ist nicht klar, wahrscheinlich wenn diese Situation jetzt geprüft wird, wie geschriebenif(CheckPointer(m_order)==POINTER_INVALID)) ) ist es sozusagen der richtige Code))

Sie können sich gerne bewerben. Mit 98%iger Sicherheit ist NULL im Quellcode etwas wie #define NULL nullptr
 
Vladimir Simakov:

Und dann gibt es noch das hier, für Zucker:

Der erste einfache Test zeigt

void OnStart()
{
    A * const a = new A;
    DELETE(a); //Error: 'a' - constant cannot be modified
}

dass es kein Zucker ist, sondern ein anderer... mehr flüssige Substanz

 
A100:

Der erste einfache Test zeigt

dass es kein Zucker ist, sondern ein anderer... flüssigeren Stoff.

Weil es nicht da ist.) NULL ist weder hier noch dort. Sie sollten die Funktion CheckPointer() verwenden. Der Zeiger selbst muss nicht auf Null gesetzt werden - nach dem Löschen wird er von selbst POINTER_INVALID.

 
Dmitry Fedoseev:

Denn das ist nicht der Ort, an dem Sie sich befinden.) NULL ist weder hier noch dort. Sie sollten die Funktion CheckPointer() verwenden. Sie brauchen den Zeiger nicht selbst auf Null zu setzen, er wird nach dem Löschen von selbst POINTER_INVALID.

Wenn man Admins liest, hört sich das in der Regel so an: "Schreibt eure Codes richtig

MQL im Allgemeinen ist immer schwierig, neue Build, neue Probleme, Sie beginnen, um herauszufinden, wenn ich es falsch verwendet, hier gehen Sie und unterzeichnen Sie es ))))

 
A100:

Der erste einfache Test zeigt

dass es kein Zucker ist, sondern ein anderer... mehr flüssige Substanz

Guter Mann. Wo sind die Statistiken über Ihre freiberufliche Arbeit, Ihre Produkte auf dem Markt, Ihre Veröffentlichungen zum Thema Programmierung? Oder versuchen Sie, jemandem die Augen über das Thema der konstanten Zeiger zu öffnen oder Ihr Wissen über das Thema der Stofftypen aufblitzen zu lassen...? Bitte beachten Sie in Zukunft den Kontext der Beispiele und versuchen Sie nicht, einen Compilerfehler zu reproduzieren.
 
Vladimir Simakov:
Lieber Mann. Wo sind die Statistiken über Ihre freiberuflichen Aufträge, Produkte auf dem Markt, Veröffentlichungen im Zusammenhang mit der Programmierung? Oder wollen Sie jemandem die Augen über das Thema der konstanten Zeiger öffnen, oder Ihr Wissen über das Thema der Stoffarten aufblitzen lassen ...? Bitte beachten Sie in Zukunft den Kontext der Beispiele und versuchen Sie nicht, einen Compilerfehler zu reproduzieren.

Ich habe einen einfachen Zusammenhang: Wenn der Code (in diesem Fall ein Makro) mit einem Fehler geschrieben ist, denke ich, dass es möglich ist, ihn zu melden (und ein Beispiel zu geben, um es zu beweisen). Und in diesem Zusammenhang ist mir nicht klar, wasdie Statistik damit zu tun hat

 
A100:

Und in diesem Zusammenhang ist mir nicht klar, was die Statistik damit zu tun hat.

Halten Sie es einfach und die Leute werden zu Ihnen kommen.

;)

SZZY: Ihre Beiträge sind fast immer eine gute Idee, aber die Präsentation von Material, na ja, nicht ganz mit guten Absichten, natürlich Ihr Geschäft, aber imho, wollen helfen - helfen, wollen clever sein, na ja, oft stellt sich heraus, so

Es liegt an Ihnen, aber Sie können Ihr Selbstwertgefühl mit Online-Ressourcen stärken - .... Ich bin zu faul, um weiter zu tippen.