cTrader Automate【フォールト・トレランス】

フォールト・トレランス

フォールト・トレランスとは、自動化システムが何らかの障害に遭遇した際にも動作を継続する能力を指します。
cTrader Automateでも同様に、フォールト・トレランスはcBotインスタンスがエラーに直面しても稼働し続けることを意味します

この記事では、フォールト・トレランスがどのように機能するかを説明し、この機能がアルゴ・トレーダーに提供する主な利点を説明します。

  • フォールト・トレランスのルールでは、例外に直面してもcBotインスタンスは実行を継続します。この機能により、cBotはさらに安定し、コードの実行方法を改善しやすくなります。
  • 遭遇した例外は自動的に操作ログに出力され、cBotの改良に必要な情報を得られます。
  • OnException(Exception exception)メソッドを使用すると、cBotが例外にどのように反応するかをカスタマイズできます。

フォールト・トレランスの役割

以下のフォールト・トレランスのルールにに従って、すべてのcBotが動作します。

  • 例外が発生した場合、cBotインスタンスは実行を継続します。
  • cBotの動作中に発生した例外はすべてログに記録します。
  • cBotが例外をどのように処理するか、カスタムルールを設定可能です。

フォールト・トレランスによって、cBotはプロセスをクラッシュさせる恐れのないエラーはすべて無視することができるようになります。
例外によってコードの実行が妨げられることはありますが、フォールトトレランスによって、cBotがクラッシュする回数は大幅に減ります。

OnException() メソッドの使い方

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

そのためには、OnException() メソッドを使います。OnException()メソッドは、処理されなかった例外の専用ハンドラとして動作します。デフォルトのシグネチャは次のとおりです。

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

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

1namespace cAlgo.Robots
2{
3  [Robot(AccessRights = AccessRights.None)]
4  public class SampleExceptionBot : Robot
5  {
6    private const string label = “Sample Exception Bot”;
7    protected override void OnStart()
8    {
9      var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);
10      ClosePosition(shortPosition);
11    }
12
13    protected override void OnException(Exception exception)
14    {
15      if (exception is NullReferenceException)
16      {
17        MessageBox.Show(“The position does not exist”, “Error!”);
18      }
19    }
20  }
21}

NullReferenceException例外をスローするには、cBotに存在しない可能性があるショート・ポジションをクローズさせます。
指定された例外に遭遇すると、cBot は説明のテキストを表示する MessageBox を表示します。

OnException()ハンドラは、このメソッドの呼び出し中に発生した例外を処理するものではないので注意が必要です。なお、このような例外はイベントログに記録されます。

フォールト・トレランスの限界とは?

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

  • OutOfMemoryException(メモリ容量不足)
  • StackOverflowException(スタックオーバーフロー)
  • 別スレッドで発生した未処理の例外
  • cBot インスタンスが実行されているプロセスをクラッシュさせる恐れのあるその他のエラー

上記のエラーが発生した場合、cBotの実行は停止します。

同じcBot内でも、複数の異なるインスタンスが1つのプロセスで実行されていることに注意が必要です。これらのインスタンスが1つでもクラッシュすると、インスタンス全体が動作を停止します。

まとめると、フォールト・トレランスは、cBotを安定して稼働できるようにするためのものです。