
MT5 MT5 取引サーバーのリターンコード
10029
- 定数名
TRADE_RETCODE_FROZEN- メッセージ
frozen- 意味
- 注文・ポジションが凍結されている(フリーズレベル)
MT5エラー10029とは
現在値がフリーズレベル以内に近づいているため、注文やポジションの変更・削除ができないときのリターンコードです。MT4 のエラー145にあたります。
ログの表示例
CTrade::OrderModify: modify #123456 buy limit 0.10 USDJPY [frozen]
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT5エラー10029の主な原因
- 待機注文の価格や SL・TP が、現在値から SYMBOL_TRADE_FREEZE_LEVEL 以内にある
MT5エラー10029の対処法
- SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL) * _Point より離れているときだけ変更する
- 変更できないときは次のティックで再判定する
コード例(MQL5)
// 値が変わるときだけ SL を変更する(10025・10016・10029 対策)(MQL5)
#include <Trade\Trade.mqh>
CTrade trade;
void TrailBuy(ulong ticket, double trailPips)
{
if(!PositionSelectByTicket(ticket)) return;
double pip = (_Digits == 3 || _Digits == 5) ? _Point * 10 : _Point;
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double newSl = NormalizeDouble(bid - trailPips * pip, _Digits);
double curSl = PositionGetDouble(POSITION_SL);
double tp = PositionGetDouble(POSITION_TP);
long level = MathMax(SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL),
SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL));
if(newSl <= curSl + _Point / 2) return; // 変化なし・不利な方向なら送らない
if(bid - newSl < level * _Point) return; // ストップレベル・フリーズレベルの内側
if(!trade.PositionModify(ticket, newSl, tp))
Print("retcode=", trade.ResultRetcode(), " ", trade.ResultRetcodeDescription());
}MetaEditor(MT5)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












