Buy-Limit-Order wird nicht wie erwartet gefüllt

 

Hi zusammen,


ich benutze erst seit ein paar Tagen MT5, um ein PineScript in MLQ5 umzuwandeln. Ich habe also nun einen EA für ein Demokonto geschrieben, der Buy-Limit-Orders 1 Tick unter dem Low der letzten Kerze bzw. Sell-Limit-Orders 1 Tick über dem High der letzten Kerze platziert.

Bei den Sell-Orders gibt es keine Probleme, sie werden im Backtest sofort gefüllt, sobald der Preis 1 Tick über dem letzten High liegt. Die Buy-Orders verhalten sich jedoch etwas komisch. Sie werden nämlich erst dann gefüllt, wenn der Preis mindestens 2 Ticks unter dem letzten Low fällt, also 1 Tick unter dem eigentlichen Limit-Preis.


Beispiel:

Mein EA platziert eine Sell-Limit-Order bei 100$. Sobald der Preis 100$ erreicht, wird die Sell-Position im Backtest sofort mit einem Preis von 100$ geöffnet -> Wie erwartet.

Mein EA platziert eine Buy-Limit-Order bei 80$. Sobald der Preis auf 80$ fällt, wird die Buy-Position aber nicht geöffnet. Erst wenn der Preis auf 80$ - 1 Tick fällt, also bspw. 79.75$, wird die Buy-Position mit einem Preis von 80$ geöffnet.


Ist das ein erwartetes Verhalten und ich habe eine Wissenslücke? Was kann ich tun, dass die Orders im Backtest direkt auf dem Limit-Preis gefüllt werden?


Vielen Dank & Gruß

Ezyy04

 

Verkaufen zum bid preis

kaufen zum ask preis

und dann gibts natürlich noch slippage der meistens einen negativen einfluss hat

also, prüf deinen code

 

Alle Preise müssen zum relevanten Preis den  Mindestabstand haben:

SYMBOL_TRADE_STOPS_LEVEL

Minimal indention in points from the current close price to place Stop orders

int

SYMBOL_TRADE_FREEZE_LEVEL

Distance to freeze trade operations in points

int


Außerdem müssten sie so platziert sein:


Mit (siehe Amando) Buy oder Clese Sell = Ask und Sell oder Close Buy = Bid.

 
Ezyy04:

Hi zusammen,


ich benutze erst seit ein paar Tagen MT5, um ein PineScript in MLQ5 umzuwandeln. Ich habe also nun einen EA für ein Demokonto geschrieben, der Buy-Limit-Orders 1 Tick unter dem Low der letzten Kerze bzw. Sell-Limit-Orders 1 Tick über dem High der letzten Kerze platziert.

Bei den Sell-Orders gibt es keine Probleme, sie werden im Backtest sofort gefüllt, sobald der Preis 1 Tick über dem letzten High liegt. Die Buy-Orders verhalten sich jedoch etwas komisch. Sie werden nämlich erst dann gefüllt, wenn der Preis mindestens 2 Ticks unter dem letzten Low fällt, also 1 Tick unter dem eigentlichen Limit-Preis.


Beispiel:

Mein EA platziert eine Sell-Limit-Order bei 100$. Sobald der Preis 100$ erreicht, wird die Sell-Position im Backtest sofort mit einem Preis von 100$ geöffnet -> Wie erwartet.

Mein EA platziert eine Buy-Limit-Order bei 80$. Sobald der Preis auf 80$ fällt, wird die Buy-Position aber nicht geöffnet. Erst wenn der Preis auf 80$ - 1 Tick fällt, also bspw. 79.75$, wird die Buy-Position mit einem Preis von 80$ geöffnet.


Ist das ein erwartetes Verhalten und ich habe eine Wissenslücke? Was kann ich tun, dass die Orders im Backtest direkt auf dem Limit-Preis gefüllt werden?


Vielen Dank & Gruß

Ezyy04

Hallo,

wie schon amndo beschrieben hat, ist ein Fehler im Code.

So sollte es aussehen (als Beispiel).


double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
ask = NormalizeDouble(ask,_Digits);

double price=ask;
price=NormalizeDouble(price,_Digits);

 m_trade.BuyLimit(0.10,price,_Symbol,0,0,NULL);
Grund der Beschwerde: