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

 
Grigori.S.B:

Bitte sagen Sie mir, warum der Compiler im folgenden MQL4-Testskriptcode eine Warnung erzeugt:

Eine Warnung in Zeile 27 über eine Fehlanpassung des Datentyps. Beide Variablen haben denselben int-Typ. Nachfolgend sehen Sie einen Screenshot der Skriptkompilierung.

Wenn ich die Zeile 27 durch

wird die Warnung nicht angezeigt.

Was ist der Trick?

Es gibt keinen Trick. Die Variable t wird als double deklariert

In der Tat hat dieses t nirgendwo eine Bedeutung.

 
Alexey Viktorov:

Und es gibt keinen Trick. Die Variable t wird als double deklariert

Vielen Dank, ich habe hart gearbeitet - es ist Zeit, sich auszuruhen.

Alexey Viktorov:

In der Tat nimmt dieses t nirgendwo einen Wert an.

Es handelt sich um eine Puffervariable, in der das Ergebnis während der Sortierung vorübergehend gespeichert wird.

 

Wie unterscheiden sich diese Initialisierungsmethoden?

class Klas{};
Klas *Klas_
Klas Klas_
 
Seric29:
1. class Klas{};
2. Klas *Klas_
3. Klas Klas_

1. Typ (Klasse) Beschreibung

2. Deklaration des Typs (Klasse) Zeiger

3. Deklaration der Klasseninstanz - dies ist die Initialisierung, denn der Klas()-Konstruktor wird aufgerufen, wenn er nicht beschrieben ist, dann wird der Standardkonstruktor aufgerufen - Hilfe

Seric29:

Wie unterscheiden sich diese Initialisierungsmethoden?

d.h. Initialisierung nur Schritt 3.

 
Igor Makanu:

1. Typ (Klasse) Beschreibung

2. Deklaration des Typs (Klasse) Zeiger

3. Deklaration der Klasseninstanz - dies ist die Initialisierung, denn der Klas()-Konstruktor wird aufgerufen, wenn er nicht beschrieben ist, dann wird der Standardkonstruktor aufgerufen - Hilfe

d.h. nur Klausel 3 wird initialisiert.

Ich habe in der Hilfe nicht gesehen, wie man sie initialisiert, vielleicht habe ich es nur gesehen und nicht verstanden, denn Klassen sind in der Hilfe schlecht beschrieben - ich habe sie 30 Mal gelesen.

Ja, in der Tat nach der Klasse, da ich keine Einträge habe, aber sie haben diesen Code in OnStart gesetzt

   CFoo foo1(TimeCurrent());     // явный вызов параметрического конструктора 
   CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию 
   CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора 
   CFoo foo40(foo1);             // явный вызов конструктора копирования 
   CFoo foo41=foo1;              // неявный вызов конструктора копирования 
   CFoo foo5;                    // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует, 
                                 // то вызывается параметрический конструктор с параметром по умолчанию) 
//--- допустимые варианты получения указателей CFoo 
   CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него 
   CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 
   CFoo *pfoo8=GetPointer(foo1); // теперь pfoo8 указывает на объект foo1 

Verstehen Sie es, wie Sie wollen. Ich weiß nicht, warum ich es auf diese Weise erklären sollte.

CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него

Ich verstehe nicht, warum ich diesen Zeiger brauche.

CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 

Und wozu ist das gut? Was immer Sie wollen und was Sie denken, was es bedeutet.

CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора

Ich verstehe auch nicht, was das bedeutet.

CFoo foo40(foo1);             // явный вызов конструктора копирования 
Wozu das gut sein soll, ist ebenfalls nicht klar. Sie hätten es nicht hochgeladen, sondern die Idee ganz normal und einfach aufgeschrieben.
 

Grüße.

Könnten Sie mir bitte sagen, wie die horizontalen Ebenen für das Gitter in mt4 und in mt5 berechnet werden?

 
Seric29:

Und warum über Zeiger initialisieren, ich habe es überhaupt nicht in der Hilfe gesehen, wie sie zu initialisieren, vielleicht habe ich geschaut und nicht verstanden, weil Klassen schlecht in der Hilfe beschrieben sind, lesen Sie 30 Mal.

ein Zeiger ist ein Zeiger, Initialisierung ist Initialisierung

diesen Code zuerst verstehen:

1. int a;
2. int a = 5;

