Saltar a contenido

Tipos clave de cBots

Los cBots son herramientas versátiles que, dependiendo de su código y lógica, pueden cumplir varios roles y funciones, desde operaciones totalmente automatizadas hasta proporcionar soporte para la implementación de estrategias de operaciones manuales. En este artículo y su video correspondiente, definiremos los tipos clave de cBots, describiremos sus principales diferencias y enumeraremos algunas mejores prácticas para crear y utilizar cBots de varios tipos.

En términos generales, hay cuatro tipos clave de cBots.

Nota

Las categorías a continuación difieren puramente en base a los comportamientos de los cBots. No se especifican categorías dentro del código real del cBot. Además, algunos desarrolladores también pueden crear clasificaciones personalizadas de cBots.

  • Estrategias de operaciones automatizadas - como lo implica el nombre, los cBots de este tipo ejecutan estrategias de operaciones de forma autónoma. Por ejemplo, un cBot de Tres cuervos negros y tres soldados blancos coloca una nueva orden de compra después de encontrar tres velas verdes consecutivas, y una nueva orden de venta cuando se enfrenta a tres velas rojas consecutivas.
  • Scripts - los cBots que pertenecen a este tipo realizan una acción al inicio y se detienen después de que la ejecución se completa. Por ejemplo, un cBot de script puede establecer un stop loss para todas las posiciones actualmente abiertas, independientemente de su dirección, volumen o instrumento.
  • Asistentes de operaciones - están diseñados para realizar algún tipo de acción útil que complementa una estrategia de operaciones manual o automática. Por ejemplo, un cBot de este tipo puede gestionar sus stop loss móviles utilizando reglas personalizadas que son diferentes de la funcionalidad de stop loss móvil incorporada que ofrece cTrader.
  • Paneles de operaciones - los cBots de este tipo no operan de forma autónoma; en su lugar, crean controles personalizados que pueden utilizarse para diversos propósitos. Por ejemplo, un cBot puede lanzar una WebView de un agregador de noticias de Forex mientras integra botones personalizados de compra y venta, así como un selector de símbolos dentro de la WebView, permitiendo al usuario operar sin salir del sitio de noticias.

En las subsecciones siguientes, discutimos cada uno de los tipos anteriores en detalle, describimos sus beneficios y limitaciones, y sugerimos varios casos de uso.

Estrategias de operaciones algorítmicas

Los cBots que pertenecen al tipo de estrategia de operaciones automatizada son complejos pero poderosos. Tienen que implementar correctamente una estrategia de operaciones incluyendo todos sus aspectos, como la gestión de riesgos, el dimensionamiento de posiciones y el análisis técnico.

Puede crear una estrategia de operaciones automatizada simple en menos de dos minutos simplemente reemplazando la plantilla predeterminada del nuevo cBot con el código a continuación.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicTrendBot : Robot
    {
        protected override void OnBar()
        {
            if (Bars.ClosePrices.Last(1) > Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000, "FollowTrend");
            }
            else if (Bars.ClosePrices.Last(1) < Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Sell, SymbolName, 1000, "FollowTrend");
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicTrendBot():
    def on_bar(self):
        if api.Bars.ClosePrices.Last(1) > api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 1000, "FollowTrend")
        elif api.Bars.ClosePrices.Last(1) < api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, 1000, "FollowTrend")

El cBot abre una nueva posición en cada barra. Se abre una posición larga si el precio aumentó en la barra anterior en comparación con la barra anterior a ella. Por el contrario, se abre una posición corta si el precio ha bajado.

Backtesting y optimización

Las estrategias de operaciones automatizadas típicamente incluyen muchas partes móviles y parámetros. Como resultado, estos cBots a menudo necesitan ser ampliamente probados y optimizados antes de ser lanzados en cuentas en vivo. Afortunadamente, cTrader proporciona herramientas incorporadas que pueden manejar el backtesting y la optimización por usted.

Herramienta de línea de comandos de cTrader (CLI)

Las estrategias de operaciones automatizadas típicamente necesitan ejecutarse durante largos períodos de tiempo para que puedan reaccionar a varias señales de análisis técnico. Para ahorrar en consumo de RAM y CPU en estos casos, puede lanzar cBots a través de cTrader CLI sin abrir nunca cTrader Windows (tenga en cuenta que es posible lanzar cualquier cBot a través de cTrader CLI, no solo cBots de este tipo).

Scripts

Los scripts son típicamente necesarios para realizar algún tipo de acción que sería difícil o llevaría mucho tiempo hacer manualmente. Estas acciones se toman típicamente al inicio del cBot para que pueda lanzar un script, observar los resultados de su funcionamiento y luego detener su instancia al tener éxito para ahorrar en consumo de RAM y CPU.

