Hilf mir, die Ordnung am Ende der Bar zu schließen!

 

Ich brauche etwas Hilfe, um einen Code zu formulieren, der die Bestellung genau am Ende des Balkens schließt.es ist für eine spezielle Scalper EA, so dass es punktgenaue Präzision braucht.lassen Sie mich illustrieren, was ich meine:



Hier sehen Sie zum Beispiel einen M15 EUR/USD Chart.Stellen Sie sich nun vor, ich hätte einen Indikator, der mich in einen Long-Trade direkt bei der Eröffnung der mit X markierten Kerze bringt, so dass es nach oben ging, dann folgte eine bärische Kerze, mit einem Tief sehr niedrig, aber das spielt keine Rolle, was zählt, ist, dass auf der Grundlage meiner Berechnungen, der optimale Ausstieg hier der Schlusspunkt des Balkens mit der Nummer 1 wäre.Der knifflige Teil ist, dass ich nicht weiß, wie ich die Bestellung zum Schlusskurs des Balkens Nr. 1 schließen kann, und hier brauche ich Hilfe!

Die beste Lösung, die mir im Moment einfällt, ist folgende (im Falle dieses imaginären BUY Trades):


/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}

Dieser Code schließt den Buy-Trade genau zum Open[0], aber nicht zum Close[1], denn wenn man sich das Bild anschaut und den mit 2 markierten Bar anschaut, kann man sehen, dass der Bar 2 nicht zu dem Preis geöffnet wurde, zu dem der vorherige geschlossen wurde, sondern zu einem etwas anderen Preis:



Die Erfahrung sagt also, dass:

Close[1] != Open[0]

In sehr seltenen Situationen ist das der Fall, deshalb muss die Order genau zum Close[1] geschlossen werden.

Die eine machbare Lösung, die ich dachte, ist, dass durch das Zählen der Zeit, zum Beispiel ist dies M1 und M15 Chart, zählen die Anzahl der Sekunden entweder 60 für M1 oder 900 für M15 in jedem Fall und schließen Sie den Auftrag bei Sekunden 59 oder 599.Die Probleme mit diesem ist, dass Ticks sind 6 Sekunden ich denke (korrigieren Sie mich, wenn ich falsch bin) und Sie können nicht genau treffen, dass wegen dieser Zeit Problem und zusätzliche Slippage Problem, das Sie den Handel Weg nach der Bar schließt schließen könnte.

So lassen Sie uns rekapitulieren meine Frage ist dies möglich, die Zeit zu zählen, wie ich oben beschrieben, wenn ja, dann wie die Schlupf und Tick lagging Problem zu umgehen?

Oder wenn Sie mit anderen Lösungen kommen, wie man den Auftrag direkt an Close[1] und nicht Open[0] schließen, dann bin ich offen für sie.Bitte helfen Sie mir mit diesem, das ist ein sehr wichtiges Problem meiner EA!

 
Proximus:

Ich brauche Hilfe bei der Formulierung eines Codes, der den Auftrag genau am Ende des Balkens schließt.

Es gibt keine Situation, in der Sie sagen können, dass der letzte Tick in diesem Moment ein Tick vor dem letzten Tick des aktuellen Balkens liegt.
 

Modulus, prüfen Sie, wann es keinen Rest mehr gibt. viel Glück

if( !MathMod( TimeCurrent(), PERIOD_M5 * 60 ) ) 

      OrderClose( OrderTicket(), OrderLots(), Bid , slippage );
 
trevone:

Modulus, prüfen Sie, wann es keinen Rest mehr gibt. viel Glück

Das wird nicht funktionieren ... es wird entweder vor oder nach dem Ende des Balkens sein ... niemals am Ende des Balkens. Wie deVries sagte, ist es nicht möglich, das Ende des aktuellen Balkens zu erkennen, aber wir können den Beginn des nächsten Balkens erkennen...
 
RaptorUK:
Das wird nicht funktionieren ... es wird entweder vor oder nach dem Ende des Balkens sein ... niemals am Ende des Balkens. Wie deVries sagte, ist es nicht möglich, das Ende des aktuellen Balkens zu erkennen, aber wir können den Beginn des nächsten Balkens erkennen...


