Das EOP für Schulkinder. - Seite 17

 
Artyom Trishkin:

Es ist genau dasselbe wie bei den Variablen.

Und der Fokus:

Was ist der Sinn dieses Zeigers, wenn der Handel in der Funktion OnTrade verfügbar ist?

#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы

int OnInit()
{
 trade.SetExpertMagicNumber(123);
}

void OnTick()
{
 trade.Buy(0.1);
}
 
Alexey Viktorov:

Welchen Sinn hat dieser Zeiger, wenn er in der OnTrade-Funktion verfügbar ist?

Keine. Aber damit habe ich Ihnen den Unterschied zwischen der Art und Weise, wie Sie ein weiteres (zweites) Objekt desselben Typs schreiben, und der Art und Weise, wie Sie per Zeiger auf ein einzelnes Objekt zugreifen können, gezeigt.

Das war ein vereinfachtes Beispiel, um Ihre Frage nach Unterschieden und Vorlieben zu beantworten.

Sie wissen schon, Sie stellen Fragen mit allzu einfachen Beispielen, und wenn Sie eine Antwort erhalten, stellen Sie eine weitere - durchaus vernünftige - Frage: "Warum?"

Denn Ihre Beispiele brauchen nicht mit Klassen gelöst zu werden.

Hier gibt es zwei Möglichkeiten - entweder Sie lesen und verstehen, was man Ihnen sagt, oder... Oder Sie lösen Ihre Probleme verfahrenstechnisch. In diesem Fall werden Sie sich nicht fragen, "warum".

Stellen Sie sich nun vor, dass Ihre CTrade-Klasse nicht im globalen Bereich liegt. И ?

Stellen Sie sich auch vor, dass Sie nicht nur ein solches Objekt haben (wie es in fast allen Beispielen in kodobase der Fall ist), sondern so viele Symbole, wie Sie manuell im Programm hinzufügen/entfernen. И ?

 
Сергей Таболин:

Ist es in diesem Fall

falsche Beschreibung?

Meines Erachtens sollten alle Aufträge/Positionen diese Magie haben, wenn sie für EA eingestellt sind. ((

Warum ist sie plötzlich falsch?

Ein EA kann mehrere Magier haben, die alle ihm gehören.

Sogar in einem ulong-magic kann man eine allgemeine Experten-ID+einige Magier+einige andere IDs speichern und hat immer noch viel Platz übrig.

 
Artyom Trishkin:

Keine. Aber damit habe ich Ihnen den Unterschied zwischen der Art und Weise, wie Sie ein weiteres (zweites) Objekt desselben Typs schreiben, und der Art und Weise, wie Sie per Zeiger auf ein einzelnes Objekt zugreifen können, gezeigt.

Das war ein vereinfachtes Beispiel, um Ihre Frage nach Unterschieden und Vorlieben zu beantworten.

Sie wissen schon, Sie stellen Fragen mit allzu einfachen Beispielen, und wenn sie Ihnen antworten, stellen Sie eine weitere - durchaus vernünftige - Frage: "Warum?"

Denn Ihre Beispiele brauchen nicht mit Klassen gelöst zu werden.

Hier gibt es zwei Möglichkeiten: Entweder Sie lesen und verstehen, was man Ihnen sagt, oder... Oder Sie lösen Ihre Probleme verfahrenstechnisch. In diesem Fall werden Sie sich nicht fragen, "warum".

Stellen Sie sich nun vor, dass Ihre CTrade-Klasse nicht im globalen Bereich liegt. И ?

Stellen Sie sich auch vor, dass Sie nicht nur ein solches Objekt haben (wie es in fast allen Beispielen in kodobase der Fall ist), sondern so viele Zeichen, wie Sie manuell aus dem Programm hinzufügen/entfernen. И ?

Nein, Artyom, ich stelle Fragen zum Verständnis, nicht zur Anwendung. Und wenn Sie eine Lösung für eine idiotische Idee vorschlagen, dann frage ich "Warum?". Sehen Sie, wenn ich auf meine Weise zurückfrage und eine richtige oder falsche Antwort erhalte, dann werde ich alles, was mir darüber gesagt wurde, nicht mehr vergessen und mit Verständnis tun oder mit Verständnis nicht tun. Ich habe meine eigenen Kakerlaken...)) Ich weiß nicht, wie ich etwas tun soll, ohne es zu verstehen. Ich habe noch nie ein mathematisches Problem nur anhand einer Musterlösung gelöst. Ich weiß nicht, wie das geht. In dem Jahr, in dem ich die achte Klasse beendete, hatte ich 5 Fs und eine 2 in Mathe. Es war alles in Ordnung, ich durfte die Prüfungen unter der Bedingung ablegen, dass ich, wenn ich einen Aufsatz mit einer Drei schreiben würde, die Prüfungen bestehen, die F's korrigieren und auf die GPTU gehen dürfte. Das Institut wurde erst viel später gegründet. Dort bin ich am Programmieren erkrankt, aber es wurde nur oberflächlich gelehrt. Und OOP war zu dieser Zeit, wie mir scheint, vielleicht gerade erst erdacht worden.

 
Alexey Viktorov:

