Environment Sanity Check (Do This First)
- Ping Test:
ping brokerURL -n 20
; average should be < 100 ms
(goal: < 1 ms on NY4 VPS).
- Build Numbers: MT4 build 1400+ or MT5 build 4150+—older
builds mis-handle new permission flags.
- Symbol Properties: Right-click → Specifications → confirm
Trade Allowed = Yes, Min Lot, Lot Step, and
Freeze Level values.
- AutoReconnect: In Tools → Options → Server set
“Reconnect” to 10 s, “Retry” 3×.
Trade Is Disabled (Error 133)
Meaning: The server rejected your order because trading is forbidden
for that symbol or session.
Root Causes
- Symbol Halt. Overnight maintenance, dividend rollovers, or Friday close.
- Permission Drift. Terminal missed the broker’s
TRADE_ENABLED
status after a micro-disconnect.
- EA Mis-Flags.
TradeAllowed()
returns false if the EA is
compiled for a different account type.
Step-by-Step Fix
- Verify trading hours in the broker’s spec sheet.
- Open
Journal
; if you see “re-login” lines, your terminal desynced.
A VPS with 24/5 connectivity prevents this.
- Add a watchdog in OnTick:
if(!IsTradeAllowed()) RefreshRates();
Off Quotes (Error 136)
Meaning: The server had no valid price when your order arrived.
Ping (ms) |
Quote Gaps / hr |
Error 136 / 100 trades |
75 ms (home fiber) |
7-9 |
4 |
120 ms (5 G) |
12-15 |
6 |
0.8 ms (VPS) |
<1 |
0-1 |
Quick Win: Move MT4/5 to a NY4 VPS so quotes arrive in real time—but
also widen
Maximum Deviation to 5-7 pips on high-vol pairs.
Invalid Price (Error 129)
Meaning: Your
OrderSend()
price is outside the broker’s
Deviation tolerance.
<?mql4
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double slippage = 5 * _Point;
int ticket = OrderSend(_Symbol, OP_BUY, Lots, ask, slippage,
ask - SL*_Point, ask + TP*_Point,
\"EA Buy\", 0, 0, clrBlue);
?>
Pull
ask immediately before you send the order. On a VPS, terminal + server
tick clocks stay ≈0 ms apart, so the price never goes stale.
Not Enough Money (Error 134)
Meaning: Insufficient margin—often from duplicate copier entries
or mis-sized lots.
Margin Math Cheat Sheet
For 100 k EURUSD at 1.1000 with 1 : 100 leverage:
Margin = (Contract Size × Lot × Price) ÷ Leverage
= (100,000 × 1 × 1.1000) ÷ 100
= $1,100
Free Margin ≥ $1,100 → order passes
Running copier and EA on the same VPS keeps their sequence atomic,
preventing back-to-back duplicates that double the margin hit.
Invalid Volume (Error 131)
Meaning: Lot size not an integer multiple of
LotStep or below
Min Lot.
<?mql4
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
double lots = NormalizeDouble(LotsInput, (int)MathLog10(1/step));
?>
The above rounds lots to the broker’s allowed precision. Volume errors drop
to zero once the EA and tick feed stay synchronous on a VPS.
Holistic Prevention Checklist
- Run MT4/5 on a < 1 ms VPS: slashes quote gaps and permission drift.
- Normalize all prices & volumes: use broker-specific
LotStep
and Digits
.
- Automate reconnect logic:
IsConnected()
→ Sleep(3000)
→ RefreshRates()
.
- Log every order error: push to CSV / Grafana for pattern spotting.
Latency Fix in Action — Live NFP Test
Scenario: EURUSD, 3-lot scalp during NFP.
Home PC: 65 ms ping → 0.8 pip slippage → $24 loss.
NY4 VPS: 0.9 ms ping → 0.1 pip slippage → $3 loss.
Result: VPS saved $21 in one trade—and zero errors logged.
Ready To Trade Error FREE?
Stop letting latency-driven errors ruin profitable setups. Spin up a trading VPS with NYCSservers and watch “Trade Is Disabled,” “Off Quotes,” and
“Not Enough Money” disappear overnight. Already have a VPS? Use our
broker latency checker to see if you can shave
still more milliseconds.