Wenn es jedes Mal vor dem Schließen sein könnte, aber so nah wie möglich am Schließen, dann würde ich diese Lösung auch akzeptieren, aber wenn es nur 1 Mal nach dem Schließen ist, dann ist es nicht besser als die, die ich mir ausgedacht habe und daher nicht akzeptabel.Aber warum genau schließt es nach dem aktuellen Tick?


Und was ist mit der anderen Lösung, die die 1 Sekunde vor dem Schließen des Balkens nimmt?

So im Fall von M1

if( Time[0]>=OrderOpenTime()+59  ) 

      OrderClose( OrderTicket(), OrderLots(), Bid , slippage );

Wie lässt sich in diesem Fall das Tick-Problem lösen, falls es eines gibt?

 
Proximus:

Wenn es jedes Mal vor dem Schließen sein könnte, aber so nah wie möglich am Schließen, dann würde ich diese Lösung auch akzeptieren, aber wenn es nur 1 Mal nach dem Schließen ist, dann ist es nicht besser als die, die ich mir ausgedacht habe und daher nicht akzeptabel.Aber warum genau schließt es nach dem aktuellen Tick?


Und was ist mit der anderen Lösung, die die 1 Sekunde vor dem Schließen des Balkens nimmt?

So im Fall von M1

Wie lässt sich in diesem Fall das Tick-Problem lösen, falls es eines gibt?




wenn nicht, dann müssen Sie eine ganze Minute länger warten und auch in diesem Fall, wenn es eine....
 
Proximus:

Wenn es jedes Mal vor dem Close sein könnte, aber so nah wie möglich am Close, dann würde ich diese Lösung auch akzeptieren, aber wenn es nur 1 Mal nach dem Close ist, dann ist es nicht besser als die, die ich mir ausgedacht habe und daher nicht akzeptabel.Aber warum genau schließt es nach dem aktuellen Tick?

Dinge passieren in einem EA (und Indikator) nur, wenn es einen Tick gibt, Sie haben keine Möglichkeit zu wissen, wann der letzte Tick eines Balkens ist, bis Sie den ersten Tick auf dem nächsten Balken haben ... selbst wenn der Tick bei 59 Minuten und 59 Sekunden nach der Stunde für einen H1-Balken ist, könnte es immer noch einen weiteren Tick während dieser Sekunde geben ...

Proximus:

Und was ist mit der anderen Lösung, bei der die 1 Sekunde vor dem Ende des Balkens genommen wird?

So im Fall von M1

Wie lässt sich in diesem Fall das Tick-Problem lösen, falls es eines gibt?

. . und Sie können nicht auf die letzte Sekunde des Balkens warten, weil es in den letzten 5 Sekunden des Balkens keine Ticks geben kann, so dass Sie in diesem Fall die letzte Sekunde des Balkens nie "sehen" werden.

 
RaptorUK:

Dinge passieren nur in einem EA (und Indikator), wenn es einen Tick gibt, Sie haben keine Möglichkeit zu wissen, wann der letzte Tick eines Balkens ist, bis Sie den ersten Tick auf dem nächsten Balken haben ... selbst wenn der Tick bei 59 Minuten und 59 Sekunden nach der Stunde für einen H1-Balken ist, könnte es noch einen weiteren Tick während dieser Sekunde geben ...

. . und Sie können nicht auf die letzte Sekunde des Balkens warten, weil es in den letzten 5 Sekunden des Balkens keine Ticks geben kann, so dass Sie in diesem Fall die letzte Sekunde des Balkens nie "sehen" werden.

Ich sollte also verstehen, dass der Broker die neuen Kursdaten nicht abruft, wenn sich der Interbanken-Wechselkurs in einem bestimmten Zeitraum nicht ändert?

Ich dachte, dass ein Tick in MT4 bedeutete, dass es immer den Preis nach X Perioden von Sekunden aktualisiert, unabhängig davon, was der Preis oder das Volumen ist. so lässt sagen, die Aktualisierungsrate wäre 3 Sekunden, dann würden Sie wissen, dass auf der M1, die Sie hatten, um diesen Handel rechts auf 57 Sekunden oder vor zu schließen.