Nein, Artem, ich stelle Fragen zum Verständnis, nicht zur Anwendung. Und wenn Sie eine Lösung für eine idiotische Idee anbieten, dann frage ich "Warum?". Sehen Sie, wenn ich auf meine Weise zurückfrage und eine richtige oder falsche Antwort erhalte, dann werde ich alles, was mir darüber gesagt wurde, nicht mehr vergessen und mit Verständnis tun oder mit Verständnis nicht tun. Ich habe meine eigenen Kakerlaken...)) Ich weiß nicht, wie ich etwas tun soll, ohne es zu verstehen. Ich habe noch nie ein mathematisches Problem nur anhand einer Musterlösung gelöst. Ich weiß nicht, wie das geht. In dem Jahr, in dem ich die achte Klasse beendete, hatte ich 5 Fs und eine 2 in Mathe. Es war alles in Ordnung, ich durfte an den Prüfungen teilnehmen, unter der Bedingung, dass ich, wenn ich einen Aufsatz mit einer Drei schreiben würde, die Prüfungen bestehen dürfte, die F's korrigieren und zur GPTU gehen dürfte. Das Institut wurde erst viel später gegründet. Dort bin ich am Programmieren erkrankt, aber es wurde nur oberflächlich gelehrt. Und OOP war zu dieser Zeit, wie mir scheint, vielleicht gerade erst erdacht worden.

Dann ist es seltsam, dass Sie diese Fragen überhaupt gestellt haben.

Sie kennen den Unterschied zwischen Variablen, die in verschiedenen Bereichen deklariert sind. Sie tun es. Und Sie stellen eine Frage, als ob Sie zum ersten Mal etwas über denGeltungsbereich von Variablen hören.

Wenn Ihnen gezeigt wird, wie Sie einen Zeiger auf ein zuvor erstelltes Objekt verwenden können, stellen Sie eine seltsame Frage: "Warum, wenn das Objekt bereits sichtbar ist?". Es wurde Ihnen also nicht gezeigt, wie man es macht, sondern wie man in diesem Beispiel einen Zeiger erhält und über den Zeiger auf das Objekt verweist. Und es werden nicht zwei verschiedene Objekte in verschiedenen Bereichen sein, sondern eines.
Was aber, wenn sich das Objekt nicht im globalen Bereich, sondern innerhalb eines anderen Objekts befindet? Und dieses andere Objekt gibt einfach einen Zeiger auf das benötigte CTrade-Objekt zurück. In diesem Fall würde das Beispiel nicht zu der Frage "Warum? Ich denke, das wird es nicht. Man kann aber davon ausgehen, dass Sie die Einfachheit Ihres Beispiels verstehen und die globale Objektsichtbarkeit "hinter den Klammern" weglassen.

 
Artyom Trishkin:

Warum sollte sie plötzlich falsch sein?

