2018年10月18日木曜日

[MQL4] GetLastError() で取得したエラーコードをエラーメッセージに変換する方法

MQL4 の関数の中には、失敗した場合、GetLastError() でエラーコードを取得できるものがあります。

しかし、このエラーコードは Trade Server Return Codes に載ってないものが多く、そのままでは役に立ちません。

そのため、ErrorDescription() という標準関数が用意されています1

2018/10/19 追記

「載ってないものが多く」と書いたのですが、Runtime Errors の方には 4000番台のエラーも載っていました2Trade Server Return CodesRuntime Errors から若い番号のものを抜粋した表のようです。
OrderModify() 等は 4000番台のエラーも返すのに、リンクされているドキュメントが不十分というのは不親切だなぁ。

ErrorDescription() の使用方法

まず stdlib.mqh を include します。

1
#include <stdlib.mqh>

あとは以下のように GetLastError() で取得したエラーコードを与えると、対応したエラーメッセージが返されます。

1
2
3
4
5
6
7
if (!OrderModify(ticket, price, stoploss, takeprofit, expiration)) {
    int error = GetLastError();
    printf("OrderModify error \"%s\"(%d)", ErrorDescription(error), error);
}
 
// 結果
// OrderModify error "invalid ticket"(4108)

なお、GetLastError() は2度呼ぶと値が変わってしまうので、上記のように変数で一度受けて使用しましょう。

参考

[MQL4] GetLastError() は2度呼んではいけない

  1. 公式のサンプルの中でもよく使われています 
  2. どこかで見た気はしていた 
?