Lebenszyklus eines benutzerdefinierten Indikators
Beispielcodestruktur
Dieser Artikel führt Sie durch die Codestruktur und erklärt die Logik hinter Ereignissen und dem Lebenszyklus für einen cTrader-Indikator. Um auf benutzerdefinierte Indikatoren zuzugreifen, öffnen Sie die Registerkarte Lokal in der Algo-App.

Als Beispiel können Sie einen neuen Indikator mit dem Namen „LifeCycle Test" erstellen, wobei der folgende Beispielcode im Code-Editor-Fenster verfügbar ist.

Um zur Boilerplate-Version zurückzukehren, kopieren Sie den folgenden Code.
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 | |
Auf den ersten Blick umfasst die Codestruktur nur zwei Methoden, die Methode Initialize() und die Methode Calculate(). Klicken Sie auf Erstellen, um mit dem Testen dieses Indikators fortzufahren. Wir werden eine zusätzliche Methode namens OnDestroy() hinzufügen und ihren Zweck später erklären.
Das Initialisierungsereignis
Wenn ein cTrader-Indikator zum ersten Mal an einen Chart angehängt wird oder wenn der Benutzer eine der Parametereinstellungen ändert, wird eine Indikatorinstanz neu erstellt und die Methode Initialize() aufgerufen. Sie wird verwendet, um alle Variablen zu initialisieren, die Sie in Ihrem Indikator verwenden möchten. Sie können auch zusätzliche Indikatoren definieren und referenzieren, um einen einzelnen Indikator mit Formeln aus anderen Indikatoren zu erstellen.
Standardmäßig enthält die neue Code-Vorlage eine Parametereinstellung namens Message mit dem Wert „Hello world!".
1 2 | |
In der Methode Initialize() befindet sich eine Codezeile, um diese Nachricht im Protokoll auszugeben.
1 | |
Um die Methode Initialize() zu demonstrieren, fügen Sie eine Indikatorinstanz hinzu, indem Sie auf das Symbol Plus neben dem Symbol Erstellen klicken und ein Währungspaar auswählen. Wenn Sie in der Indikatorzeile auf Mehr klicken und Instanz hinzufügen wählen, wird das Währungspaar EURUSD mit dem Zeitrahmen h1 automatisch hinzugefügt.

Hinweis
Das Hinzufügen einer Instanz in cTrader Algo entspricht dem Anhängen eines Indikators an einen Chart in der Trade-Anwendung.
Öffnen Sie nun die Registerkarte Protokoll im Bereich Handelsüberwachung unter dem Chart. Wie Sie sehen können, wurde die Nachricht „Hello world" ausgegeben.

Jedes Mal, wenn der Indikator zum ersten Mal einem Chart hinzugefügt wird oder wenn ein Parameter geändert wird, wird der Chart aktualisiert und die Methode Initialize() erneut aufgerufen. Geben Sie eine andere Nachricht im Abschnitt Parameter ein, um zu sehen, wie sich der Protokolleintrag entsprechend aktualisiert.

Indikatorausgabe berechnen
Die Methode Calculate() wird für jeden Index historischer Daten und bei jedem eingehenden Tick aufgerufen. Wenn der aktuelle Chart beispielsweise 1000 Balken hat, wird die Methode Calculate() für Index 0, 1, 2 und so weiter bis maximal 999 aufgerufen.
1 | |
Die Methode Calculate() kann während Phasen hoher Volatilität mehrmals pro Sekunde aufgerufen werden oder seltener, wenn der Markt flach ist. Um zu testen, wie es funktioniert, können Sie dem Körper der Methode Calculate() eine Codezeile hinzufügen, um den Indexwert auszugeben, der für jeden neuen Daten-Tick an die Methode übergeben wird. Vergessen Sie nicht, nach dem Hinzufügen von Änderungen im Code-Editor-Fenster jedes Mal auf Erstellen zu klicken.
1 | |
Um vom Code-Editor-Fenster zum Chart zu wechseln, klicken Sie auf die hinzugefügte Indikatorinstanz. Wenn Sie die Registerkarte Protokoll im Bereich Handelsüberwachung öffnen, sehen Sie die für jeden Index ausgegebenen Werte, der an die Methode übergeben wurde.

Die Methode OnDestroy()
Die Methode OnDestroy() wird aufgerufen, wenn der Indikator von einem Chart entfernt wird und nicht mehr benötigt wird. Sie müssen diese Methode implementieren, da sie nicht standardmäßig hinzugefügt wird, wenn Sie einen neuen Indikator erstellen.
1 2 3 4 | |
Diese Methode ist für Programmierer nützlich, da sie es ihnen ermöglicht, nicht verwaltete Ressourcen freizugeben und Abschlussaufgaben durchzuführen. Sie hilft, Speicherlecks zu verhindern und stellt sicher, dass der Indikator nach dem Entfernen keine Ressourcen behält. Beispiele hierfür sind das Schließen von Verbindungen zu externen Datenfeeds, das Freigeben großer Datenobjekte und andere Vorgänge, die Speicher freigeben.
Zusammenfassung
Zusammenfassend veranschaulichen die Methoden Initialize(), Calculate() und OnDestroy() verschiedene Phasen des Lebenszyklus des benutzerdefinierten Indikators. Durch Anpassen des Beispielcodes in der Algo-App können Sie frei entscheiden, wie Sie Indikatorvariablen initialisieren, die Indikatorausgabe berechnen und Abschlussaufgaben ausführen.
