Vai al contenuto

Tolleranza agli errori

Il termine "tolleranza agli errori" si riferisce alla capacità di un sistema automatizzato di continuare a funzionare quando si verifica un guasto. Per gli algoritmi cTrader, la tolleranza agli errori significa che i processi che ospitano cBot, plugin e indicatori possono continuare a funzionare anche quando si verificano errori.

Questo articolo spiega come funziona la tolleranza agli errori e descrive i principali vantaggi che questa funzione offre ai trader algoritmici.

Tolleranza agli errori in un minuto!

  • In base alle regole di tolleranza agli errori, quando si verifica un'eccezione, un algoritmo continuerà a funzionare. Questa funzione rende gli algoritmi cTrader ancora più stabili e offre opportunità per perfezionare il modo in cui viene eseguito il tuo codice.
  • Gli algoritmi possono ora generare automaticamente le eccezioni che incontrano nel registro delle operazioni, fornendo informazioni preziose che puoi utilizzare per perfezionare il tuo codice.
  • Puoi utilizzare il metodo OnException(Exception exception) per personalizzare il modo in cui i tuoi algoritmi reagiscono alle eccezioni. Usa questo gestore di eventi per creare estensioni affidabili ed efficaci.

Regole di tolleranza agli errori

In breve, la tolleranza agli errori garantisce che tutti gli algoritmi seguano le regole dettagliate di seguito:

  • Quando si verifica un'eccezione, un algoritmo deve continuare a funzionare.
  • Ogni eccezione che si verifica mentre un algoritmo è in funzione deve essere registrata.
  • Gli utenti devono avere l'opportunità di introdurre regole personalizzate che determinano come gli algoritmi gestiscono le varie eccezioni.

La tolleranza agli errori consente agli algoritmi di ignorare essenzialmente tutti gli errori che non minacciano di bloccare i loro processi. Sebbene le eccezioni possano ancora impedire l'esecuzione del codice, la tolleranza agli errori riduce notevolmente il numero di volte in cui un algoritmo può bloccarsi in modo imprevisto.

Il metodo OnException()

In base alle regole di tolleranza agli errori, gli algoritmi devono ignorare le eccezioni. Tuttavia, puoi anche personalizzare il modo in cui i tuoi algoritmi reagiscono a determinate eccezioni o sovrascrivere completamente i comportamenti predefiniti di tolleranza agli errori.

Per farlo, usa il metodo OnException(). Funge da gestore dedicato per qualsiasi eccezione non gestita. La sua firma predefinita è la seguente:

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

Considera il seguente esempio in cui il metodo OnException() viene utilizzato per modificare il modo in cui un cBot reagisce all'eccezione 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!");
            }
        }
    }
}

Per generare l'eccezione NullReferenceException, facciamo in modo che il nostro cBot chiuda una posizione corta che potrebbe non esistere. Quando incontra l'eccezione specificata, il nostro cBot dovrebbe mostrare un MessageBox che visualizza un testo esplicativo, in modo da poter reagire rapidamente a questa eccezione e regolare i comportamenti del nostro cBot.

Nota che il gestore OnException() non è destinato a gestire le eccezioni che si verificano mentre questo metodo viene richiamato. Tuttavia, tali eccezioni vengono comunque registrate nel registro eventi.

Vantaggi della tolleranza agli errori

La tolleranza agli errori è un aspetto cruciale del funzionamento del trading algoritmico in cTrader in quanto fornisce i seguenti vantaggi.

  • La tolleranza agli errori aumenta notevolmente l'affidabilità degli algoritmi e offre nuove opportunità per perfezionare il tuo approccio al trading automatizzato.
  • Poiché gli algoritmi possono visualizzare le eccezioni che incontrano nel registro eventi, puoi facilmente determinare le condizioni in cui un algoritmo ha riscontrato un particolare errore.
  • Consentendo la gestione degli eventi di eccezione, il metodo OnException() può essere utilizzato per perfezionare i comportamenti dei tuoi algoritmi e migliorarne l'affidabilità.

Gestire i crash

Come affermato in precedenza, diversi errori possono bloccare interi processi. Sono i seguenti:

  • L'eccezione OutOfMemoryException.
  • L'eccezione StackOverflowException.
  • Qualsiasi eccezione non gestita che si verifica in un thread separato.
  • Qualsiasi altro errore che potrebbe minacciare di bloccare il processo in cui è in esecuzione un algoritmo.

Quando si verifica uno degli errori sopra indicati, un'istanza di indicatore verrà arrestata; non verrà riavviata automaticamente. Tuttavia, l'eccezione verrà comunque registrata nel registro.

Al contrario, quando un processo che ospita un'istanza di cBot si blocca, verrà riavviato automaticamente (con l'eccezione registrata nel registro).

Più istanze in un singolo processo

Ci sono casi in cui un singolo processo può ospitare diverse istanze di cBot. Se una di queste istanze incontra un'eccezione che ne causa il blocco, anche l'intero processo si bloccherà. Al riavvio, il processo riavvierà tutte le istanze di cBot che ospitava originariamente.

La tolleranza agli errori offre diverse preziose opportunità per rendere gli algoritmi ancora più stabili ed efficaci. Il gestore OnException() fornisce un ulteriore livello di controllo sul modo in cui i tuoi algoritmi reagiscono alle eccezioni.