![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Sie denken überhaupt nicht logisch. Wie würde Ihnen die Änderung der magischen Zahl mehr helfen als die Kenntnis der OrderOpenTime()? Es läuft auf genau das Gleiche hinaus.
Denn ich muss mehrere Teilabschlüsse mit einer Order durchführen... Wenn ich eine OrderClose() ausführe und mit OrderOpenTime() vergleiche und dann eine weitere OrderClose() mit derselben Order ausführe, aber wieder mit der OrderOpenTime() vergleiche, wird es nicht funktionieren, weil es eine geschlossene Order in der Historie geben wird und die zweite OrderClose() Funktion nicht geschlossen wird...
Wenn ich nun OrderClose() mit einer MagicNumber 1234 ausführen könnte und dann, nachdem OrderClose() abgeschlossen ist, die MagicNumber der Order auf 12345 ändern könnte, würde die erste Funktion, die die MagicNumber 1234 aufgerufen hat, nicht mehr auf die verbleibende Order anwendbar sein, da der verbleibenden Order nun die MagicNumber 12345 zugewiesen wurde. Mit dieser MagicNumber 12345 könnte ich dann eine andere OrderClose()-Funktion verwenden (vorausgesetzt, sie ist anwendbar) und den Prozess wiederholen, bis das, was ich habe, funktioniert und so läuft, wie ich es möchte.
Bis dahin kann OrderOpenTime() nur einmal funktionieren...
Wenn ich die aktuelle OrderOpenTime() mit den historisch geschlossenen Positionen auf demselben Symbol() vergleiche und KEINE Übereinstimmung finde, dann wird CloseOrder() ausgeführt. Wenn nun die zweite CloseOrder() -Funktion aufgerufen wird (zu einem höheren Preis als die erste CloserOrder(), und ich einige weitere Lots für dieselbe Order schließen möchte), könnte ich die OrderOpenTime() UND die OrderCloseTime() vergleichen. Wenn OrderOpenTime(OpenPosition) == OrderOpenTime(History) && OrderCloseTime(history) > OrderOpenTime(OpenPosition) DANN OrderClose() die zweite Funktion...?
Nun, Sie sagten nie etwas über mehrere partielle Schließungen vor, Sie sagten, Sie wollten nur die Hälfte der Bestellung zu schließen, aber so oder so sind Sie Weg über dieses Denken und völlig fehlt das Offensichtliche.
Warum funktioniert OrderOpenTime() nur einmal?
static datetime partclosedonce;
static datetime partclosedtwice;
wenn der Auftrag die Teilabschlusskriterien Stufe 1 erfüllt und die Öffnungszeit nicht mit partclosedonce übereinstimmt, wird er teilweise abgeschlossen und der Zeitstempel zu partclosedonce hinzugefügt.
wenn der Auftrag die Teilabschlusskriterien der Stufe 1 erfüllt und die Öffnungszeit mit partclosedonce übereinstimmt, wurde er bereits einmal teilgeschlossen, also wird er noch nicht erneut teilgeschlossen.
Wenn der Auftrag die Teilabschlusskriterien der Stufe 2 erfüllt und nicht mit partclosedtwice übereinstimmt, wird er teilweise abgeschlossen und der Zeitstempel zur Variablen partclosedtwice hinzugefügt.
Sie sollten auch vermeiden, irgendetwas mit OrdersHistory zu tun. Wenn Sie einen langen Backtest durchführen, haben Sie möglicherweise Hunderte oder sogar Tausende von Aufträgen in der Historie, und Ihr EA würde Ihren offenen Auftrag bei jedem Tick mit all diesen Aufträgen vergleichen. Das ist sehr langsam, und Ihre Backtests werden immer langsamer, je länger sie laufen, je größer die Historie wird.
Sie sollten auch vermeiden, irgendetwas mit OrdersHistory zu tun. Wenn Sie einen langen Backtest durchführen, haben Sie möglicherweise Hunderte oder sogar Tausende von Aufträgen in der Historie, und Ihr EA würde Ihren offenen Auftrag bei jedem Tick mit all diesen Aufträgen vergleichen. Das ist sehr langsam, und Ihre Backtests werden immer langsamer, je länger sie laufen, je größer die Historie wird.
Wie kann ich es dann anders machen...?
Ich habe Ihnen gerade gezeigt, wie man es macht! Wenn es einen einfacheren Weg als diesen gibt, würde ich gerne wissen, wie er aussieht. Tun Sie es mit der Geschichte, wenn Sie wollen, ich war nur geben Sie meine Meinung zu tun es auf diese Weise ist alles.
Ich habe Ihnen gerade gezeigt, wie man es macht! Wenn es einen einfacheren Weg als diesen gibt, würde ich gerne wissen, wie er aussieht. Tun Sie es mit der Geschichte, wenn Sie wollen, ich war nur geben Sie meine Meinung zu tun es auf diese Weise ist alles.
Oh, ich sehe, dass static datetime das Datum und die Uhrzeit von OrderClose() enthält, so dass ich es mit der anfänglichen Öffnungszeit der aktuellen Bestellung vergleichen kann, im Gegensatz zu irgendetwas, das mit der Historie zu tun hat?
ja
Static Datetime ist ziemlich neu für mich, so werde ich auf diese morgen arbeiten und sehen, wo ich bekommen! Hoffentlich bekomme ich dann diesen lästigen Teil meines Codes in den Griff :)
Nun, Sie sagten nie etwas über mehrere partielle Schließungen vor, Sie sagten, Sie wollten nur die Hälfte der Bestellung zu schließen, aber so oder so sind Sie Weg über dieses Denken und völlig fehlt das Offensichtliche.
Warum funktioniert OrderOpenTime() nur einmal?
static datetime partclosedonce;
static datetime partclosedtwice;
wenn der Auftrag die Teilabschlusskriterien Stufe 1 erfüllt und die Öffnungszeit nicht mit partclosedonce übereinstimmt, wird er teilweise abgeschlossen und der Zeitstempel zu partclosedonce hinzugefügt.
Wenn der Auftrag die Teilabschlusskriterien der Stufe 1 erfüllt und die Öffnungszeit mit partclosedonce übereinstimmt, wurde er bereits einmal teilgeschlossen, also wird er noch nicht erneut teilgeschlossen.
Wenn der Auftrag die Teilabschlusskriterien der Stufe 2 erfüllt und nicht mit partclosedtwice übereinstimmt, wird er teilweise abgeschlossen und der Zeitstempel zur Variablen partclosedtwice hinzugefügt.
Knall! Dies ist ein Vergnügen gearbeitet - viel einfacher als ich mir vorgestellt zu! Ich habe gerade angefangen, mir das anzuschauen, und 5 Minuten später habe ich es zum Laufen gebracht :) Vielen Dank für Ihre Hilfe! Ich werde jetzt meine mehrfachen OrderClose() -Funktionen einbauen und sehen, ob ich es zum Laufen bringen kann. Sobald ich das getan habe, werde ich einen weiteren Thread erstellen, um die Hilfe, die ich von anderen hier erhalten habe, weiterzugeben! Ich denke, dass dies definitiv etwas ist, das andere in einem kurzen Beitrag verwenden könnten.
Ich bin noch nicht über den Berg, aber diese statische Datetime funktioniert perfekt mit diesem einen orderclose(). Ich wüsste nicht, warum es bei den anderen nicht auch funktionieren sollte :)