【MQL5】SetUserError関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

SetUserError関数の働き・役割

SetUserError関数は、ユーザーが任意にエラー番号を設定するために使用されます。
この関数を使用すると、事前に定義された変数である _LastErrorに、指定されたエラー番号に基づく値を設定できます。特に、ERR_USER_ERROR_FIRST という基本となるエラー番号に、ユーザーが指定したエラー番号(user_error)を加算した値がセットされるのが特徴です。

この関数を使用することで、独自のエラーハンドリングやデバッグを実装する際に、任意のエラー番号を定義し、エキスパートログを通じて確認することが可能です。例えば、エラーが発生した場所や種類に応じて異なるエラー番号を設定し、後続の処理でそのエラー番号を参照することができます。

SetUserError関数の引数について

void  SetUserError(
  ushort user_error,   // エラー番号
  );

SetUserError関数には1つの引数があります。この引数を使って、設定するエラー番号を指定します。

引数構成:

1. user_error

  • 種類: ushort(符号なし短整数型)
  • 説明: ユーザーが設定するエラー番号です。
    ERR_USER_ERROR_FIRSTという定義済みのエラー番号に、この user_error で指定した数値が加算され、最終的なエラーコードが作成されます。例えば、user_error に 1 を設定した場合、_LastErrorには ERR_USER_ERROR_FIRSTに 1 を足した値がセットされます。

:
SetUserError関数で 1 を設定した場合、エラー番号 65537(ERR_USER_ERROR_FIRST + 1)が設定されます。

SetUserError関数の戻り値について

SetUserError関数には戻り値はありません。この関数を呼び出すと、指定されたエラー番号が設定されるだけで、関数自体は値を返しません。

SetUserError関数を使う際の注意点

SetUserError関数を使用してエラーを設定した後は、GetLastError関数でそのエラー番号を取得できますが、エラー番号が上書きされる可能性があるため、他の関数呼び出しを行う前に速やかに確認する必要があります。エラー番号が保持されるのは、次のエラーが発生するまでの間です。

また、エラー番号の範囲に注意する必要があります。user_errorに指定できる値は、ushort型(符号なし短整数型)の範囲内でなければなりません。この範囲を超える値を設定しようとすると、予期しない動作が発生する可能性があります。

SetUserError関数を使ったサンプルコード

// スクリプトが開始された際に実行される関数
void OnStart()
{
   // ユーザー定義エラー番号 1 を指定してエラーを設定します。
   // ERR_USER_ERROR_FIRST は 65536 で、これに 1 を足したエラー番号 65537 が設定されます。
   SetUserError(1);

   // GetLastError関数を使用して、最後に発生したエラー番号を取得します。
   // ここでは、65537 が取得されるはずです(ERR_USER_ERROR_FIRST + 1)。
   int lastError = GetLastError();

   // エキスパートログにエラー番号を出力します。
   // Print関数を使用して、"GetLastError = 65537" のような出力をします。
   Print("GetLastError = ", lastError);
}

サンプルコードの説明

  • OnStart関数は、スクリプトが開始されたときに自動的に呼び出される関数です。
  • SetUserError関数で、ユーザー定義エラー番号を 1 に設定します。これにより、65536 に 1 を加えたエラー番号 65537 が設定されます。
  • GetLastError関数を使って、最後に発生したエラー番号を取得します。この例では、65537 が返されます。
  • Print関数を使って、エキスパートログに指定された文字列や数値を出力します。この例では、”GetLastError = 65537″ という形式で出力されます。

このコードを実行することで、ユーザーが定義したエラー番号が正しく設定され、エラーコードをエキスパートログで確認できることがわかります。

SetUserError関数を使ってEAを作る際のアイディア

SetUserError関数は、エキスパートアドバイザーEA)で独自のエラーハンドリングを実装する際に便利です。以下に、EA作成時のアイディアをいくつか挙げます。

  1. 複雑なロジックでのエラー管理
    EAが複数のロジックやアルゴリズムを実行する場合、特定の条件でエラーが発生したときに独自のエラー番号を割り当て、どの部分で問題が生じたかを把握できます。例えば、発注に失敗した場合にはエラー番号1を、リクエストの処理中にタイムアウトが発生した場合にはエラー番号2を設定するなど、詳細なエラートラッキングが可能です。
  2. エラーごとのリトライ処理
    特定のエラー番号を設定した後、そのエラー番号に応じたリトライ処理を実装できます。例えば、接続が不安定で注文処理に失敗した場合は、エラー番号を設定し、一定回数リトライするロジックを追加することができます。
  3. エキスパートログでのデバッグ支援
    EAが異常終了した際や、期待通りの結果が得られなかった際に、SetUserError関数を使用して特定のエラー番号をログに残すことで、後から原因を特定しやすくなります。エキスパートログを通じて、エラーの発生場所や状況をより詳細に記録できるため、デバッグ作業が効率的に進みます。
  4. ユーザー定義エラーの通知機能
    SetUserError関数で設定したエラー番号を使って、特定のエラーが発生したときにアラートやメールで通知する機能を実装することも可能です。例えば、重要なエラー番号が設定されたときに、ユーザーに即座に知らせる仕組みを作ることができます。

これらのアイディアを活用することで、EAの動作をより信頼性の高いものにし、エラー発生時の対応もスムーズに行えるようになります。

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