
MT5 MT5 取引サーバーのリターンコード
10013
- 定数名
TRADE_RETCODE_INVALID- メッセージ
invalid request- 意味
- 注文リクエストの内容が不正
MT5エラー10013とは
MqlTradeRequest 構造体の中身が不正で、サーバーが処理できないときのリターンコードです。ZeroMemory() で初期化していない、必要な項目が抜けている、口座の種類(ネッティング/ヘッジング)に合わない指定をしている、などが原因です。
ログの表示例
OrderSend error 4756, retcode 10013
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT5エラー10013の主な原因
- MqlTradeRequest を ZeroMemory() で初期化せず、前回の値が残っている
- action(TRADE_ACTION_DEAL など)と必要な項目の組み合わせが合っていない
- ヘッジング口座で決済するときに position(チケット)を指定していない
- type_filling や type_time に銘柄が対応していない値を指定している
- magic、symbol、volume などの必須項目が空
MT5エラー10013の対処法
- リクエストを作るたびに ZeroMemory(request) で初期化する
- できるだけ標準ライブラリの CTrade を使い、必要な項目を自動で設定させる
- OrderCheck() で事前チェックし、MqlTradeCheckResult の comment を確認する
コード例(MQL5)
// MqlTradeRequest は毎回 ZeroMemory で初期化する(10013 invalid request 対策)(MQL5)
bool ClosePosition(ulong ticket)
{
if(!PositionSelectByTicket(ticket)) return false;
MqlTradeRequest req;
MqlTradeResult res;
ZeroMemory(req); // 前回の値や不定値を消す
ZeroMemory(res);
ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
req.action = TRADE_ACTION_DEAL;
req.position = ticket; // ヘッジング口座では決済するポジションを指定
req.symbol = PositionGetString(POSITION_SYMBOL);
req.volume = PositionGetDouble(POSITION_VOLUME);
req.type = (ptype == POSITION_TYPE_BUY) ? ORDER_TYPE_SELL : ORDER_TYPE_BUY;
req.price = (ptype == POSITION_TYPE_BUY) ? SymbolInfoDouble(req.symbol, SYMBOL_BID)
: SymbolInfoDouble(req.symbol, SYMBOL_ASK);
req.deviation = 30;
req.magic = PositionGetInteger(POSITION_MAGIC);
long fill = SymbolInfoInteger(req.symbol, SYMBOL_FILLING_MODE);
req.type_filling = ((fill & SYMBOL_FILLING_FOK) == SYMBOL_FILLING_FOK) ? ORDER_FILLING_FOK
: ((fill & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC
: ORDER_FILLING_RETURN;
MqlTradeCheckResult check;
ZeroMemory(check);
if(!OrderCheck(req, check)) // 送る前に内容をチェック
{
PrintFormat("OrderCheck NG retcode=%u %s", check.retcode, check.comment);
return false;
}
return OrderSend(req, res);
}MetaEditor(MT5)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












