Metatrader at AMPFUTURES - SP500 / Slippage on Limited Orders

Tell your programmer to use the OrderOpen method rather than the BuyLimit or SellLimit methods. More importantly, specifying a TP value will result in a market (rather than limit) order being placed when TP is reached, no matter which method is used. To overcome this, use an OpenOrder with 0 TP value and when the position is opened, issue the corresponding closing limit order (TP) using OpenOrder.

This does not work. I tried this code multiple times and the specified price is not getting respected.
res=trade.OrderOpen("MESH23", ORDER_TYPE_BUY_LIMIT, 1, 0, 4022.75, 0, 0);

Actual filled price: 4023.

I'm using AMP Demo account and for some reason limit orders are not real limit orders, they're triggered as a market order when the order is touched. I even tried MqlTradeRequest with deviation 0, no difference. Tried BuyLimit/SellLimit, no difference.

This does not happen when trading on TradingView with the same broker and it does not happen when trading on MotiveWave, there they're always filled at the specified price as they should be. Why on earth can't MT5 place real limit orders? A limit order should not be filled at a price that isn't SPECIFIED, then it isn't a limit order. I don't know if this is a problem with AMP or MT5 actually. Can anyone confirm if this happens with other brokers on MT5?

I'm super close to changing platform completely but I don't actually want to change broker unless I really have to, so if anyone has a solution for this problem I would love to hear it.
I already emailed AMP futures support but of course they just gave the link to their support page which explains nothing about what's going on MT5 specifically, just talking about bracket orders, I haven't even touched a bracket order.
 
Last edited:
MT5 Take Profit order = Market if touched order
https://faq.ampfutures.com/en_us/metatrader-mt5-order-types-order-execution-logic-BkrMK0BFq

Explanation on MetaTrader 5 Advanced Order Execution Logic:

For Exchange Contracts, Stop Loss and Take Profit orders are triggered according to the rules of the exchange where trading is performed. Usually, this will be by Last price (price of the last performed transaction). In other words, a TP/SL order triggers when the Last price touches the specified TP/SL price.

However buying or selling as a result of the activation of a stop-order is always performed by the Bid and Ask prices during the activation of the Stop order, which may differ from the Price specified by the trader.


What does this mean for a trader? If you are working a Bracket Order <stop loss & take profit> order, the take profit order is an MIT (Market Order if Touched) just like the Stop Loss order. Depending on the market conditions, since it is triggering a market order, there will be a difference between the final fill price and the take profit order price. At least 1 tick “slippage” due to the market order fill price of the next available Bid/Offer price.

Key Clarification >> If you work a Straight Limit Order (not connected to a Bracket Order or if you are using an automated trading strategy that uses straight limit orders) the order will work as a standard limit order (filling at your price or better).

You might want to update your FAQ because the information there is false. Even if you don't connect it to a bracket order the ENTRY limit order will be filled at a worse price than specified which defeats the purpose of a limit order. Unless it for some reason works differently on an AMP MT5 live account? I'm using AMP MT5 Demo account.

When scalping on a low timeframe even a 1 tick offset can make a huge difference so it's actually a pretty big issue.
 
Last edited:
.... Unless it for some reason works differently on an AMP MT5 live account? I'm using AMP MT5 Demo account....
Bingo, you hit the nail on the head. I just confirmed, much to my surprise, that this is indeed the case with the Demo account. Needless to say, this will NOT occur in live trading.
 
Bingo, you hit the nail on the head. I just confirmed, much to my surprise, that this is indeed the case with the Demo account. Needless to say, this will NOT occur in live trading.
That is good news if that's the case. I really hope it's just on the demo.
I might need to open a live account and do some testing there before I decide to give up on this platform.
 
That is good news if that's the case. I really hope it's just on the demo.
I might need to open a live account and do some testing there before I decide to give up on this platform.
For a live account, comment out OnTick() and just put an OpenOrder for 1 micro lot in OnInit(). Only then will you be satisfied.
 
Bingo, you hit the nail on the head. I just confirmed, much to my surprise, that this is indeed the case with the Demo account. Needless to say, this will NOT occur in live trading.

Can confirm that. It's pretty stupid actually.

I'm using EA on live, all limits work as it's supposed to. Make sure you use return fill mode
 
Back
Top