Zum Inhalt

Wie man einen cBot über ChatGPT erstellt

Generative KI ist auf dem Vormarsch und die Erstellung eines cBots, ohne eine einzige Codezeile schreiben zu müssen, ist kein Traum mehr, sondern Realität. In diesem Artikel und dem dazugehörigen Video zeigen wir Ihnen, wie Sie einen cBot mit ChatGPT erstellen können. Wir demonstrieren auch, wie Sie den von ChatGPT bereitgestellten cBot-Code bewerten und sicherstellen können, dass Ihr KI-generierter Bot in nur wenigen Minuten betriebsbereit ist.

Erstellen Sie die richtige Eingabeaufforderung

Für die Zwecke dieses Videos werden wir das GPT-3.5-Modell verwenden. Es ist für jeden kostenlos und liefert trotz fehlender Funktionen im Vergleich zu neueren GPT-Modellen großartige Ergebnisse.

Der erste Teil der Erstellung eines großartigen cBots mit ChatGPT besteht darin, die richtige Eingabeaufforderung einzugeben. Hier sind einige Regeln dafür, was eine gute Eingabeaufforderung ausmacht:

1. Ermutigen Sie ChatGPT, die Rolle eines professionellen cBot-Entwicklers zu übernehmen.

Sie können dies erreichen, indem Sie eine anfängliche Eingabeaufforderung mit den Worten „Lass uns ein Spiel spielen, bei dem du ein qualifizierter Algo-Entwickler für cTrader bist..." oder etwas wie „Tu so, als wärst du ein professioneller Entwickler von cBots für cTrader..." eingeben.

2. Seien Sie spezifisch.

Je mehr Details Sie ChatGPT zur Verfügung stellen, desto besser. Eingabeaufforderungen wie „Erstelle einen profitablen cBot für mich..." würden zu viel Verwirrung seitens der KI führen.

Wir empfehlen, jeden Teil Ihres cBots so präzise wie möglich zu spezifizieren. Überlegen Sie, welche Parameter er haben sollte, auf welche Bedingungen er reagieren sollte und welche Handelsoperationen er ausführen sollte. Wenn Sie ein benutzerdefiniertes Handelspanel erstellen, überlegen Sie, welche UI-Elemente es haben sollte und wo sie platziert werden sollten.

3. Seien Sie höflich und respektvoll.

Das mag überraschend klingen, aber Forschungen haben gezeigt, dass Höflichkeit gegenüber ChatGPT tatsächlich die Ausgabequalität verbessert. Fügen Sie Formulierungen wie „Ich würde es schätzen, wenn...", „Es wäre schön, wenn..." oder etwas Ähnliches ein.

Erstellen Sie einen Farb-Handels-cBot

Für den Anfang wollen wir einfach einen einfachen cBot erstellen, der bei jeder Balkeneröffnung eine neue Markt-Order erteilt. Die Richtung der Order hängt davon ab, ob der vorherige Balken grün oder rot war. Wenn der Balken rot war, wollen wir eine Verkaufsorder erteilen, und wenn er grün war, wollen wir eine Kauforder erteilen.

So können wir dies tun, indem wir die richtigen Eingabeaufforderungen bereitstellen.

  • Anfangssatz: „Tu so, als wärst du ein professioneller Entwickler von cBots für cTrader, schreibe sehr einfachen und verständlichen Code."
  • Spezifische Anforderungen: „Erstelle einen cBot. Bei jedem Balken sollte er eine neue Markt-Order ohne Schutzmechanismen erteilen. Das Ordervolumen (in Einheiten) sollte ein anpassbarer Parameter sein. Eine Kauforder sollte erteilt werden, wenn der vorherige Balken grün war. Eine Verkaufsorder sollte erteilt werden, wenn der vorherige Balken rot war."
  • Höflichkeit: „Ich würde es wirklich schätzen, wenn du diese Aufgabe erledigst, vielen Dank!"

Der genaue Code, den ChatGPT ausgibt, kann variieren, aber in jedem Fall können wir ihn einfach kopieren und in das Code-Editor-Fenster einfügen, um zu sehen, ob er korrekt ist und ob er unsere gewünschte Logik implementiert.

Normalerweise gibt es nur ein paar unkritische Fehler, die behoben werden müssen. In unserem Fall musste nur das Symbol-Objekt in der ExecuteMarketOrder-Methode in den SymbolName-String geändert werden. Hier ist der endgültige Code, den wir nach all dem erhalten haben.

 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
using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.API.Requests;
using cAlgo.Indicators;

namespace SimpleColorBasedMarketOrders
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class ColorBasedMarketOrders : Robot
    {
        [Parameter("Order Volume (Units)", DefaultValue = 10000, MinValue = 1000)]
        public int OrderVolume { get; set; }

        protected override void OnBar()
        {
            if (Bars.Count < 2)
                return;

            Color previousBarColor = Bars.Last(1).Close > Bars.Last(1).Open ? Color.Green : Color.Red;
            if (previousBarColor == Color.Green)
            {
                ExecuteMarketOrder(TradeType.Buy, SymbolName, OrderVolume, "Buy Order", null, null, null);
            }
            else if (previousBarColor == Color.Red)
            {
                ExecuteMarketOrder(TradeType.Sell, SymbolName, OrderVolume, "Sell Order", null, null, null);
            }
        }
    }
}

