フォールトトレランス

cBots (自動売買)

「フォールトトレランス」とは、自動化システムが何らかの障害に遭遇した際に動作を継続できる能力を指します。cTraderのアルゴリズムにおけるフォールトトレランスとは、cBots、プラグイン、インディケーターをホストするプロセスがエラーに直面しても動作を続けることができることを意味します。

この記事では、フォールトトレランスがどのように機能するかを説明し、この機能がアルゴトレーダーに提供する主要な利点について説明します。以下に、この機能の1分間の概要を示します。

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

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

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

簡単に言えば、フォールトトレランスは以下のルールに従うことを保証します。

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

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

OnException()メソッド

フォールトトレランスルールの下では、アルゴは例外を無視する必要があります。しかし、特定の例外に対するアルゴの反応をカスタマイズしたり、デフォルトのフォールトトレランスの動作を完全に上書きすることもできます。

これを行うには、OnException()メソッドを使用します。このメソッドは、未処理の例外に対する専用のハンドラーとして機能します。デフォルトのシグネチャは次のとおりです。

1
2
3
4
protected virtual void OnException(Exception exception)
{
    /// カスタム例外処理ロジックをここに導入します。
}

次の例では、OnException()メソッドを使用して、cBotがNullReferenceException例外にどのように反応するかを変更しています。

 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!");
            }
        }
    }
}

この例外をスローするために、存在しない可能性があるショートポジションを閉じるようにcBotを設定します。指定された例外に直面すると、cBotは説明テキストを表示するMessageBoxを表示することになっています。これにより、この例外に迅速に対応し、cBotの動作を調整できます。

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

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

フォールトトレランスは、cTraderのアルゴトレーディングが提供する次のような利点により、アルゴトレーディングにとって重要な要素です。

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

クラッシュの処理

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

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

上記のエラーに直面した場合、インディケーターインスタンスは停止されます。自動的に再起動されることはありません。ただし、例外はログに記録されます。

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

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

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

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

目次

このページについて