Ein Experte kann mehrere Magier haben, die alle ihm gehören.

Sogar in einer Magie kann man eine gemeinsame EA-ID + mehrere Magien + mehrere verschiedene IDs speichern und hat immer noch jede Menge Platz übrig.

Das verstehe ich. Wenn Sie eine Handelsanfrage stellen, können Sie einen beliebigen Magier angeben. Ein EA kann jede neue Position mit einem neuen Magier eröffnen. Ich kodiere auch das Symbol, TF, etc. in meiner Magie. All dies ist klar.

Ich war mir nur sicher, dassSetExpertMagicNumber wie eine globale Lösung ist. Wenn eine Handelsanfrage nicht explizit eine Magie angibt, wird der überSetExpertMagicNumber eingestellte Wert übernommen. Ansonsten sehe ich persönlich keinen Sinn darin).

 
Сергей Таболин:

Das verstehe ich. Wenn Sie einen Handelsantrag stellen, können Sie einen beliebigen Assistenten angeben. Ein EA kann jede neue Position mit einer neuen Magie eröffnen. Ich kodiere auch ein Symbol, TF usw. in meiner Magie. All dies ist klar.

Ich war mir nur sicher, dassSetExpertMagicNumber wie eine globale Lösung ist. Wenn eine Handelsanfrage nicht explizit eine Magie angibt, wird der über SetExpertMagicNumber eingestellte Wert übernommen. Ansonsten sehe ich persönlich keinen Sinn darin ))

Die Methode setzt die magische Zahl nicht auf den Expert Advisor, sondern auf ein Objekt einer Handelsklasse. Es kann mehrere Handelsklassen in einem EA geben und für jede von ihnen kann eine separate magische Zahl festgelegt werden, die in ihrem Wert sowohl eine gemeinsame magische Zahl für den EA als auch eine separate magische Zahl für jedes der Handelsobjekte enthält.

 
Artyom Trishkin:

Dann ist es seltsam, dass Sie diese Fragen überhaupt gestellt haben.

Das ist überhaupt nicht seltsam. Wenn ich OOP überhaupt nicht verstehe, dann war ich mir nicht sicher oder hatte Zweifel daran, dass ich es richtig verstanden habe. Ich habe um eine Klarstellung gebeten, eine Bestätigung erhalten und bin mir jetzt sicher (für morgen). Wie dieser Monolog von G. Hazanov.

- Stellen Sie sich vor, Sie stehen am Fenster, und im Fenster gegenüber sitzt eine nackte Frau. Was fühlen Sie?

- Vertrauen in die Zukunft.

- Und was ist Ihr nächster Schritt?

- Ich ziehe in ein anderes Zimmer um. Ich habe dort ein größeres Fenster.

 
Alexey Viktorov:

Gehe ich recht in der Annahme, dass mit dieser Option

ohne eine Compilerwarnung zu berücksichtigen, kann die Position mit einer anderen Magic-Nummer als 123 geöffnet werden ?

Das heißt, dass in der Funktion OnTick ein neues Objekt erstellt wird und die darin enthaltene magische Zahl nicht gleich 123 ist.

Die Position wird mit der Magic-Nummer "0" eröffnet, d.h. die Zeile

void OnTick()
{
 CTrade trade;

erstellt das Objekt neu, und die CTrade-Magie wird bei der Erstellung eines Handelsklassenobjekts standardmäßig (im Klassenkonstruktor) auf "0" initialisiert:

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade(void) : m_async_mode(false),
   m_magic(0),
   m_deviation(10),
   m_type_filling(ORDER_FILLING_FOK),
   m_log_level(LOG_LEVEL_ERRORS)
 
Vladimir Karputov:

Position wird mit Magic number gleich "0" geöffnet - d.h. string

erstellt das Objekt erneut, und die CTrade-Magie wird standardmäßig mit Null initialisiert(im Klassenkonstruktor), wenn ein Handelsklassenobjekt erstellt wird:

Ja? Wird dadurch nicht ein neues, unabhängiges Objekt geschaffen?