MQL の組み込み関数の実行に失敗した時には、GetLastError
関数によってそのエラーコードを取得できます。
このエラーコードは int 型の数値のため、その内容をテキストで取得したい場合は次のように変換する必要があります。
MT4 の場合
GetLastError
関数で取得したエラーコードを ErrorDescription
に渡すことで、テキスト形式でエラー内容を取得することができます。
これらの関数を使用するには、stdlib.mqh
をインクルードしておく必要があります。
下記は、ObjectCreate
の実行に失敗した時のエラー表示の例です。
// #include <stdlib.mqh>
if (!ObjectCreate(0 , name, OBJ_LABEL, subWindow, 0, 0)) {
Alert("Failed to create a label: ", ErrorDescription(GetLastError()));
return;
}
Failed to create a label: object already exists
MT5 の場合
MT5 の場合は、なんと ErrorDescription
関数が提供されてません(なんでやねん)。
正確には、MT4 で用意されていた stdlib.mqh
が提供されていません。
代わりに、下記のサイトで、MetaQuotes 社からライブラリとして ErrorDescription.mqh
ファイルが提供されています。
自分でダウンロードして使えということですね(なんでやねん)。
これをダウンロードして MQL5/Inlude
ディレクトリにコピーすれば、
#include <ErrorDescription.mqh>
とインクルードして、MT4 と同様に ErrorDescription
関数が使えるようになります。
自力で int
→ string
変換する関数を定義しているだけなのであたり前ですけど。
こういうユーティリティ系の関数は、自分用のユーティリティ関数をまとめたファイル(例えば Util.mqh
など)で定義しておくと、細かいファイルをたくさんインクルードしなくて済むのでスッキリします。
下記の例では、ユーティリティ系のクラスを Util
ネームスペース内にまとめて定義しています。
// #include <maku77/Util.mqh>
if (!ObjectCreate(0 , name, OBJ_LABEL, subWindow, 0, 0)) {
Alert(Util::ErrorDescWithCode());
return;
}
関連記事
- MetaTrader/MQL: チャート上にラベルを描画する (OBJ_LABEL, CChartObjectLabel)
- MetaTrader/MQL: 時刻情報を扱う (datetime, TimeLocal, TimeCurrent, TimeToString)
- MetaTrader/MQL: デバッグモードでコンパイルされているか調べる (_DEBUG, _RELEASE, MQL5_DEBUGGING)
- MetaTrader/MQL: MQL での色の表現方法 (color)
- MetaTrader/MQL: チャートの描画スタイルを設定する (ChartSetXxx)
- MetaTrader/MQL: 新しいチャートを開く (ChartOpen)
- MetaTrader/MQL: シンボルのスプレッド情報を取得する (SymbolInfoInteger)