Technischen Indikator in cTrader erstellen
Dieser Artikel beschreibt die Schritte zum Erstellen benutzerdefinierter technischer Indikatoren, einschließlich Tools für algorithmischen Handel oder manuelle Aktionen in cTrader.
Tipp
Erfahren Sie, wie Sie technische Indikatoren erstellen, indem Sie ein Video in einer Schritt-für-Schritt-Anleitung ansehen.
Klicken Sie auf der Registerkarte Indicators der Algo-App auf die Schaltfläche New, um den Assistenten zur Algorithmuserstellung zu öffnen.
Geben Sie einen Namen für Ihren Indikator ein und wählen Sie dann eine Programmiersprache zwischen C# und Python.
Wählen Sie eine Erstellungsmethode aus:
-
Von Grund auf neu – der neue Indikator enthält nur eine Basisvorlage.
-
Mit einer Vorlage – Sie können einen vorgefertigten Algorithmus aus einer Liste von Python#- oder C#-Vorlagen auswählen, die eine breite Palette von Indikatortypen, technischen Analysetools und mehr abdecken.
Hinweis
Vorgefertigte Algorithmen enthalten bereits Logik für Berechnungen und anpassbare Parameter. Solche Indikatoren können auf Charts angezeigt werden, sobald Sie sie speichern und erstellen.
Nachdem Sie auf Erstellen geklickt haben, öffnet sich der Code-Editor und Sie können mit der Bearbeitung des Indikator-Codes beginnen.
Code bearbeiten
Abhängig von Ihrer Erstellungsmethode sollte das Indikatorcode-Beispiel eines oder mehrere der folgenden Elemente enthalten:
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 | |
Das Attribut Indicator geht zusammen mit seinen optionalen Eigenschaften wie TimeZone und AccessRights der Deklaration der Indikatorklasse (SimpleIndicator) voraus.
Diese Methoden sind standardmäßig in jedem Indikator enthalten:
- Die Methode
Initialize()wird einmal aufgerufen, wenn Ihr Indikator startet. Sie wird normalerweise verwendet, um Variablen, verschachtelte Indikatoren und Serien einzurichten, die von Anfang an bereit sein müssen. - Die Methode
Calculate()wird automatisch bei jedem historischen Balken und in Echtzeit bei jedem neuen Tick aufgerufen. Hier implementieren Sie die Formel des Indikators und definieren, wie Ergebnisse berechnet und angezeigt werden.
Das Attribut [Output()] gibt die Werte an, die Ihr Indikator erzeugt, und wie sie im Chart erscheinen. Sie können den Namen und den Stil jeder Ausgabe anpassen, zum Beispiel durch Festlegen der Linienfarbe.
Die Methoden Initialize() und Calculate() bilden die Grundlage jedes benutzerdefinierten Indikators und sollten niemals weggelassen werden. Sie können Ihre eigenen Methoden hinzufügen, um die Funktionalität zu erweitern, genau wie beim Codieren eines cBots. Um mehr über Algorithmen zu erfahren, beginnen Sie mit dem Leitfaden C#-Grundlagen und erkunden Sie Indikator-Code-Beispiele.
Hinweis
Referenzen umfassen alle Klassen, Ereignisse, Methoden, Variablen usw. zum Erstellen von Algorithmen in cTrader, während vollständige Algorithmusbeispiele und Vorlagen in einem GitHub-Repository verfügbar sind.
Wenden Sie Ihr neues Wissen an, um den Indikatorcode zu bearbeiten und ihn an Ihre Bedürfnisse anzupassen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Die Klasse SimpleIndicator definiert einen benutzerdefinierten Indikator in Python.
Diese Methoden sind standardmäßig in jedem Indikator enthalten:
- Die Methode
initialize(self)wird einmal aufgerufen, wenn Ihr Indikator startet. Sie wird normalerweise verwendet, um Variablen, verschachtelte Indikatoren und Serien zu initialisieren, die von Anfang an bereit sein müssen. - Die Methode
calculate(self, index)wird automatisch bei jedem historischen Balken und in Echtzeit bei jedem neuen Tick aufgerufen. Hier implementieren Sie die Formel des Indikators und definieren, wie Ergebnisse berechnet und angezeigt werden.
Die Methoden initialize(self) und calculate(self, index) bilden die Grundlage jedes benutzerdefinierten Indikators und sollten niemals weggelassen werden. Sie können auch Ihre eigenen Hilfsmethoden innerhalb der Klasse hinzufügen, um die Funktionalität zu erweitern, genau wie beim Codieren eines cBots. Um mehr über Algorithmen zu erfahren, beginnen Sie mit Python-Grundlagen und erkunden Sie Indikator-Code-Beispiele.
Wenden Sie Ihr neues Wissen an, um den Indikatorcode zu bearbeiten und ihn an Ihre Bedürfnisse anzupassen.
Speichern und erstellen
Speichern Sie Ihren Code, indem Sie oben im Code-Editor auf den Button Speichern klicken oder die Tastenkombination Ctrl+S verwenden.
Bevor Sie Ihren cBot verwenden können, müssen Sie seinen Code validieren, indem Sie das cBot-Projekt erstellen. Klicken Sie oben im Code-Editor auf den Button Erstellen oder drücken Sie Ctrl+B.
Speichern Sie Ihren Code, indem Sie oben im Code-Editor auf das Symbol Speichern klicken oder die Tastenkombination Cmd+S verwenden.
Bevor Sie Ihren cBot verwenden können, müssen Sie seinen Code validieren, indem Sie das cBot-Projekt erstellen. Klicken Sie oben im Code-Editor auf das Symbol Erstellen oder drücken Sie Cmd+B.
Wenn die Erstellung erfolgreich ist, sehen Sie eine Bestätigungsmeldung in Erstellungsergebnis. Wenn die Erstellung fehlschlägt, wird stattdessen eine Zusammenfassung aller aufgetretenen Fehler angezeigt.
Wenn es seit der letzten Erstellung Änderungen am Code gibt, erscheint ein Sternchen neben dem Symbol Erstellen. In diesem Fall sollten Sie den Indikator erneut erstellen, bevor Sie eine Instanz davon zu einem Chart hinzufügen.
Um den Indikator auf einem Chart zu verwenden oder anzuzeigen, fügen Sie eine Instanz davon hinzu, oder Sie können den Indikator-Code weiter modifizieren, wie in den Abschnitten erläutert.
NaN-Arithmetik verwenden
Indikatoren führen Berechnungen durch, um bestimmte visuelle Darstellungen auszugeben, und es ist wichtig, dass Ihr Code Grenzfälle und Randbedingungen während dieser Berechnungen korrekt behandelt.
Betrachten Sie den folgenden Ausschnitt aus einem Indikator, der einen detrendierten Preisoszillator ausgibt:
1 2 3 4 5 6 7 8 9 10 11 | |
Der obige Code definiert allgemeine Berechnungsregeln, lässt jedoch Randbedingungen aus. Wenn beispielsweise Periods auf 10 gesetzt ist und index in den Bereich 0–9 fällt, gibt die Berechnung NaN (Not a Number) zurück. Dieses Problem tritt auf, weil der Indikator keine Werte für einen Balkenchart mit einem negativen Index berechnen kann.
Um das Problem zu beheben, können Sie eine Bedingung wie unten gezeigt hinzufügen:
1 2 3 4 5 6 7 | |
Der Code für den einfachen gleitenden Durchschnitt selbst muss ebenfalls prüfen, dass index >= Periods. Wenn Sie einen verschachtelten Indikator verwenden, wie z. B. eine andere Art von gleitendem Durchschnitt, wird die Bedingung anders sein, um zusätzliche Berechnungen zu berücksichtigen.
Obwohl Sie explizite Randbedingungen definieren können, bietet C# eine bequeme Möglichkeit, diese Probleme durch NaN-Arithmetik zu vermeiden. Insbesondere unterstützt der Datentyp double NaN-Berechnungen vollständig. Zum Beispiel:
1 2 3 4 5 | |
Wenn jedoch ein Operand in einer Berechnung NaN ist, wird das Ergebnis ebenfalls NaN sein. Da benutzerdefinierte cTrader-Indikatoren mit dem Typ DataSeries arbeiten, wird beim Versuch, auf ein DataSeries-Element mit einem negativen Index zuzugreifen, NaN zurückgegeben, und der Wert wird nicht auf dem Handelschart gezeichnet. Dieses Verhalten ermöglicht es dem Indikator, weiter zu arbeiten, ohne Ausnahmen auszulösen. In den meisten Fällen können Sie Randbedingungen sicher ignorieren und sich nur auf die allgemeine Berechnungslogik konzentrieren.
Explizite Prüfungen hinzufügen
Während NaN-Arithmetik die Behandlung von Randbedingungen vereinfacht, erfordern einige Fälle dennoch explizite NaN-Prüfungen. Rekursive Indikatoren sind ein häufiges Beispiel. Ein rekursiver Indikator berechnet seinen aktuellen Wert basierend auf dem zuvor berechneten Wert.
Betrachten Sie die folgende Implementierung eines Exponential Moving Average:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Wenn der Indikator die erste Periode berechnet, muss der Anfangswert explizit auf einen Nicht-NaN-Typ gesetzt werden. Andernfalls geben alle nachfolgenden Berechnungen NaN zurück, wodurch der Indikator unbrauchbar wird.
Im obigen Code wird dies mit der Methode double.IsNaN(previousValue) behandelt. Der Operator == kann für diese Prüfung nicht verwendet werden (previousValue == double.NaN), da jeder Vergleich von NaN mit einem anderen Wert, einschließlich sich selbst, immer zu false ausgewertet wird.
Wenn Sie mit dem Indikator-Code zufrieden sind, erstellen Sie ihn und verwenden Sie ihn dann, indem Sie eine Instanz zu einem Chart hinzufügen.
Verwandte Artikel
