Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 846
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich habe GetLastError nach Funktionen und wenn ein Fehler auftritt, wird es nicht zu diesem Block gehen (wie geschrieben) und Befehle werden nicht ausgeführt werden? Ich verstehe die Kette, z. B. OrderSend() -> GetLastError -> Fehlerblock Sleep(3000) RefreshRates() -> den Block verlassen und wenn die Bedingungen bestehen bleiben, wird OrderSend() erneut angefordert. Oder meine Überlegungen und Konzepte sind falsch. Ich verstehe, dass Sie den Rückgabewert 1 oder 0 in den Block schreiben wollen, aber meine Funktionen sind einfach nicht auf boolesche Werte wie SignalBuy bezogen, wenn ich richtig verstehe, sollten die Rückgabewerte dort zurückgegeben werden.
Ich habe GetLastError nach Funktionen und wenn ein Fehler auftritt, wird es nicht zu diesem Block gehen (wie geschrieben) und Befehle werden nicht ausgeführt werden? Ich verstehe die Kette, z. B. OrderSend() -> GetLastError -> Fehlerblock Sleep(3000) RefreshRates() -> den Block verlassen und wenn die Bedingungen bestehen bleiben, wird OrderSend() erneut angefordert. Oder meine Überlegungen und Konzepte sind falsch. Ich verstehe, dass Sie den Rückgabewert 1 oder 0 in den Block schreiben wollen, aber meine Funktionen sind einfach nicht auf boolesche Werte wie SignalBuy bezogen, wenn ich richtig verstehe, sollten die Rückgabewerte dort zurückgegeben werden.
Ich brauche einen Rat. Je nach den Bedingungen sollte die Position geschlossen und nach 121 Sekunden eine neue Position eröffnet werden. Wie kann ich das mit Sleep(121000) machen?
Guten Tag!
Ich brauche einen Rat. Je nach den Bedingungen sollte die Position geschlossen und nach 121 Sekunden eine neue Position eröffnet werden. Wie kann ich das mit Sleep(121000) machen?
OnTimer() zur Rettung
Ich habe gerade Windows 7 neu installiert und wollte Mt4 installieren, das Problem ist, dass die Dateien nicht heruntergeladen werden, was soll ich tun?
Danke! Ich habe OnTimer() nie verwendet. Dieser Teil des Codes befindet sich in void OnTick(). Wird die Funktion OpenPosition() dann von OnTimer() behandelt? Wenn Sie können, korrigieren Sie bitte Code, wie man OnTimer() dort korrekt einfügen...
Der Timer wird in OnInit() gestartet
Um den Countdown zu starten, müssen Sie die Schlusszeit der letzten Position im Timer ermitteln und ab dieser Zeit 121 Sukunden zählen. Um das Flag zu übergeben, das es Ihnen erlaubt, eine neue Position zu öffnen, verwenden Sie eine globale Variable, deren Geltungsbereich das gesamte Programm umfasst. Sie können dafür sorgen, dass sie anfangs einen höheren Wert als 121 enthält, z. B. 122 (Sie können die Wartezeit in den Einstellungen ändern).
In OnTick() wird diese Variable überprüft. Wenn sie größer als 121 ist und es keine Position gibt, öffnen Sie eine Position und setzen die Variable auf Null zurück, nachdem Sie überprüft haben, ob sie erfolgreich geöffnet wurde.
Sobald die Position geschlossen wird, sieht der Timer den Zeitpunkt des Schließens (er tut dies fortlaufend einmal pro Sekunde), und wenn von der aktuellen Zeit bis zum Schließzeitpunkt der Position weniger als 121 Sekunden vergangen sind, beginnt der Timer zu zählen - jede Sekunde wird der Variablenwert um 1 erhöht.
Ungefähr so. Möglicherweise liegt ein Fehler vor - wenn die Position noch nicht geschlossen wurde, ist ihre Schließungszeit gleich Null. Dies kann zu einem Problem beim Starten des Countdowns führen. Sie könnten die Variable z. B. auf -1 zurücksetzen.
Ja, vergessen Sie nicht, den Timer in OnDeinit() zu zerstören:
Der Timer wird in OnInit() gestartet
Um den Countdown zu starten, müssen Sie den Zeitpunkt im Timer finden, an dem die letzte Position geschlossen wurde, und von diesem Zeitpunkt an 121 Sekunden zählen. Um das Flag zu übergeben, das Ihnen erlaubt, eine neue Position zu öffnen, verwenden Sie eine globale Variable, die für das gesamte Programm skalierbar ist. Sie können dafür sorgen, dass er anfangs einen höheren Wert als 121 enthält, z. B. 122 (Sie können die Wartezeit in den Einstellungen ändern).
In OnTick() überprüfen Sie diese Variable. Wenn sie größer als 121 ist und es keine Position gibt - öffnen Sie eine Position - und setzen Sie die Variable auf Null zurück, nachdem Sie überprüft haben, ob sie erfolgreich geöffnet wurde.
Sobald die Position geschlossen wird, sieht der Timer den Zeitpunkt des Schließens (er tut dies kontinuierlich einmal pro Sekunde) und wenn von der aktuellen Zeit bis zum Schließen der Position weniger als 121 Sekunden vergangen sind, beginnt der Timer zu zählen - jede Sekunde wird der Wert der Variablen um 1 erhöht.
Ungefähr so. Möglicherweise liegt ein Fehler vor - wenn die Position noch nicht geschlossen wurde, ist ihre Schließungszeit gleich Null. Dies kann zu einem Problem beim Starten des Countdowns führen. Sie könnten die Variable z. B. auf -1 zurücksetzen.
Ja, vergessen Sie nicht, den Timer in OnDeinit() zu zerstören:
Verstanden, danke. Ich hatte gehofft, es in einer Zeile zu schaffen, aber es könnte etwas länger dauern.
Ich verstehe, danke. Ich hatte gehofft, es in einer Zeile zu schaffen, aber ich denke, es wird mehr Arbeit erfordern.