In Anbetracht dieser Situation, könnte ich nicht die verwenden:

RefreshRates();   

Um den letzten Tick bei 58 Sekunden abzurufen und bei 59 Sekunden auszusteigen?

 
Proximus:

So sollte ich verstehen, dass, wenn die Interbank-Wechselkurse nicht in einem bestimmten Zeitraum ändern, der Makler nicht ruft die neuen Kursdaten?

Ich dachte, dass ein Tick in MT4 bedeutete, dass es immer den Preis nach X Perioden von Sekunden aktualisiert, egal was der Preis oder das Volumen ist.so lässt sagen, die Aktualisierungsrate wäre 3 Sekunden, dann würden Sie wissen, dass auf der M1 Sie hatte zu schließen, dass Handel rechts auf 57 Sekunden oder vor.

Wenn sich die Preise des Brokers nicht ändern, Bid und Ask, gibt es keinen neuen Tick ... um Mitternacht GMT kann es bei einigen der weniger gehandelten Paare für eine Minute oder länger keinen Tick geben... ein neuer Tick wird nicht nach einer voreingestellten Zeit erzeugt, sondern wenn es eine Preisänderung gibt, Bid oder Ask (und vielleicht unter anderen Umständen, Änderung anderer Symbolparameter ) ...

Proximus:

Könnte ich in dieser Situation nicht die Funktion:

Um den letzten Tick bei 58 Sekunden abzurufen und bei 59 Sekunden zu beenden?

Wie wird RefreshRates() aufgerufen, wenn kein Tick vorhanden ist?
 

Danke für die Erläuterung, wie die Ticks in MT4 funktionieren.

RaptorUK:

Wenn sich die Preise des Brokers nicht ändern, Bid und Ask, gibt es keinen neuen Tick ... um Mitternacht GMT auf einige der weniger gehandelten Paare kann es keine Ticks für eine Minute oder mehr geben... ein neuer Tick wird nicht nach einer voreingestellten Zeit generiert, es passiert, wenn es eine Änderung im Preis, Bid oder Ask gibt (und vielleicht in einigen anderen Umständen, Änderung in anderen Symbol-Parameter) ...

Wie wird RefreshRates() aufgerufen, wenn es keinen Tick gibt?

Ich dachte, dass RefreshRates() den Broker dazu zwingt, einen neuen Satz von Feeds von seinem Liquiditätsprovider abzurufen, aber das ist wohl nicht der Fall.


Wie auch immer, wenn jemand eine bessere Lösung für mein Problem als diese finden kann, dann teilen Sie es bitte mit mir, seine sehr wichtig!

/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}
 
Proximus:

Vielen Dank für die Klärung, wie die Ticks in MT4 funktionieren.

RaptorUK:

Wenn sich die Preise des Brokers nicht ändern, Bid und Ask, gibt es keinen neuen Tick ... um Mitternacht GMT kann es bei einigen der weniger gehandelten Paare für eine Minute oder länger keinen Tick geben... ein neuer Tick wird nicht nach einer voreingestellten Zeit erzeugt, es passiert, wenn es eine Preisänderung gibt, Bid oder Ask ( und vielleicht unter anderen Umständen, Änderung in anderen Symbolparametern ) ...

Wie wird RefreshRates() aufgerufen, wenn es keinen Tick gibt?

Nun, ich dachte, dass RefreshRates() den Broker zwingt, einen neuen Satz von Feeds von seinem Liquiditätsanbieter abzurufen, aber ich denke, das ist nicht der Fall.


Wie auch immer, wenn jemand eine bessere Lösung für mein Problem finden kann als diese, dann teilen Sie sie bitte mit mir, es ist sehr wichtig!


Das Beste, was Sie tun können, ist, den nächsten Tick nach dem letzten Tick des Balkens zu verwenden, mit anderen Worten den ersten Tick des nächsten Balkens.
Grund der Beschwerde: