MetaTrader 5
MT5 Error 4756: The Number That Tells You Why
4756 doesn't tell you what went wrong. It's a wrapper around a second number printed next to it, and that number is the one with the answer in it.
You'll find hundreds of pages telling you 4756 means invalid volume. They're wrong, and following them is why people spend an afternoon adjusting lot sizes on an order that was rejected for something else entirely.
4756 means your broker refused the order. That's all it means. It carries no reason of its own. It's a wrapper, and the actual cause is a second number printed beside it in the log, usually starting with 100. That second number is the one to search for. 10016 is stops placed too close to price, 10014 is an invalid lot size, 10019 is insufficient margin, 10018 is a closed market.
Find the second number and the problem is usually solved in a minute. Without it you're guessing.
Where the second number is
Open the terminal, go to the Toolbox at the bottom, and look at the Journal tab, or Experts if an automated strategy placed the order. Find the line with 4756 in it. The reason code sits on the same line or the one immediately after.
If you're running a third-party tool rather than reading the terminal directly, check whether it records the rejection and the reason. Some do, and it saves you the trip.
What each reason means, and what to do
Code | Meaning | What to do |
|---|---|---|
10016 | Stops too close to price | Widen the stop or target. Most common cause |
10014 | Lot size invalid | Round to the broker's step, check minimum and maximum |
10019 | Not enough margin | Reduce size or close something |
10018 | Market closed | Check the symbol's trading hours, not your local clock |
10017 | Trading disabled | On the account or the symbol. Contact your broker |
10004 | Requote | Price moved. Increase allowed deviation |
10013 | Request invalid | Something malformed in the order itself |
10016 deserves the top spot because it's the one people never expect. Every broker sets a minimum distance between the current price and where a stop or target is allowed to sit, and it varies per symbol. A stop distance that works fine on EURUSD gets rejected on gold, where the minimum distance is often far wider and the spread widens further around news and the daily rollover. You can check it yourself: press Ctrl+U, pick the symbol, and read the stops level in its specification.
Why the answers you find don't match your error
Here's the thing nobody explains, and it's why this particular error is so badly covered.
There are three different numbering systems describing the same failed order, and they've all been in use at once for years.
The old platform used numbers like 130 and 131. The current platform has runtime errors in the 4750s, which is where 4756 lives. And the broker's server has its own set starting at 10004, which is where the real reasons live.
A decade of forum answers is written in the first system. So you search your problem, land on a post explaining error 131, and it's correct. But the number on your screen is 10014, and nothing connects the two for you. The conditions didn't change when the platform did. Only the numbering did.
That's also how "4756 means invalid volume" spread. Someone's 4756 happened to be a volume problem, they wrote it up, and the wrapper got permanently mislabelled with one of the things it can wrap.
The lot size one, worked properly
If your reason code is 10014, the arithmetic is worth seeing, because the usual advice is to round and move on and that quietly costs you something.
Every symbol has a smallest allowed size and a step. On most forex pairs the step is 0.01 lots. On some indices it's 0.1. Your order has to be an exact multiple of that step, and it has to sit between the symbol's minimum and maximum.
Now run a normal risk calculation. You want to risk 1% of a $10,000 account, so $100, with a 37-pip stop on EURUSD at about $10 a pip per lot. That's $100 divided by 370, which is 0.27027 lots. Send that and it's refused. Round to 0.27 and it goes through.
Fine so far. The problem is at the other end.
Take a $2,000 account, the same 1% risk, and a 50-pip stop. That's $20 divided by 500, or 0.04 lots. Still fine. Now the same account with a 200-pip stop: $20 divided by 2,000 is 0.01 lots, exactly the minimum. Drop the account to $800 and the calculation wants 0.004 lots, which is below the minimum entirely.
At that point you have two options and most tools quietly pick the first: round up to 0.01 and take two and a half times the risk you intended, or skip the trade. Rounding up is the one that ends accounts, because it doesn't error, it doesn't warn, and every trade after it is sized wrong in the same direction.
If your position sizes are near your broker's minimum, check which of those your setup does. It's a more valuable answer than the fix for 10014.
What a properly built connection does about this
The entire malformed-request class of 4756 is preventable, and it's preventable before the order is sent rather than after it bounces.
Vectorhelm reads each symbol's specification from your broker before anything is sent: minimum and maximum order size, the volume step, the allowed filling types, and the minimum distance for stops and targets. Every order is conformed to it first. Size is rounded to the broker's step, so an off-step lot never leaves. An order above the broker's per-order maximum is split rather than refused, so 150 lots against a 100-lot cap goes out as 100 and 50. An order below the minimum is stopped before it's sent, with the reason shown, rather than silently rounded up into more risk than you asked for. The filling type is the one that symbol actually allows instead of a hardcoded default, which is behind a whole category of 4756 reports that have nothing to do with lot size. Stops and targets are placed outside the broker's minimum distance, so 10016 doesn't arise.
A trade request built that way is never rejected for being malformed.
The honest limitation
A broker can still refuse an order for reasons that have nothing to do with how the request was built.
Insufficient margin is a real state of your account. A closed market is a real fact about the session. Trading disabled on the account is a decision your broker made. No amount of validation on the way out changes any of those, and anyone claiming their tool eliminates rejections entirely is describing something that doesn't exist.
What's reasonable to expect is that each one comes back with the broker's own reason attached, so you know within seconds whether the problem is the order, the account, or the clock.
The short version
4756 is a label, not a diagnosis. Go and find the number next to it.
If it's 10016, widen your stops and check the symbol's minimum distance. If it's 10014, check the step and the minimum, and find out what your tool does when a risk calculation lands below that minimum. If it's 10019 or 10018, the order was fine and something about your account or the session wasn't.
And if you're building automation on top of MT5, the fix for the first two isn't something you apply when they happen. It's something that should already have been applied to every order before it left.
Vectorhelm conforms every order to the broker's own symbol specification before sending it, and reports anything the broker refuses with the broker's reason attached. It isn't open yet. Early access is here if you want it when it is.
Vectorhelm is execution software. It runs the rules you define on accounts you own and control. Nothing here is trading advice, and no automation setup prevents losses.
Opening soon
Automate it, with your limits built in.
Join the waitlist for free early access. Start on a demo account, then go live when you’re ready.
Join the waitlistStay informed
One email a month. Worth opening.
New articles and product news. No spam, unsubscribe any time.
A separate list from the early-access waitlist. How we handle your email.