Zum Inhalt

Programmatische Verwaltung von technischen Indikatoren

Händler verlassen sich oft auf eine Kombination aus manuellem Handel und automatisierten Handelsassistenten, insbesondere benutzerdefinierte Indikatoren. In vielen Fällen sind diese Assistenten jedoch völlig unabhängig voneinander und können nicht auf die Aktionen und Ausgaben des jeweils anderen reagieren.

Glücklicherweise bietet cTrader eine praktische Möglichkeit, Chart-Indikatoren programmatisch zu verwalten. Mit dieser Funktion können Sie dynamische Assistenten erstellen, die Daten von Indikatoren lesen, die Benutzer einem Chart hinzufügen.

Sie können es auch so einrichten, dass ein Algorithmus Indikatoreinstellungen basierend auf bestimmten Bedingungen hinzufügt, entfernt oder ändert, sodass Sie Ihren Benutzern mehr Mehrwert bieten und neue Wege zur Monetarisierung eröffnen können.

Dieser API-Leitfaden erklärt, wie Sie Chart-Indikatoren unter verschiedenen Bedingungen programmatisch verwalten können.

Chart-Indikatorverwaltung in einer Minute!

  • Durch die programmatische Verwaltung von Chart-Indikatoren können Sie Indikatoreinstellungen (z. B. Linienstärke) abhängig von bestimmten Bedingungen anpassen.
  • cBots können auf alle Indikatoren zugreifen, die Sie manuell an einen Chart anhängen, deren Daten lesen und entsprechend handeln.
  • Ihre Algorithmen können Indikatoren automatisch zu Charts hinzufügen oder von diesen entfernen, wodurch Sie Zeit sparen.
  • Die programmatische Verwaltung von Chart-Indikatoren ist für alle benutzerdefinierten Indikatoren möglich.

Indikatoren programmatisch hinzufügen und entfernen

Sie können jeden Indikator, auf den Sie Zugriff haben, einfach hinzufügen, indem Sie die folgende Methode aufrufen.

1
ChartIndicator ChartIndicators.Add(string name, params object[] parameterValues)

Die Methode nimmt den Indikatornamen als ersten Parameter und dann alle Parameter dieses Indikators in der Reihenfolge (z. B. "Simple Moving Average", "High", 25).

Hinweis

Die Methode akzeptiert den Namen jedes Indikators, auf den Sie Zugriff haben.

Hinweis

Alle DataSeries-Parameter müssen als Zeichenfolgen in den Methodenargumenten angegeben werden.

Hinweis

Wenn einige Parameter nicht angegeben sind, verwendet die Methode Standardwerte. Wenn einige Parameter ungültig sind, ruft die Methode den OnException-Handler für Ihren Algorithmus auf.

Nachdem die Methode ausgeführt wurde, wird der angeforderte Indikator sofort zu einem Chart hinzugefügt, und Sie können ihn mithilfe des von der Methode zurückgegebenen Werts verwalten. Sie können ihn beispielsweise entfernen, indem Sie die Methode ChartIndicators.Remove() aufrufen.

1
2
3
var newIndicator = ChartIndicators.Add("Simple Moving Average", "High", 25);
...
ChartIndicators.Remove(newIndicator);

Hier ist ein einfacher cBot, der beide Methoden verwendet, um einen benutzerdefinierten Bollinger-Bands-Indikator zu einem Chart hinzuzufügen, wenn der Average True Range (ATR)-Wert einen bestimmten Schwellenwert überschreitet. Wenn der ATR-Wert unter den Schwellenwert fällt, wird der Indikator entfernt.

 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
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class ChartIndicatorsTest : Robot
    {

        private AverageTrueRange _aTR;
        private ChartIndicator _customBollingerBands;

        protected override void OnStart()
        {
            _aTR = Indicators.AverageTrueRange(14, MovingAverageType.Exponential);
            ChartIndicators.Add("Average True Range");
        }

        protected override void OnBar()
        {
            if (_aTR.Result[Bars.Count - 1] >= 0.0002) 
            {
                _bollingerBands = ChartIndicators.Add("Custom BB");
            } else if (_bollingerBands != null)
            {
                ChartIndicators.Remove(_bollingerBands);
            }
        }

    }
}

