Saltar a contenido

Cómo crear un cBot mediante ChatGPT

La IA generativa está en auge y crear un cBot sin tener que escribir una sola línea de código ya no es un sueño, es una realidad. En este artículo y su vídeo correspondiente, le mostraremos cómo puede crear un cBot utilizando ChatGPT. También demostraremos cómo puede evaluar el código cBot proporcionado por ChatGPT y asegurarse de que su bot generado por IA esté operativo en solo unos minutos.

Crear el prompt correcto

Para los fines de este vídeo, utilizaremos el modelo GPT-3.5. Es gratuito para todos y, a pesar de carecer de funciones en comparación con los modelos GPT más nuevos, produce excelentes resultados.

La primera parte de crear un gran cBot con ChatGPT es escribir el prompt correcto. Estas son algunas reglas para crear un buen prompt:

1. Anime a ChatGPT a intentar actuar como un desarrollador profesional de cBot.

Puede lograrlo escribiendo un prompt inicial con las palabras "Juguemos a que eres un desarrollador de algoritmos cualificado para cTrader..." o algo como "Finge ser un desarrollador profesional de cBots para cTrader..."

2. Sea específico.

Cuantos más detalles proporcione a ChatGPT, mejor. Los prompts como "Crea un cBot rentable para mí..." darían lugar a mucha confusión por parte de la IA.

Recomendamos especificar cada parte de su cBot con la mayor precisión posible. Considere qué parámetros debe tener, a qué condiciones debe reaccionar y qué operaciones de trading debe realizar. Si está creando un panel de trading personalizado, considere qué elementos de la interfaz de usuario debe tener y dónde deben colocarse.

3. Sea educado y respetuoso.

Esto puede sonar sorprendente, pero las investigaciones han demostrado que ser educado con ChatGPT en realidad mejora la calidad de los resultados. Incluya frases como "Le agradecería si...", "Sería bueno si..." o algo similar.

Crear un cBot de trading por color

Para empezar, solo queremos crear un cBot simple que coloque una nueva orden de mercado en cada apertura de barra. La dirección de la orden depende de si la barra anterior fue verde o roja. Si la barra fue roja, queremos colocar una orden de venta y si fue verde, queremos colocar una orden de compra.

Así es como podemos hacerlo proporcionando los prompts correctos.

  • Frase inicial: "Finge ser un desarrollador profesional de cBots para cTrader, escribe código muy simple y comprensible."
  • Requisitos específicos: "Crea un cBot. En cada barra, debe colocar una nueva orden de mercado sin mecanismos de protección. El volumen de la orden (en unidades) debe ser un parámetro personalizable. Se debe colocar una orden de compra si la barra anterior fue verde. Se debe colocar una orden de venta si la barra anterior fue roja."
  • Cortesía: "Le agradecería mucho si realiza esta tarea, ¡gracias!"

El código exacto que produce ChatGPT puede variar, pero en cualquier caso podemos simplemente copiarlo y pegarlo en la ventana del editor de código para ver si es correcto y si implementa la lógica que deseamos.

Por lo general, solo hay un par de errores no críticos que necesitan corrección. En nuestro caso, lo único que requirió corrección fue cambiar el objeto Symbol en el método ExecuteMarketOrder por la cadena SymbolName. Aquí está el código final que obtuvimos después de hacer todo esto.

 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);
            }
        }
    }
}

Como de costumbre, guardamos y compilamos el bot. En la aplicación Trade, adjuntamos la instancia del bot a un gráfico y vemos si funciona como se pretende. El bot funciona a la perfección y reacciona al color de las barras pasadas colocando nuevas órdenes. El volumen de la orden también es un parámetro personalizable.

Nota

Tenga en cuenta que ni siquiera tuvimos que leer el código generado por ChatGPT. Simplemente corregimos cada advertencia mostrada en el editor de código y luego lanzamos el bot.

Crear un cBot de trading de tendencia

Aunque el cBot anterior funcionaba muy bien, utilizaba una lógica simple y no prestaba atención a las tendencias del mercado. Intentaremos crear algo más complejo utilizando el mismo enfoque para los prompts que antes.

  • Frase inicial: "Imaginemos que eres un desarrollador experto de cBot para cTrader. Yo seré tu cliente."
  • Requisitos específicos: "Crea un cBot. En cada barra, debe comprobar si la media móvil de 50 días está por encima o por debajo de la media móvil de 200 días. Si está por encima, el bot debe colocar una orden de compra. Si está por debajo, el bot debe colocar una orden de venta. El bot no debe colocar una orden si ya existe una posición abierta en la misma dirección. El volumen de la orden debe ser un parámetro personalizable."
  • Cortesía: "¡Gracias por la ayuda!"

Una vez más, simplemente copiaremos y pegaremos el código que nos da ChatGPT en la ventana del editor de código e intentaremos compilar el bot. Aquí están todos los errores de compilación que obtenemos:

  • El código está utilizando el miembro obsoleto de la API MarketSeries. Podemos reemplazarlo con la colección Bars.ClosePrices.
  • Una vez más, tenemos que reemplazar el argumento Symbol con SymbolName.
  • También debemos eliminar algunos argumentos innecesarios de los métodos ExecuteMarketOrder ya que no encajan en ninguna de las sobrecargas de método disponibles.

También podemos echar un vistazo a cómo se realizó nuestra lógica. En el método OnStart(), inicializamos nuestras medias móviles. ChatGPT hizo que los períodos de las medias móviles fueran parámetros personalizables aunque no se lo pedimos. Podemos dejarlo como está sin afectar la lógica central.

Sin embargo, en el método OnBar(), podemos ver que el bot solo coloca nuevas órdenes cuando no hay posiciones abiertas (Positions.Count ==0). Esto no es lo que queremos ya que también queremos comprobar la dirección de la posición. Podemos modificar ligeramente el código para terminar con el siguiente bot.

 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");
            }
        }
    }
}

Hemos utilizado el método Positions.FindAll(string label) para obtener todas las posiciones con una etiqueta dada y calcular su cantidad.

Cuando compilamos el bot, podemos añadirlo a un gráfico. También añadiremos medias móviles de 50 y 200 días para poder evaluar los comportamientos del cBot. Después de esperar un poco, podemos ver que el bot funciona como se esperaba. Se colocan nuevas órdenes cuando es necesario, pero no existe más de una posición abierta en una dirección determinada.

Crear un cBot utilizando otra IA

Resumen

ChatGPT puede ser una herramienta valiosa cuando necesita crear rápidamente un cBot con una lógica definida con precisión. Aunque ChatGPT produce algunos errores, generalmente son insignificantes y se pueden corregir rápidamente.

Image title