Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1060

 
abeiks:

Hier können Sie einen Teil der Antworten finden: https://www.mql5.com/ru/forum/131859


1. Danke, aber ich habe die Antwort nicht gefunden. Es gibt eine Funktion SetOrder(), die aber im Wesentlichen dasselbe ist wie OrderSend(). Sie können mit dieser Funktion nicht mehrere Aufträge gleichzeitig eröffnen.
 
smart_man:
1. Danke, aber ich habe die Antwort nicht gefunden. Es gibt eine Funktion SetOrder(), die aber im Wesentlichen dasselbe ist wie OrderSend(). Sie können mit dieser Funktion nicht mehrere Aufträge gleichzeitig eröffnen.

Sie können mit keiner Funktion mehrere Aufträge gleichzeitig eröffnen, da der Server die Aufträge einzeln und nicht parallel ausführt und die Aufträge von allen Kunden stammen, nicht nur von Ihnen.

Im besten Fall werden die Aufträge mit einigen Millisekunden Abstand nacheinander eröffnet, aber nur, wenn eine gewisse Nachfrage auf dem Markt besteht.

 
evillive:

Sie können mit keiner Funktion mehrere Aufträge gleichzeitig eröffnen, da der Server die Aufträge einzeln und nicht parallel ausführt und die Aufträge von allen Kunden stammen, nicht nur von Ihnen.

Im besten Fall werden die Aufträge mit einem Abstand von wenigen Millisekunden nacheinander eröffnet, aber auch nur dann, wenn es eine Nachfrage auf dem Markt gibt.

Ich kann sehen, dass Sie das Problem verstanden haben! Das Einzige, was mir in den Sinn kommt, ist, dass wir diese Aufträge nach Anhängigkeit öffnen sollten. Ist es dann möglich, sie gleichzeitig zu öffnen?
 
smart_man:
Da sehe ich, dass Sie das Problem verstehen! Das Einzige, was ich mir vorstellen kann, ist, wenn Sie diese Aufträge in einer schwebenden Form eröffnen. Ist es dann möglich, sie gleichzeitig zu öffnen?
Nein, der Server führt sie nach wie vor einzeln aus, ob in der Schwebe oder auf dem Markt.
 
evillive:
Nein, der Server führt sie trotzdem einzeln aus, egal ob sie anhängig sind oder nicht.

1. dann ist das Problem der "Gleichzeitigkeit" beseitigt. In dieser Hinsicht gibt es also keinen Unterschied zwischen der Eröffnung eines Marktes oder eines schwebenden Marktes.

2. Ist es richtig, bei jedem Tick manuell zu prüfen, ob die Order geschlossen wurde, um den Moment dieser Schließung zu erwischen (durch TP oder SL), oder gibt es vorgefertigte Funktionen?

 
smart_man:

1. dann ist die Frage nach der "Gleichzeitigkeit" vom Tisch. In dieser Hinsicht gibt es also keinen Unterschied zwischen einem Eröffnungsmarkt und einem schwebenden Markt.

2. Ist es richtig, bei jedem Tick manuell zu prüfen, ob der Auftrag geschlossen ist, um den Zeitpunkt dieses Schließens (durch TP oder SL) zu bestimmen, oder gibt es fertige Funktionen?

2 Schauen Sie genau hin: https://www.mql5.com/ru/forum/131859

isCloseLastPosByStop();
isCloseLastPosByTake();
 
Was bedeutet diese Zeile: PostMessageA(hwnd, WM_COMMAND, 0x822c, 0)? Ich weiß nicht, wozu das gut sein soll.
 

Können Sie empfehlen, welche Maklerfirma ich wählen sollte? Interessiert an Problemen mit Einzahlungen/Abhebungen sowie an der Zuverlässigkeit der Angebote. So unterscheiden sich beispielsweise die Testergebnisse des Alpari-Servers deutlich von den Metaquotes, was für letztere spricht. Candlestick-Parameter haben auf verschiedenen Servern unterschiedliche Werte usw.

Es ist interessant, dass Alpari und der Forex Club letzte Woche keine Lizenz erhalten haben, bei Teletrade gab es Durchsuchungen. Wie soll man weiterleben?

 

Hallo zusammen. Ich möchte eine völlig autonome benutzerdefinierte Funktion erstellen. Kein Problem mit OnInit()-Emulation. Die Benutzerfunktion selbst wird per Definition ausgeführt. Aber ich habe Probleme mit dem PseudoOnDeinit(const int reason).

Klärung der Aufgabe. Die Benutzerfunktion muss ihre grafischen Objekte beim letzten Durchlauf löschen und z. B. einige Daten in globalen Variablen des Terminals speichern.

In einem Programm mit Schleifen kann das Zeichen für den Programmabbruch IsStopped()==true sein. In einem nicht geloopten Programm ist es immer=0. Keine universelle Methode.

Ich habe versucht, die Funktion UninitializeReason() von OnTick() aus aufzurufen. Das Ergebnis ist immer=0. Es wäre jedoch logisch, den Wert des Grundes für die bevorstehende Deinitialisierung beim letzten Durchlauf anzugeben.

Daher wird die Funktion UninitializeReason() abgeschnitten und kann nur innerhalb von OnDeinit(const int reason) verwendet werden.

Alle Benutzerfunktionen können zusätzlich in die Deinitialisierungsfunktion OnDeinit(const int reason) geschrieben werden, und einer der obligatorischen Parameter, die an die Benutzerfunktion übergeben werden, sollte reason sein - der Grundfür die Deinitialisierung.

Das Vorhandensein eines Wertes ungleich Null, der von OnDeinit(const int reason) an die Benutzerfunktion übergeben wird, ist das Zeichen für das Herunterfahren des Hauptprogramms.

Vielleicht gibt es andere Möglichkeiten und Systemvariablen, die Sie für diesen Zweck benötigen. Schreiben Sie mir. Teilen Sie Ihre Erfahrungen. Wenn es Ihnen nicht leid tut. ;-)

 
kosmos0975:

Ich habe versucht, die Funktion UninitializeReason() von OnTick() aus aufzurufen. Das Ergebnis ist immer 0, obwohl es logisch wäre, den Grund für die bevorstehende Deinitialisierung im letzten Durchgang anzugeben.

Wie könnte es anders sein? Wenn Sie das Terminal zwischen den Ticks schließen, wird OnTick() nicht ausgeführt, und daher wird kein Ereignis, das UninitializeReason() aufruft, behandelt.