コンテンツにスキップ

フォールトトレランス

「フォールトトレランス」という用語は、自動化システムが障害に遭遇したときに動作を継続する能力を指します。 cTraderアルゴリズムの場合、フォールトトレランスとは、cBot、プラグイン、およびインジケーターをホストするプロセスがエラーに直面しても実行を継続できることを意味します。

この記事では、フォールトトレランスの仕組みと、この機能がアルゴリズムトレーダーに提供する主な利点について説明します。

1分でわかるフォールトトレランス!

  • フォールトトレランスのルールに従い、例外が発生した場合でもアルゴリズムは実行を継続します。 この機能により、cTraderのアルゴリズムはさらに安定し、コードの実行方法を改善する機会が提供されます。
  • アルゴリズムは、操作ログに遭遇した例外を自動的に出力できるようになり、コードを改善するための貴重な情報を提供します。
  • OnException(Exception exception)メソッドを使用して、アルゴリズムが例外にどのように反応するかをカスタマイズできます。 このイベントハンドラを使用して、信頼性が高く効果的な拡張機能を作成できます。

フォールトトレランスのルール

簡単に言えば、フォールトトレランスは、すべてのアルゴリズムが以下のルールに従うことを保証します:

  • 例外が発生した場合、アルゴリズムは実行を継続しなければなりません。
  • アルゴリズムが動作中に発生するすべての例外はログに記録されなければなりません。
  • ユーザーは、アルゴリズムがさまざまな例外をどのように処理するかを決定するカスタムルールを導入する機会を持たなければなりません。

フォールトトレランスにより、アルゴリズムはプロセスをクラッシュさせる恐れのないすべてのエラーを本質的に無視できます。 例外がコードの実行を妨げる可能性はありますが、フォールトトレランスにより、アルゴリズムが予期せずクラッシュする回数が大幅に減少します。

OnException()メソッド

フォールトトレランスのルールに従い、アルゴリズムは例外を無視しなければなりません。 ただし、特定の例外にアルゴリズムがどのように反応するかをカスタマイズしたり、デフォルトのフォールトトレランスの動作を完全に上書きしたりすることもできます。

そのためには、OnException()メソッドを使用します。 これは、未処理の例外専用のハンドラとして機能します。 そのデフォルトのシグネチャは以下の通りです:

1
2
3
4
protected virtual void OnException(Exception exception)
{
    /// Introduce your custom exception handling logic here.
}

NullReferenceException例外に対してcBotがどのように反応するかを変更するためにOnException()メソッドを使用する次の例を考えてみましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class SampleExceptionBot : Robot
    {
        private const string label = "Sample Exception Bot";
        protected override void OnStart()
        {
                var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);
                ClosePosition(shortPosition);
        }

        protected override void OnException(Exception exception)
        {
            if (exception is NullReferenceException)
            {
                MessageBox.Show("The position does not exist", "Error!");
            }
        }
    }
}

NullReferenceException例外をスローするために、cBotに存在しない可能性のあるショートポジションをクローズさせます。 指定された例外に遭遇した場合、cBotは説明テキストを表示するMessageBoxを表示するはずです。これにより、この例外に迅速に対応し、cBotの動作を調整できます。

OnException()ハンドラは、このメソッドが呼び出されている間に発生する例外を処理することを意図していないことに注意してください。 それにもかかわらず、そのような例外はイベントログに記録されます。

フォールトトレランスの利点

フォールトトレランスは、cTraderでのアルゴリズム取引がどのように機能するかの重要な側面であり、以下の利点を提供します。

  • フォールトトレランスは、アルゴリズムの信頼性を大幅に向上させ、自動取引へのアプローチを改善する新しい機会を提供します。
  • アルゴリズムが遭遇した例外をイベントログに表示できるため、アルゴリズムが特定のエラーに遭遇した条件を簡単に特定できます。
  • 例外イベントの処理を可能にすることで、OnException()メソッドを使用してアルゴリズムの動作を完璧にし、信頼性を向上させることができます。

クラッシュの処理

前述のように、いくつかのエラーはプロセス全体をクラッシュさせる可能性があります。 それらは以下の通りです:

  • OutOfMemoryException例外。
  • StackOverflowException例外。
  • 別のスレッドで発生する未処理の例外。
  • アルゴリズムが実行されているプロセスをクラッシュさせる可能性のあるその他のエラー。

上記のいずれかのエラーに直面した場合、インジケーターインスタンスは停止され、自動的に再起動されません。 ただし、例外はログに記録されます。

対照的に、cBotインスタンスをホストするプロセスがクラッシュした場合、それは自動的に再起動されます(例外はログに記録されます)。

単一プロセス内の複数インスタンス

単一のプロセスが複数のcBotインスタンスをホストする場合があります。 これらのインスタンスの1つがクラッシュを引き起こす例外に遭遇した場合、プロセス全体もクラッシュします。 再起動時、プロセスは元々ホストしていたすべてのcBotインスタンスを再起動します。

概要

フォールトトレランスは、アルゴリズムをさらに安定させ、効果的にするためのいくつかの貴重な機会を提供します。 OnException()ハンドラは、アルゴリズムが例外にどのように反応するかを制御する追加の層を提供します。