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

 

Können Sie mir bitte sagen, warum in dem Code, den ich von dieser Website kopiert habe, der Compiler vorMagic"undeclared identifier" schreibt?

for (int pos=0; pos<=OrdersTotal()-1; pos ++) 
{
 if(OrderSelect (pos, SELECT_BY_POS)==true)
  {if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic &&OrderCloseTime()==0) // если у Вас есть отложенные ордера и открытие
  return;}
 else
  Print("OrderSelect() вернул ошибку - ",GetLastError());
}            
 //продолжае
 
VasiliKolchanov:

Können Sie mir bitte sagen, warum in dem Code, den ich vorMagic von dieser Seite kopiert habe, der Compiler "undeklarierter Bezeichner" schreibt?

muss es sein, weil es nicht deklariert ist.

deklarieren Sie es am Anfang. oder als Berater-Parameter oder Konstante...oder eine Variable, zumindest irgendwie...die Entität muss existieren :-)

input int Magic=5566; // это чтобы он был в параметрах и можно поменять

// или const int Magic = 8899;

 
VasiliKolchanov:

Könnten Sie mir bitte sagen, warum in dem Code, den ich von dieser Website kopiert habe, der Compiler "undeclared identifier" vorMagic schreibt?

Denn ich habe den Bezeichner Magic verwendet, dessen Typ (bzw. Wert) nirgends beschrieben ist. Sie müssen eine Variable (oder Konstante) mit diesem Namen deklarieren und ihr einen Wert zuweisen.

 
VasiliKolchanov:

Können Sie mir bitte sagen, warum in dem Code, den ich von dieser Website kopiert habe, der Compiler vorMagic"undeclared identifier" schreibt?

Weil es nirgendwo in Ihrem Code deklariert ist - es ist offensichtlich.
 
Artyom Trishkin:
Weil es nirgendwo in Ihrem Code deklariert ist - das ist offensichtlich.
Ich danke Ihnen allen!
 

Leute, sagt mir, wie ich vorgehen und wo ich anfangen soll!

Beispiel: Ich habe 15 Aufträge mit 0,01 Lot. Irgendwann muss ich einen oder mehrere Geschäfte mit 0,07 Lot schließen.

Meine Frage ist, wie kann ich 7 Aufträge oder 0,07 in einem OrderClose(...) schließen?

Wenn ich 0,07 auf einmal setze, sieht er keine Geschäfte mit Volumen 0,01.

Ich bin neu im Programmieren

 
Rustam Bikbulatov:

Leute, sagt mir, wie ich vorgehen und wo ich anfangen soll!

Beispiel: Ich habe 15 Aufträge mit 0,01 Lot. Irgendwann muss ich einen oder mehrere Geschäfte mit 0,07 Lot schließen.

Meine Frage ist, wie kann ich 7 Aufträge oder 0,07 in einem OrderClose(...) schließen?

Wenn ich 0,07 auf einmal setze, sieht er keine Geschäfte mit Volumen 0,01.

Ich bin neu im Programmieren.

Es gibt keine Möglichkeit, sie durch einen Auftrag abzuschließen. Wir können nur eine Auswahl von Aufträgen treffen und folglich jeden Auftrag löschen. Und wenn Sie den Auftrag eines kleineren Volumens löschen, haben Sie immer noch ein offenes Volumen. Wir vergleichen es mit unserem verbleibenden offenen Volumen. Wir schließen, bis das Volumen von 0,07 seine Grenze erreicht. Das ist der einzige Weg.

 
Rustam Bikbulatov:

Leute, sagt mir, wie ich vorgehen und wo ich anfangen soll!

Beispiel: Ich habe 15 Aufträge mit 0,01 Lot. Irgendwann muss ich einen oder mehrere Abschlüsse mit 0,07 Lotgröße schließen.

Meine Frage ist, wie kann ich 7 Aufträge oder 0,07 in einem OrderClose(...) schließen?

Wenn ich 0,07 auf einmal setze, sieht er keine Geschäfte mit Volumen 0,01.

Ich bin neu im Programmieren.

Wenn der Broker die Gegenschließung zulässt, können Sie eine gegenläufige Order mit dem Volumen 0,07 eröffnen und so den Gewinn/Verlustkurs für dieses Volumen festlegen. Nun, danach müssten wir noch 7 entgegengesetzte Schließvorgänge durchführen (Funktion OrderCloseBy()). Es gibt noch eine weitere Handelsoperation, die mit diesem Ansatz durchgeführt werden kann. Der Vorteil ist, dass alle sieben Aufträge zu einem Preis abgeschlossen werden.

 

Hallo zusammen.

Bitte geben Sie Auskunft über die Geschwindigkeit des EA und wahrscheinlich auch über die Zuverlässigkeit und Korrektheit des Codes.

Ich beziehe mich auf offene und schwebende Aufträge in jedem Tick und ändere sie bei Bedarf.

Im Handbuch zu OrderSelect heißt es:"Wenn Aufträge mit dem Parameter SELECT_BY_POS sequentiell ausgewählt werden, werden die Informationen in der Reihenfolge angegeben, in der sie vom Handelsserver empfangen wurden."

Daraus ergibt sich die Frage: Können wir ein Array erstellen, in dem die Art, der Einstiegskurs und z.B. ein eindeutiger Kommentar zu einer Bestellung gespeichert werden? In jedem Tick sollten wir das Array durchlaufen und gegebenenfalls die Funktion OrderSelect ansprechen und eine Auswahl anhand des eindeutigen Kommentars der Bestellung treffen?

 
Decromor:

Hallo zusammen.

Bitte geben Sie Ihren Rat, es geht vor allem um die Geschwindigkeit des EA und wahrscheinlich seine Zuverlässigkeit und Korrektheit beim Schreiben.

Ich beziehe mich auf offene und schwebende Aufträge in jedem Tick und ändere sie bei Bedarf.

Im Handbuch zu OrderSelect heißt es:"Wenn Aufträge mit dem Parameter SELECT_BY_POS sequentiell ausgewählt werden, werden die Informationen in der Reihenfolge angegeben, in der sie vom Handelsserver empfangen wurden."

Daraus ergibt sich die Frage: Können wir ein Array erstellen, in dem die Art, der Einstiegskurs und z.B. ein eindeutiger Kommentar zu einer Bestellung gespeichert werden? In jedem Tick sollten wir das Array durchlaufen und, falls nötig, die OrderSelect-Funktion ansprechen und eine Auswahl anhand des eindeutigen Kommentars der Bestellung treffen?

Die Funktion OrderSelect() wird innerhalb des Terminals implementiert, und es erfolgt keine Anfrage an den Server. Deshalb ist es nicht schlimm, die Auftragsliste bei jedem Tick aufzurufen. Das ist genau das, was die meisten EAs tun.

Und Ihre Frage nach dem Array hängt mit der Architektur des Programms zusammen. Im Falle eines komplexen EA, der mit einer großen Anzahl von Aufträgen arbeitet, ist dies absolut notwendig. Wenn der Expert Advisor mit einem einzigen Auftrag mit einfacher Logik arbeitet, ist das Array überflüssig.

Es ist nur erwähnenswert, dass wir nicht auf den Aufruf von OrderSelect() verzichten können, selbst wenn wir ein Array von Bestellungen haben. Schließlich müssen wir bei jedem Tick prüfen, ob der Auftrag noch besteht oder nicht. Und wir können auch seine Parameter ändern.

Grund der Beschwerde: