Przejdź do treści

Odporność na błędy

Termin „odporność na błędy" odnosi się do zdolności zautomatyzowanego systemu do kontynuowania działania w przypadku wystąpienia awarii. W przypadku algorytmów cTrader odporność na błędy oznacza, że procesy hostujące cBoty, wtyczki i wskaźniki mogą kontynuować działanie nawet w obliczu błędów.

Ten artykuł wyjaśnia, jak działa odporność na błędy, i opisuje kluczowe korzyści, jakie ta funkcja oferuje traderom algorytmicznym.

Odporność na błędy w jedną minutę!

  • Zgodnie z zasadami odporności na błędy, w przypadku wystąpienia wyjątku algorytm będzie kontynuować działanie. Ta funkcja sprawia, że algorytmy cTrader są jeszcze bardziej stabilne i zapewnia możliwości udoskonalenia sposobu wykonywania kodu.
  • Algorytmy mogą teraz automatycznie wyświetlać napotkane wyjątki w dzienniku operacji, dostarczając cennych informacji, które można wykorzystać do udoskonalenia kodu.
  • Możesz użyć metody OnException(Exception exception), aby dostosować sposób, w jaki Twoje algorytmy reagują na wyjątki. Użyj tego programu obsługi zdarzeń, aby tworzyć niezawodne i skuteczne rozszerzenia.

Zasady odporności na błędy

Krótko mówiąc, odporność na błędy zapewnia, że wszystkie algorytmy przestrzegają zasad wyszczególnionych poniżej:

  • W przypadku napotkania wyjątku algorytm musi kontynuować działanie.
  • Każdy wyjątek, który wystąpi podczas działania algorytmu, musi zostać zarejestrowany.
  • Użytkownicy muszą mieć możliwość wprowadzenia niestandardowych zasad określających, w jaki sposób algorytmy obsługują różne wyjątki.

Odporność na błędy pozwala algorytmom zasadniczo ignorować wszystkie błędy, które nie zagrażają awarią ich procesów. Chociaż wyjątki mogą nadal uniemożliwiać wykonanie kodu, odporność na błędy znacznie zmniejsza liczbę przypadków, w których algorytm może nieoczekiwanie ulec awarii.

Metoda OnException()

Zgodnie z zasadami odporności na błędy algorytmy muszą ignorować wyjątki. Możesz jednak również dostosować sposób, w jaki Twoje algorytmy reagują na określone wyjątki, lub całkowicie nadpisać domyślne zachowania odporności na błędy.

Aby to zrobić, użyj metody OnException(). Działa ona jako dedykowany program obsługi dla wszelkich nieobsłużonych wyjątków. Jej domyślna sygnatura jest następująca:

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

Rozważ poniższy przykład, w którym metoda OnException() jest używana do zmiany sposobu, w jaki cBot reaguje na wyjątek 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!");
            }
        }
    }
}

Aby zgłosić wyjątek NullReferenceException, sprawiamy, że nasz cBot zamyka krótką pozycję, która może nie istnieć. Gdy napotka określony wyjątek, nasz cBot ma wyświetlić MessageBox z tekstem wyjaśniającym, abyśmy mogli szybko zareagować na ten wyjątek i dostosować zachowania naszego cBota.

Należy pamiętać, że program obsługi OnException() nie ma obsługiwać wyjątków, które występują podczas wywoływania tej metody. Niemniej jednak takie wyjątki są nadal rejestrowane w dzienniku zdarzeń.

Korzyści z odporności na błędy

Odporność na błędy jest kluczowym aspektem działania handlu algorytmicznego w cTrader, zapewniając następujące korzyści.

  • Odporność na błędy znacznie zwiększa niezawodność algorytmów i zapewnia nowe możliwości udoskonalenia podejścia do handlu automatycznego.
  • Ponieważ algorytmy mogą wyświetlać napotkane wyjątki w dzienniku zdarzeń, możesz łatwo określić warunki, w których algorytm napotkał określony błąd.
  • Umożliwiając obsługę zdarzeń wyjątków, metoda OnException() może być używana do udoskonalenia zachowań Twoich algorytmów i poprawy ich niezawodności.

Obsługa awarii

Jak wspomniano wcześniej, kilka błędów może spowodować awarię całych procesów. Są to:

  • Wyjątek OutOfMemoryException.
  • Wyjątek StackOverflowException.
  • Każdy nieobsłużony wyjątek, który występuje w osobnym wątku.
  • Wszelkie inne błędy, które mogą zagrozić awarią procesu, w którym działa algorytm.

W przypadku wystąpienia któregokolwiek z powyższych błędów wystąpienie wskaźnika zostanie zatrzymane; nie zostanie automatycznie uruchomione ponownie. Jednak wyjątek zostanie nadal zarejestrowany w dzienniku.

Natomiast gdy proces hostujący wystąpienie cBota ulegnie awarii, zostanie automatycznie uruchomiony ponownie (a wyjątek zostanie zarejestrowany w dzienniku).

Wiele wystąpień w jednym procesie

Zdarzają się przypadki, gdy pojedynczy proces może hostować kilka wystąpień cBota. Jeśli jedno z tych wystąpień napotka wyjątek, który powoduje jego awarię, cały proces również ulegnie awarii. Po ponownym uruchomieniu proces uruchomi ponownie wszystkie wystąpienia cBota, które pierwotnie hostował.

Podsumowanie

Odporność na błędy zapewnia kilka cennych możliwości uczynienia algorytmów jeszcze bardziej stabilnymi i skutecznymi. Program obsługi OnException() zapewnia dodatkową warstwę kontroli nad tym, jak Twoje algorytmy reagują na wyjątki.