Einstellungen von Indikatoren ändern

Die Schnittstelle ChartIndicator bietet direkten Zugriff auf alle wichtigen Indikatoreinstellungen über die folgenden Eigenschaften:

  • ChartIndicator.Type, das den Typ eines Indikators abruft.
  • ChartIndicator.Parameters, das eine Liste aller Indikatorparameter abruft.
  • Lines, das eine Liste aller von einem Indikator ausgegebenen Linien abruft.

Da Indikatoren visuelle Hilfsmittel sind, können Sie sie verbessern, indem Sie ihre Einstellungen abhängig von Marktbedingungen ändern. Der folgende Indikator versucht genau das zu tun.

 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
37
38
39
40
41
42
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Indicator(AccessRights = AccessRights.None, IsOverlay = true)]
    public class ColourMovingAverage : Indicator
    {

        private MovingAverage _fastMA;
        private ChartIndicator _chartMA;
        private const int __lineThickness = 4;


        protected override void Initialize()
        {
            _fastMA = Indicators.MovingAverage(Bars.OpenPrices, 10, MovingAverageType.Exponential);
            _chartMA = ChartIndicators.Add("Exponential Moving Average", "Open", 10);
        }

        public override void Calculate(int index)
        {
            var line = _chartMA.Lines[0];

            if (Symbol.Bid > _fastMA.Result[index]) 
            {
                line.Color = Color.Green;
                line.Thickness = __lineThickness;
            } else 
            {
                line.Color = Color.Red;
                line.Thickness = __lineThickness;
            }
        }
    }
}

Abhängig davon, ob der aktuelle Kurs eines Symbols über oder unter dem Exponential Moving Average liegt, ändert die Indikatorlinie Farbe und Stärke. In einigen Fällen (z. B. bei schneller Reaktion auf sich ändernde Trends) kann zusätzliche visuelle Hilfe den entscheidenden Unterschied ausmachen.

Zusätzliche Ereignisse behandeln

Die Schnittstelle ChartsIndicators stellt auch mehrere Ereignisse bereit, die Sie behandeln können, um Chart-Indikatoren programmatisch zu verwalten:

  • IndicatorAdded, das jedes Mal ausgelöst wird, wenn ein neuer Indikator zu einem Chart hinzugefügt wird.
  • IndicatorRemoved, das jedes Mal ausgelöst wird, wenn ein Indikator aus einem Chart entfernt wird.
  • IndicatorModified, das jedes Mal ausgelöst wird, wenn die Einstellungen eines Indikators angepasst werden.

Diese Ereignisse sind wertvoll für Entwickler von Plugins. Über Plugins können Sie neue Elemente der cTrader-Benutzeroberfläche erstellen, die ihren Inhalt ändern, je nachdem, ob ein Benutzer Indikatoren hinzufügt, entfernt oder ändert.

Indikatorverwaltung in verschiedenen Modi

So funktioniert die Indikatorverwaltung in verschiedenen cTrader-Modi und -Tools.

Modus/Tool Wie es funktioniert
Nicht-visuelles Backtesting Alle über ChartIndicators hinzugefügten Indikatoren werden auf dem Chart angezeigt, wenn das Backtesting abgeschlossen ist.
Visuelles Backtesting und Market Replay Alles funktioniert in Echtzeit wie vorgesehen.
Optimierung Alle Vorgänge funktionieren, aber es werden keine Änderungen am Chart vorgenommen, wenn das Backtesting abgeschlossen ist.
cTrader CLI Alle Vorgänge funktionieren wie vorgesehen, aber es werden keine Änderungen an Charts vorgenommen.

Die programmgesteuerte Verwaltung von Chart-Indikatoren ist ideal für jeden Entwickler, der Algos anbieten möchte, die die Arbeit mit Indikatoren verbessern oder vereinfachen. Durch die Nutzung dieser Funktion können Sie Ihren Benutzern hochwertige und wertvolle Produkte liefern.

Image title