サンプルコード 一覧へ戻る

MQL5サンプルコード

【MT5(MQL5)サンプルコード】_LastError、GetLastError()

スポンサーリンク

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なら指値は約定価格より上、逆指値は約定価格より下でなければならない)

コメント

タイトルとURLをコピーしました