cBot-Lebenszyklus
In diesem Artikel und dem dazugehörigen Video gehen wir die Code-Struktur durch und erklären die Logik hinter den Ereignissen und dem Lebenszyklus eines cTrader cBots.
Zur Erinnerung: Sie können auf Ihre cBots in der Anwendung Algo in cTrader zugreifen. Um einen neuen cBot zu erstellen, klicken Sie einfach auf die Schaltfläche Neuer cBot oder wählen Sie diese Option im unten gezeigten Dropdown-Menü aus.

Grundlegende Vorlage interpretieren
Nach dem Erstellen eines neuen cBots sollten Sie die folgende Grundstruktur im Code-Editor-Fenster sehen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | |
Beachten Sie, dass in der Grundvorlage nur drei Ereignisse angezeigt werden; diese Ereignisse werden von den Methoden OnStart(), OnTick() und OnStop() behandelt. Wir werden später zwei zusätzliche Methoden (OnBar() und OnException()) hinzufügen und erklären, wie sie funktionieren; zunächst werden wir die Methode OnStart() besprechen.
Methode OnStart() verwenden
Die Methode OnStart() wird ausgelöst, wenn ein cBot zum ersten Mal gestartet wird. Sie wird verwendet, um alle Variablen zu initialisieren, die Sie in Ihrem cBot verwenden möchten, einschließlich Indikatoren, Zähler, Ereignishandler oder Timer.
Hinweis
Die anfängliche Code-Vorlage enthält bereits eine Code-Anweisung, um eine Nachricht im Protokoll auszugeben, wenn ein cBot gestartet wird. Wie Sie sehen können, hat unser cBot den Parameter Message, und die Methode OnStart() übergibt den Wert dieses Parameters an die Methode Print().
Wir können demonstrieren, wie die Methode OnStart() funktioniert, indem wir einfach die cBot-Instanz in der Anwendung Trade starten und die Registerkarte Protokoll öffnen, um das Ergebnis zu sehen.

Wir können den cBot auch jederzeit stoppen, den Wert des Parameters Message auf der Registerkarte Parameter ändern und unsere Instanz neu starten. Beim Start wird unsere neue Nachricht weiterhin im Protokoll ausgegeben.


Methode OnTick() verwenden
Die Methode OnTick() wird jedes Mal ausgelöst, wenn sich der Geld- oder Briefkurs des Symbols ändert. Innerhalb dieser Methode können Sie normalerweise Bedingungen für den Einstieg in und Ausstieg aus Positionen sowie alle anderen Hilfsfunktionen programmieren, die Sie ausführen müssen, wenn ein neuer Datentick eintrifft.
Wir werden der Methode OnTick() den folgenden Code hinzufügen, damit sie eine Nachricht im Protokoll ausgibt.
1 | |
Wie Sie unten sehen können, gibt unser cBot jetzt bei jeder Preisänderung Geld- und Briefkurse im Protokoll aus.

Methode OnBar() verwenden
Die Methode OnBar() ist nicht in der Standard-cBot-Code-Vorlage enthalten, daher werden wir den folgenden Code-Ausschnitt hinzufügen, um sie hinzuzufügen.
1 2 3 4 | |
Die Methode OnBar() wird ausgelöst, wenn ein neuer Balken oder eine neue Kerze auf dem Chart gezeichnet wird, an den ein cBot angehängt ist. Ähnlich wie bei der Methode OnTick() können Sie die Methode OnBar() verwenden, um die Bedingungen für den Einstieg in und Ausstieg aus Positionen sowie alle anderen Logiken zu programmieren, die bei der Bildung jedes neuen Balkens ausgeführt werden müssen.
Wie die Methode OnBar() ausgelöst wird
Wenn Sie einen S1-Chart haben, wird jede Stunde ein neuer Balken gebildet, was bedeutet, dass die Methode OnBar() einmal pro Stunde aufgerufen wird. Wenn Sie einen Min1-Chart haben, wird dieselbe Methode einmal pro Minute aufgerufen.
Unsere Methode OnBar() gibt bei jedem neuen Balken/jeder neuen Kerze „OnBar" aus. Um zu demonstrieren, wie sie funktioniert, werden wir unseren cBot an einen Min1-Chart anhängen und einen Blick auf das Protokoll werfen.

