
MT4 MT4 実行時エラー
4105
- 定数名
ERR_NO_ORDER_SELECTED- メッセージ
no order selected- 意味
- 注文(ポジション)が選択されていない
MT4エラー4105とは
OrderSelect() で注文を選択していない、または選択に失敗した状態で OrderTicket() や OrderLots() などを呼んだときのエラーです。
ログの表示例
OrderClose error 4105
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT4エラー4105の主な原因
- OrderSelect() を呼ばずに OrderTicket() などを使っている
- OrderSelect() の戻り値を確認しておらず、選択に失敗しているのに処理を続けている
- 決済済みのポジションを MODE_TRADES で選択しようとしている(決済済みは MODE_HISTORY)
MT4エラー4105の対処法
- 必ず if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) の中で注文情報を読む
- 決済済みの注文を読むときは MODE_HISTORY を指定する
- 決済ループは後ろから(OrdersTotal()-1 から 0 へ)回す
コード例(MQL4)
// 自分のポジションを安全に決済する(エラー4105・4108 対策)(MQL4)
void CloseAll(int magic)
{
// 決済すると番号が詰まるので、後ろから回す
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; // 選択できたときだけ読む
if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
bool ok = true;
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
ok = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 30, clrNONE); // 決済価格は OrderClosePrice()
else
ok = OrderDelete(OrderTicket()); // 待機注文は OrderDelete()
if(!ok) Print("決済エラー ", GetLastError(), " ticket=", OrderTicket());
}
}MetaEditor(MT4)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












