MT5 error 10022: Invalid order expiration date in the request
Read SYMBOL_EXPIRATION_MODE, use only the expiration types it lists (GTC, day, specified time, specified day), and set a specified expiry in the future, on…
Updated 22 October 2026. Runs in your browser; nothing you type is uploaded.
The number after retcode= in MT5's Experts or Journal tab. 41 codes, as MQL5's reference words them.
10022
TRADE_RETCODE_INVALID_EXPIRATION
Invalid order expiration date in the request
Cause and fix for 10022What MQL5 says
10022TRADE_RETCODE_INVALID_EXPIRATION- Invalid order expiration date in the request
From MQL5's table of trade server return codes, read 22 October 2026. An Expert Advisor finds it in MqlTradeResult.retcode; the Experts and Journal tabs print it.
What causes it
The pending order's expiration does not fit the symbol: a type_time the symbol does not allow, or an expiry time that has already passed.
The fix in MQL5
Read SYMBOL_EXPIRATION_MODE, use only the expiration types it lists (GTC, day, specified time, specified day), and set a specified expiry in the future, on the trade server's clock.
#include <Trade/Trade.mqh>
CTrade trade;
void PlaceBuyLimit(const double lots, const double price)
{
trade.BuyLimit(lots, price, _Symbol, 0.0, 0.0, ORDER_TIME_SPECIFIED, TimeCurrent() - 60); // already expired
}#include <Trade/Trade.mqh>
CTrade trade;
void PlaceBuyLimit(const double lots, const double price)
{
const int modes = (int)SymbolInfoInteger(_Symbol, SYMBOL_EXPIRATION_MODE);
if((modes & SYMBOL_EXPIRATION_SPECIFIED) == SYMBOL_EXPIRATION_SPECIFIED)
trade.BuyLimit(lots, price, _Symbol, 0.0, 0.0, ORDER_TIME_SPECIFIED, TimeTradeServer() + 4 * 3600); // 4 hours from now
else if((modes & SYMBOL_EXPIRATION_GTC) == SYMBOL_EXPIRATION_GTC)
trade.BuyLimit(lots, price, _Symbol, 0.0, 0.0, ORDER_TIME_GTC, 0);
else
trade.BuyLimit(lots, price, _Symbol, 0.0, 0.0, ORDER_TIME_DAY, 0);
}Both compile in MetaEditor 5 with no errors or warnings. Adapt them to your EA; they were not run against a trade server.
Other MT5 errors
- MT5 error 10004: Requote
- MT5 error 10006: Request rejected
- MT5 retcode 10009: Request completed
- MT5 error 10013: Invalid request
- MT5 error 10014: Invalid volume in the request
- MT5 error 10015: Invalid price in the request
- MT5 error 10016: Invalid stops in the request
- MT5 error 10017: Trade is disabled
- MT5 error 10018: Market is closed
- MT5 error 10019: There is not enough money to complete the request
- MT5 error 10021: There are no quotes to process the request
- MT5 error 10026: Autotrading disabled by server
- MT5 error 10027: Autotrading disabled by client terminal
- MT5 error 10030: Invalid order filling type
- MT5 error 10031: No connection with the trade server
- MT5 error 10044: The request is rejected, because the "Only position closing is allowed" rule is set for the symbol
- MT5 error 10046: The request is rejected, because the "Opposite positions on a single symbol are disabled" rule is set for the trading account.
Read a whole MT5 EA's source
- MTR FullSystemEA (MQL5 source) The full MQL5 source of a production MT5 EA for XAUUSD M5 (hedge-grid and recovery): 21 files, 16,923 lines. $49 once.