Wie üblich speichern und erstellen wir den Bot. In der Trade-Anwendung fügen wir die Instanz des Bots einem Chart hinzu und sehen, ob er wie beabsichtigt funktioniert. Der Bot funktioniert einwandfrei und reagiert auf die Farbe vergangener Balken, indem er neue Orders erteilt. Das Ordervolumen ist ebenfalls ein anpassbarer Parameter.

Hinweis

Beachten Sie, dass wir nicht einmal den von ChatGPT ausgegebenen Code lesen mussten. Wir haben einfach jede im Code-Editor angezeigte Warnung behoben und dann den Bot gestartet.

Erstellen Sie einen Trend-Handels-cBot

Während der frühere cBot großartig funktionierte, verwendete er eine einfache Logik und achtete nicht auf Markttrends. Wir werden versuchen, etwas Komplexeres zu erstellen, indem wir denselben Ansatz für Eingabeaufforderungen wie zuvor verwenden.

  • Anfangssatz: „Stellen wir uns vor, du bist ein erfahrener cBot-Entwickler für cTrader. Ich werde dein Kunde sein."
  • Spezifische Anforderungen: „Erstelle einen cBot. Bei jedem Balken sollte er überprüfen, ob der gleitende 50-Tage-Durchschnitt über oder unter dem gleitenden 200-Tage-Durchschnitt liegt. Wenn er darüber liegt, sollte der Bot eine Kauforder erteilen. Wenn er darunter liegt, sollte der Bot eine Verkaufsorder erteilen. Der Bot sollte keine Order erteilen, wenn bereits eine offene Position in derselben Richtung existiert. Das Ordervolumen sollte ein anpassbarer Parameter sein."
  • Höflichkeit: „Vielen Dank für die Hilfe!"

Noch einmal werden wir einfach den von ChatGPT gegebenen Code kopieren und in das Code-Editor-Fenster einfügen und versuchen, den Bot zu erstellen. Hier sind alle Build-Fehler, die wir erhalten:

  • Der Code verwendet das veraltete MarketSeries-API-Mitglied. Wir können es durch die Bars.ClosePrices-Sammlung ersetzen.
  • Wir müssen erneut das Symbol-Argument durch SymbolName ersetzen.
  • Wir sollten auch einige unnötige Argumente aus den ExecuteMarketOrder-Methoden löschen, da sie zu keiner der verfügbaren Methodenüberladungen passen.

Wir können uns auch ansehen, wie unsere Logik realisiert wurde. In der OnStart()-Methode initialisieren wir unsere gleitenden Durchschnitte. ChatGPT hat die Perioden der gleitenden Durchschnitte als anpassbare Parameter erstellt, obwohl wir nicht darum gebeten haben. Wir können es so belassen, ohne die Kernlogik zu beeinträchtigen.

In der OnBar()-Methode können wir jedoch sehen, dass der Bot nur neue Orders erteilt, wenn keine offenen Positionen vorhanden sind (Positions.Count ==0). Das ist nicht das, was wir wollen, da wir auch die Positionsrichtung überprüfen möchten. Wir können den Code leicht modifizieren, sodass wir am Ende den folgenden Bot erhalten.

 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
43
44
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;

namespace MovingAverageCrossBot
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class MovingAverageCrossBot : Robot
    {
        [Parameter("MA50 Periods", DefaultValue = 50)]
        public int MA50Periods { get; set; }

        [Parameter("MA200 Periods", DefaultValue = 200)]
        public int MA200Periods { get; set; }

        [Parameter("Volume", DefaultValue = 10000, MinValue = 1000)]
        public int Volume { get; set; }

        private ExponentialMovingAverage MA50;
        private ExponentialMovingAverage MA200;

        protected override void OnStart()
        {
            MA50 = Indicators.ExponentialMovingAverage(Bars.ClosePrices, MA50Periods);
            MA200 = Indicators.ExponentialMovingAverage(Bars.ClosePrices, MA200Periods);
        }

        protected override void OnBar()
        {
            if (MA50.Result.LastValue > MA200.Result.LastValue && Positions.FindAll("Buy Order").Length == 0) 
            {
                // Place a buy order
                ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume, "Buy Order");
            }
            else if (MA50.Result.LastValue < MA200.Result.LastValue && Positions.FindAll("Sell Order").Length == 0)
            {
                // Place a sell order
                ExecuteMarketOrder(TradeType.Sell, SymbolName, Volume, "Sell Order");
            }
        }
    }
}

Wir haben die Positions.FindAll(string label)-Methode verwendet, um alle Positionen mit einem bestimmten Label zu erhalten und ihre Anzahl zu berechnen.

Wenn wir den Bot erstellen, können wir ihn einem Chart hinzufügen. Wir werden auch gleitende 50- und 200-Tage-Durchschnitte hinzufügen, damit wir das cBot-Verhalten bewerten können. Nachdem wir ein wenig gewartet haben, können wir sehen, dass der Bot wie erwartet funktioniert. Neue Orders werden bei Bedarf erteilt, aber es existiert nicht mehr als eine offene Position in einer bestimmten Richtung.

Erstellen Sie einen cBot mit anderer KI

Zusammenfassung

ChatGPT kann ein wertvolles Werkzeug sein, wenn Sie schnell einen cBot mit präzise definierter Logik erstellen müssen. Während ChatGPT einige Fehler produziert, sind diese normalerweise unbedeutend und können schnell behoben werden.

Image title