Methode OnStop() verwenden
Die Methode OnStop() wird aufgerufen, wenn der cBot entweder vom Benutzer oder über den Code gestoppt wird. Wenn dies geschieht, wird jeglicher Code innerhalb der Methode OnStop() ausgeführt. Dies kann verwendet werden, um abschließende Operationen durchzuführen, wie z. B. das Schließen von Positionen.
Wir werden unserer Methode OnStop() den folgenden Code hinzufügen – wie üblich gibt unser cBot den Wert des Parameters Message aus, wenn er gestoppt wird.
1 | |
Im Screenshot unten starten und stoppen wir eine Instanz unseres cBots, um zu demonstrieren, wie das alles funktioniert.

Methode OnException() verwenden
Die Methode OnException() bietet Fehlertoleranz, indem sie nicht behandelte Ausnahmen erfasst und es Ihnen ermöglicht, zu entscheiden, wie Sie damit umgehen. Sie ist nicht in der Standard-Code-Vorlage enthalten, daher werden wir sie selbst mit dem folgenden Ausschnitt hinzufügen.
1 2 3 4 | |
Um die Methode OnException() auszulösen, werden wir Code schreiben, um eine Ausnahme zu erfassen, die auftritt, wenn wir versuchen, auf Informationen über eine Transaktion zuzugreifen, die nicht mehr existiert. Wir werden der Methode OnStart() den folgenden Code hinzufügen.
1 | |
Der Code, den wir in der Methode OnStart() geschrieben haben, wird eine Markt-Order mit den folgenden konfigurierbaren Parametern ausführen.
- Der Transaktionstyp wird eine Kauforder sein.
- Die Transaktion wird für das aktuelle Symbol des Charts ausgeführt, an das der cBot angehängt ist.
- Das Ordervolumen wird 1.000 Einheiten betragen.
- Die eindeutige Bezeichnung, die der Order angehängt wird, lautet „my label".
Wir werden außerdem den folgenden Code zur Methode OnTick() hinzufügen.
1 2 3 | |
Der Code, den wir in der Methode OnTick() geschrieben haben, wird die Position finden, die in der Methode OnStart() mit der Bezeichnung „my label" eröffnet wurde.
Wenn die Position mit derselben Bezeichnung gefunden wird, wird sie dann die Positions-ID der offenen Transaktion im Protokoll ausgeben. Sie wird außerdem eine weitere Nachricht namens „Message below" ausgeben, da die nächste Codezeile ausgeführt wird.
Wenn unser cBot gestartet wird und die Methode OnTick() aufgerufen wird und die Order gefunden wird, wird der cBot die Order-ID im Protokoll ausgeben und nach der Order-ID die Nachricht „Message below" ausgeben.

Wie Sie sehen können, treten keine Ausnahmen auf und unser cBot erfüllt seine Aufgabe perfekt.
Jetzt werden wir jedoch die vom cBot eröffnete Position manuell schließen und kleine Änderungen am Code vornehmen, sodass garantiert eine Ausnahme auftritt. In der Methode OnStart() werden wir die Orderbezeichnung in „cTrader" ändern. In der Methode OnTick() werden wir die Bedingung auskommentieren, die prüft, ob eine Position mit der Bezeichnung „my label" existiert.
Hier ist der endgültige Code unseres cBots – beachten Sie, dass dieser Code immer eine Ausnahme auslösen wird.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
Wir werden den cBot erneut ausführen und sehen, was passiert.

Was passiert ist, ist, dass eine neue Markt-Order erstellt wurde, als der cBot gestartet wurde. Die Bezeichnung, die dieser Order angehängt wurde, war "cTrader". In der Methode OnTick() versuchte der Code, eine Position mit der Bezeichnung "my label" abzurufen, und da wir die Codezeile mit der Bedingung auskommentiert haben. Er versuchte dann, die Positions-ID im Protokoll auszugeben.
Dies verursachte einen Ausnahmefehler, der normalerweise den cBot in früheren Versionen von cTrader gestoppt hätte, aber mit der neuen Methode OnException() können wir dies jetzt erfassen und den Fehler behandeln. Der cBot wird weiterhin ausgeführt und wir können den Fehler protokollieren, damit er behoben werden kann.
Zusammenfassung
Der cBot-Lebenszyklus besteht aus mehreren Schlüsselereignissen, die Sie über die Methoden OnStart(), OnTick(), OnStop(), OnBar() und OnException() behandeln können. Indem Sie anpassen, wie Ihr cBot auf wichtige Ereignisse reagiert, können Sie sicherstellen, dass sich Ihre Algorithmen genau wie erwartet verhalten.