Dukascopy insists all traders (retail, hedge fund, bank) can get one-click fills on $200,000,000 positions. At that level trades are being routed out to the likes of JP Morgan, Barclays, Nomura, etc. for best-price quotes.
Most market makers have a max lot size as they practice guaranteed all-or-nothing fills. Such non-ECNs have to requote you all day or slip you hard if you trade outside their hedging or match-orders-to-other-traders-orders limits.
An ECN will route to market to get you filled outside the internal network no matter the price if they are doing the proper MT4 server side workarounds to prevent requotes and support partial fills.
Access to true liquidity pools mean accepting partial-fills unfortunately.
Recently I’ve seen a $10,000,000 position filled at a hedge fund on AUD/USD at around 13:15 GMT, it was processed as follows:
Platform: Integral / FIX API
Trade: AUDUSD $10,000,000 100 Lot Short
Type: At-Market
Execution: Instant (less than one sec)
Fill sets: 4 - Full (not partial)
$4,000,000 1.02246
$3,000,000 1.02245
$2,000,000 1.02242
$1,000,000 1.02241
You have the option on some platforms to fill-or-kill if you want to prevent partial fills, best price execution routing algos brokers use can and will split the order to get the best price - the above example is practically zero slippage nonetheless. If the orders were set-biased perhaps the router would have slipped the price just to match another order in the book at $10m in one set at one price. The main factor is max-slippage setting on at-market orders in fast moving markets. If the first 2 sets filled and markets moved 2 pips south, 1 pip max slippage criteria would cause a partial fill of the order at $7,000,000 in 2 sets at 2 price points leaving the trader to decide what to do about it. Fill-or-kill in this scenario would result in no trade at all.
The fund have previously been able to place a eurusd trade at $50,000,000 filled in one set instantly though with 1.3 pip slip.
Under MT4 partial fills are a nightmare due to rotating ticket numbers and a common source of EA problems and losses running against ECN brokers. I know an EA that lost 12% of an account due to a partial close. The strategy used no stops but active monitoring to close trades. The part that never got closed couldnt be controlled by the EA anymore after the partial close until the trader manually killed it - because of rotating tickets.
The rotating ticket issue for those that don’t know is a MT4 quirk that means you open a trade that gets given Ticket 1 - say 4 lots.
You go to close that trade using the ticket number. But it gets partially closed (say 2 lots go) and you now have 2 lots still open on that trade. Same trade. But the bastard ticket number isn’t 1 anymore it’s something else that’s not even determinable. You have to search the order list for it (criteria: symbol, original lots - closed lot, time opened, etc). It can be better to use magic numbers.
The bigger ***** though is partial opens which can spit out two tickets/orders (if fills come through within certain total amount of time and within slippage limits). So say 4 lot order gets Ticket 14 eurusd 3 lot buy, Ticket 15 eurusd 1 lot buy.
Watch those EAs on ECN brokers under MT4 - many developers have no idea this kind of problem is lurking if they don’t run proper tests.
What do I mean by proper tests? I mean live tests. The only platform I’ve seen partial fill on demo is Dukascopys - no doubt others may support this behaviour also. If an EA developer doesn’t know how to code around it already, they need to experience it in tests to program the fix for it otherwise the EA loses control of open positions until stop loss if no KillAllOpenPositions logic is used and none is the wiser