Por ejemplo, un script puede cerrar todas las posiciones cuyo beneficio bruto exceda 50 unidades de la moneda de depósito de la cuenta del operador. En efecto, el script actuaría como un take profit universal para todas las posiciones abiertas que puede activar en cualquier momento. Así es como se vería el código para este script.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using cAlgo.API;
using cAlgo.API.Collections;

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

        protected override void OnStart()
        {
            foreach (var position in Positions) 
            {
                if (position.GrossProfit > 50) 
                {
                    ClosePosition(position);
                }
            }
            Stop();
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicScriptBot():
    def on_start(self):
        for position in api.Positions:
            if position.GrossProfit > 50:
                api.ClosePosition(position)
        api.Stop()

Después de lanzar el cBot, deberíamos ver varias posiciones rentables cerrándose gradualmente.

Detención de scripts

Como los scripts solo necesitan ejecutar una acción específica una vez, puede instruir a cTrader para que cierre inmediatamente un script después de que la ejecución se complete con éxito. Como se muestra en el ejemplo anterior, puede hacerlo llamando al método Stop().

Asistentes de operaciones

El propósito de los asistentes de operaciones es realizar regularmente acciones útiles. Aunque esto los hace similares a los scripts, los scripts solo realizan una acción al inicio de la instancia. En contraste, los asistentes de operaciones están diseñados para reaccionar continuamente a las condiciones del mercado u otros factores, y ejecutar operaciones en respuesta a ciertos patrones.

Por ejemplo, considere un cBot que automáticamente cubre sus posiciones tan pronto como las abre. El código para este cBot podría verse así.

 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
using System;
using cAlgo.API;
using cAlgo.API.Collections;

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

    {
        private bool hasHedgedPosition = false;

        protected override void OnStart()
        {
            Positions.Opened += Positions_Opened;
        }

        private void Positions_Opened(PositionOpenedEventArgs args) 
        {
            if (!hasHedgedPosition) 
            {
                hasHedgedPosition = true;
                var position = args.Position;
                var oppositeTradeType = position.TradeType == TradeType.Buy ? TradeType.Sell : TradeType.Buy;
                ExecuteMarketOrder(oppositeTradeType, SymbolName, position.VolumeInUnits / 2);
            }
            else 
            {
                hasHedgedPosition = false;            
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicAssistantBot():
    def on_start(self):
        self.hasHedgedPosition = False
        api.Positions.Opened += self.positions_opened

    def positions_opened(self, args):
        if not self.hasHedgedPosition:
            self.hasHedgedPosition = True
            position = args.Position
            opposite = TradeType.Sell if position.TradeType == TradeType.Buy else TradeType.Buy
            api.ExecuteMarketOrder(opposite, api.SymbolName, position.VolumeInUnits / 2)
        else:
            self.hasHedgedPosition = False

Al abrir una posición, el cBot intenta inmediatamente abrir otra en la dirección opuesta; el volumen de esta nueva posición es exactamente la mitad del volumen de la posición original.

Tenga en cuenta que estamos usando el campo hasHedgedPosition para evitar un bucle infinito, de modo que el cBot solo cubra una nueva posición una vez.

Funciones de devolución de llamada

Los asistentes de operaciones a menudo utilizan funciones de devolución de llamada que actúan como manejadores para varios eventos. Para saber qué eventos puede manejar para una determinada clase, abra la documentación de API incorporada, busque la clase requerida y navegue a la sección Events en la tabla de contenidos.

Paneles de operaciones

Los paneles de operaciones muestran controles personalizados que desencadenan varias acciones cuando se interactúa con ellos. Típicamente proporcionan mejoras de calidad de vida a la interfaz de usuario predeterminada de cTrader. Por ejemplo, un cBot puede mostrar un botón Comprar que, al hacer clic, ejecuta una orden de mercado para un volumen predefinido en cTrader.

Para crear tal cBot, simplemente use el código a continuación.

 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;

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

        Button buttonBuyOrder;

        protected override void OnStart()
        {

            buttonBuyOrder = new Button
            {
                Text = "Buy",
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
            };

            buttonBuyOrder.Click += ButtonBuyOrder_Click;

            Chart.AddControl(buttonBuyOrder);
        }

        private void ButtonBuyOrder_Click(ButtonClickEventArgs args) 
        {
            ExecuteMarketOrder(TradeType.Buy, SymbolName, 10000);
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicPanelBot():
    def on_start(self):
        self.buttonBuyOrder = Button()
        self.buttonBuyOrder.Text = "Buy"
        self.buttonBuyOrder.HorizontalAlignment = HorizontalAlignment.Center
        self.buttonBuyOrder.VerticalAlignment = VerticalAlignment.Center
        self.buttonBuyOrder.Click += self.button_buy_order_click
        api.Chart.AddControl(self.buttonBuyOrder)

    def button_buy_order_click(self, args):
        api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 10000)

Al hacer clic en el botón Comprar, se coloca una nueva orden de mercado por 10,000 unidades. La ubicación conveniente del botón permite reaccionar rápidamente a nuevas oportunidades de mercado.

Combinación de paneles de operaciones con otros tipos de cBots

Los paneles de operaciones proporcionan controles de interfaz de usuario personalizados que le permiten realizar varias operaciones. Puede usarlos junto con otros tipos de cBots. Por ejemplo, un panel de operaciones podría incluir un botón personalizado Cubrir que, al hacer clic, cubre todas las posiciones actualmente abiertas, similar al ejemplo del asistente de operaciones anterior.

Resumen

Las cuatro categorías de cBots tienen usos válidos y se pueden combinar según sus preferencias. Por ejemplo, puede lanzar simultáneamente una estrategia de operaciones automatizada y un asistente de operaciones para lograr los mejores resultados posibles. Puede experimentar con cBots de varios tipos para asegurarse de que su enfoque preferido para operar se ejecute completamente y sin fallas.

Image title