MT4(MQL4)/MT5(MQL5)の_LastError
プログラム実行中に発生した直近のエラーを返します。
int _LastError
int GetLastError()
MT4,MT5共に「 _LastError」でも「GetLastError() 」でも動きます。
戻り値一覧はこちら(公式ページ)
ちなみに、MQL4ではエラーコードを呼び出すと _LastError がリセットされていたみたいなんですが、MQL5ではリセットされません。リセットするにはResetLastError()を発行する必要があります。
サンプルコード(正常終了の場合)
Ordersendで間違った内容を注文した場合を例に取ります。
void OnInit()
{
MqlTick last_tick;
SymbolInfoTick(_Symbol,last_tick);
double Ask=last_tick.ask;
double Bid=last_tick.bid;
double SL = 0.05;
double TP = 0.05;
int MagicNumber = 123456;
double lots = 0.1;
MqlTradeRequest request = {};
MqlTradeResult result = {};
request.action = TRADE_ACTION_DEAL;
request.type = ORDER_TYPE_BUY; // 注文タイプ
request.magic = MagicNumber; // マジックナンバー(識別用)
request.symbol = _Symbol; // 通貨ペア名
request.volume = lots; // ロット数
request.price = SymbolInfoDouble(Symbol(),SYMBOL_ASK);// 注文価格
request.sl = Ask-SL; // ストップロス価格
request.tp = Ask+TP; // リミット価格
request.deviation = 3; // スリッページ
request.expiration = 0; // 有効期限
request.comment = "aaa"; // コメント
OrderSend(request, result);
Print("_LastError = ", _LastError);
return;
}
結果
0(正常終了)が出力されます。
サンプルコード(エラーの場合)
void OnInit()
{
MqlTick last_tick;
SymbolInfoTick(_Symbol,last_tick);
double Ask=last_tick.ask;
double Bid=last_tick.bid;
double SL = 0.05;
double TP = 0.05;
int MagicNumber = 123456;
double lots = 0.1;
MqlTradeRequest request = {};
MqlTradeResult result = {};
request.action = TRADE_ACTION_DEAL;
request.type = ORDER_TYPE_BUY; // 注文タイプ
request.magic = MagicNumber; // マジックナンバー(識別用)
request.symbol = _Symbol; // 通貨ペア名
request.volume = lots; // ロット数
request.price = SymbolInfoDouble(Symbol(),SYMBOL_ASK);// 注文価格
//↓↓↓↓↓この部分が間違い↓↓↓↓↓
//SLTPそれぞれのプラスマイナスを逆転させています。
//このため指値/逆指値として成立しない値になります。
request.sl = Ask+SL; // ストップロス価格
request.tp = Ask-TP; // リミット価格
//↑↑↑↑↑この部分が間違い↑↑↑↑↑
request.deviation = 3; // スリッページ
request.expiration = 0; // 有効期限
request.comment = "aaa"; // コメント
OrderSend(request, result);
Print("_LastError = ", _LastError);
return;
}
結果(エラーの場合)
4756(ERR_TRADE_SEND_FAILED 取引リクエストに失敗)のエラーが出力されます。
操作ログタブを開くと、ストップロスが不正と出ています。
買いで入るのに、指値/逆指値を逆の考え方で入力してしまったためです。
(Buyなら指値は約定価格より上、逆指値は約定価格より下でなければならない)
コメント / Comments