Saltar a contenido

Cómo usar indicadores en cBots

En este artículo y su video correspondiente, demostraremos cómo puede hacer referencia y usar indicadores personalizados en sus cBots. Para hacerlo, desarrollaremos un algoritmo de operaciones que utiliza la salida de un indicador personalizado de muestra para realizar operaciones de trading.

Crear un nuevo cBot

Para ver todos los indicadores personalizados actualmente instalados en su máquina, cambie a la aplicación Algo y vaya a la pestaña Indicadores.

Si ve uno o más indicadores personalizados aquí, significa que puede usarlos libremente en cualquiera de sus otros algoritmos. Para este tutorial, usaremos el indicador Sample SMA y desarrollaremos un cBot que opere basándose en la dirección de la media móvil simple.

Primero, crearemos un nuevo cBot y lo renombraremos a algo informativo como "Robot SMA". Nuestro cBot entrará en una operación de compra cuando el SMA se vuelva alcista y entrará en una operación de venta cuando el SMA se vuelva bajista. Nuestro cBot no cubrirá sus posiciones, lo que significa que las posiciones opuestas se cerrarán en cada nueva señal.

Inicializar un indicador

Cuando se trata de indicadores personalizados, nuestro primer paso es agregar una referencia al indicador personalizado. Para hacer referencia a un indicador personalizado, necesitamos ejecutar los siguientes pasos:

  1. Haga clic en el botón Gestionar referencias.
  2. Encuentre el indicador al que queremos hacer referencia en la ventana recién abierta.
  3. Marque la casilla junto al indicador al que queremos hacer referencia.
  4. Haga clic en Aplicar.

Después de que se haya hecho referencia al indicador, podemos crear una variable de instancia de su tipo.

1
SampleSMA _sma;

Nota

El tipo de indicador debe ser el mismo que el nombre de la clase del indicador. Esto puede ser diferente del nombre de archivo del indicador.

El siguiente paso es inicializar el indicador en nuestro método OnStart(). Sin embargo, antes de hacer eso, agregaremos un parámetro al cBot que nos permitirá configurar los períodos utilizados por el indicador SMA personalizado.

1
2
[Parameter(DefaultValue = 14)]
public int Periods { get; set; }

Podemos usar el método Indicators.GetIndicator<>() para inicializar cualquier indicador personalizado al que estemos haciendo referencia. Necesitamos definir el tipo de indicador y pasar los parámetros del indicador separados por comas.

Nota

Los parámetros deben pasarse en el orden declarado en la clase del indicador.

En nuestro caso, el tipo es SampleSMA y pasaremos los valores de origen de este indicador, que en este caso son los precios de cierre de las barras y el parámetro Period.

1
_sma = Indicators.GetIndicator<SampleSMA>(Bars.ClosePrices, Periods);

Implementar lógica de operaciones

Con nuestro indicador inicializado, podemos implementar nuestra lógica de operaciones. Nuestro indicador SMA personalizado guarda los valores de la media móvil en la colección Results. La colección Results presenta dos métodos útiles, IsRising() y IsFalling(). Estos métodos nos permiten averiguar si los resultados del indicador están subiendo o bajando.

Usaremos estos métodos para implementar nuestras condiciones de operación.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBarClosed()
{
    if(_sma.Result.IsRising())
    {        

    }
    else if(_sma.Result.IsFalling())
    {

    }
}

Ahora llenaremos nuestras declaraciones if. Cuando la media móvil esté subiendo, cerraremos todas las posiciones de venta y abriremos una posición de compra. En cambio, cuando la media móvil esté bajando, cerraremos todas las posiciones de compra y abriremos una posición de venta.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnBarClosed()
{
    if(_sma.Result.IsRising())
    {
        Close(TradeType.Sell);
        Open(TradeType.Buy);
    }
    else if(_sma.Result.IsFalling())
    {
        Close(TradeType.Buy);
        Open(TradeType.Sell);            
    }
}

En nuestro código, hemos usado dos nuevos métodos que la API no proporciona por defecto. El método Open() abre nuevas posiciones basadas en la dirección y cantidad definidas. El método Close() cierra todas las posiciones de la dirección definida.

Así es como se define el método Open().

1
2
3
4
5
private void Open(TradeType tradeType)
{
    if(Positions.Count == 0)
        ExecuteMarketOrder(tradeType, SymbolName, Volume, InstanceId);
}

Para ejecutar una orden dentro del método Open() también necesitamos agregar el parámetro Volume.

1
2
[Parameter(DefaultValue = 10000)]
public int Volume { get; set; }

Todo lo que queda es definir el método Close().

1
2
3
4
5
private void Close(TradeType tradeType)
{
    foreach (var position in Positions.Where(p => p.TradeType == tradeType))
        position.Close();
}

Realizar backtesting

Como siempre, antes de dejar que el cBot opere en nuestro nombre, lo probaremos a fondo. Para hacer lo mismo, agregue una instancia y luego cambie a la pestaña Backtesting.

Para probar aún más nuestro cBot, agregamos el indicador personalizado al que hicimos referencia al gráfico donde se adjunta una instancia y verificamos si los puntos de entrada de posición coinciden con las salidas del indicador.

Para aprender más sobre el uso y desarrollo de cBots, siéntase libre de navegar por otras secciones de la documentación y suscríbase a nuestro canal de YouTube para ser notificado cuando publiquemos un nuevo video.

En este artículo y su video adjunto, mostraremos cómo puede hacer referencia y usar indicadores personalizados en sus cBots. Para hacerlo, desarrollaremos un algoritmo de operaciones que utiliza la salida de un indicador personalizado preestablecido para realizar operaciones de trading.

Crear un nuevo cBot

Para ver todos los indicadores personalizados actualmente instalados en su máquina, cambie a la aplicación Algo y vaya a 'Indicadores'