Was bedeutet Initialisierung in diesem Code und was ist eine Variablendeklaration?

Wann wird der Speicher zugewiesen?

und behandeln dann das Thema OOP und Zeiger auf eine Klasse und Zeiger auf ein Objekt mit diesem Wissen.


geh weg, aus irgendeinem Grund kann ich elementare Fragen nicht beantworten

 
Igor Makanu:

ein Zeiger ist ein Zeiger, eine Initialisierung ist eine Initialisierung

diesen Code zuerst verstehen:

Was in diesem Code ist Initialisierung und was ist Variablendeklaration?

Wann wird der Speicher zugewiesen?

und dann dieses Wissen nutzen, um OOP und Zeiger auf eine Klasse und Zeiger auf ein Objekt zu diskutieren.


weg, aus irgendeinem Grund kann ich elementare Fragen nicht beantworten.

Hier ist ein einfaches und klares Beispiel. Die erste Variante ist die Deklaration der Variablen und die Speicherzuweisung (die Variable speichert standardmäßig einen beliebigen Wert oder eine Sektornummer oder eine Adresse in C++, die ich nicht kenne), die zweite Variante ist die Initialisierung.

Und wozu diese Hinweise auf den Typ dienen und womit man sie isst, hätte auch normal erklärt werden müssen.

Zeiger auf eine Klasse und Zeiger auf ein Objekt

Ich werde im Internet nachschlagen und sehen, ob es etwas darüber gibt.

 
Andrey Sokolov:

Grüße.

Wie berechnet man horizontale Ebenen für ein Gitter in mt4 und in mt5?

Wenn Sie ein horizontales Niveau erkennen wollen, sollten Sie zuerst den maximalen offenen Preis bestimmen und dann einen Wert hinzufügen, um einen neuen Preis zu erhalten, der es Ihnen erlaubt, zu beobachten, wann der Preis diese Niveau-Bedingung durchbricht, und eine neue Order zu platzieren oder ein Raster von ausstehenden Orders zu platzieren, das die maximale Anzahl von Orders berücksichtigt und dann dieses Raster anzeigt


dort ist im Allgemeinen jeder kompakte Code leichter einzusehen und für Ihre eigenen Aufgaben zu ändern


Ich weiß nicht, ob Sie es ausprobiert haben, und ich habe noch nie viele Programme ausprobiert, und ich denke, dass es schwieriger ist, es in einem einfachen TS zu verwenden, aber vielleicht haben Sie es nie ausprobiert.

 
Seric29:

Hier ist ein einfaches und klares Beispiel. Die erste Option ist die Deklaration der Variablen und die Speicherzuweisung (die Variable speichert standardmäßig einen beliebigen Wert oder eine Sektornummer oder eine Adresse in C++, die ich hier nicht kenne), die zweite Option ist die Initialisierung.

Und warum diese Hinweise auf die Art und Weise, wie und womit man sie isst, hätten auch richtig erklärt werden müssen.

DieSpeicherzuweisung erfolgt in Beispiel 1 und in Beispiel 2

Beispiel 2 ist eine Deklaration und Initialisierung, Beispiel 1 ist nur eine Deklaration

die Klasse ist die gleiche, die Klasse ist ein benutzerdefinierter Typ, der Felder (Eigenschaften) und Methoden für die Arbeit mit diesen Feldern enthält

ein Zeiger auf eine Klasse ist eine Deklaration, aber ohne Initialisierung und ohne Speicherzuweisung für den Typ (Klasse)

pointer = new MyClass(); - dies ist eine Deklaration und Initialisierung, die eine neue Instanz der Klasse erzeugt, und diese Instanz wird als Link zu einem Objekt zurückgegeben (nicht genau ein Link, in MQL ist es ... nicht wichtig, und so kommt man durcheinander)

....

Wenn Sie es nicht lesen wollen, können Sie zumindest diesen Beitrag von mir verwenden, um Ihr Beispiel zu ändern:

CFoo *pfoo6=new CFoo();

zu

CFoo *pfoo6;
pfoo6 = new CFoo();
CFoo *pfoo_7 =  pfoo6;

und versuchen Sie zu verstehen, was passiert - wenn Sie die letzte Zeile an..... zuweisen, aber trotzdem lesen, ist einfaches Fragen in Foren keine Option

Grund der Beschwerde: