Ir para o conteúdo

Funcionalidade de suspensão

A capacidade de ficar em espera até um momento específico é essencial para os cBots, especialmente para aqueles que devem ser programados ou ativados após a ocorrência de algum evento (por exemplo, um anúncio público). O método Sleep() no cTrader permite suspender algoritmos até que o tempo especificado decorra ou se aproxime.

Nota

A funcionalidade de suspensão está disponível apenas para cBots e indicadores.

Este guia da API irá apresentar-lhe o método Sleep() e como utilizá-lo corretamente.

Método Sleep() em um minuto!

  • O método Sleep() permite aos desenvolvedores suspender a execução de um algoritmo com parâmetros de tempo flexíveis estabelecidos.
  • Se souber a data e hora de um evento específico ao qual o seu cBot deve reagir com uma estratégia personalizada, use a funcionalidade de suspensão para negociar notícias e reagir a eventos programados.
  • Defina um período para decorrer para a funcionalidade de suspensão, desde milissegundos até qualquer intervalo de tempo.
  • O método Sleep() está disponível apenas para algoritmos .NET 6 e funciona conforme pretendido em backtesting.

Como funciona o método sleep()

A funcionalidade de suspensão está disponível apenas para algoritmos .NET 6. Enquanto um cBot permanece em modo de suspensão, todos os outros eventos no código serão ignorados.

Exemplo

Se o evento BarOpened ocorreu cinco vezes durante o modo de suspensão, nenhum dos manipuladores OnBar() perdidos será invocado depois que o cBot acordar. Apenas novos eventos futuros serão levantados neste caso.

Ainda assim, os cBots processam todas as mensagens de dados enquanto permanecem em modo de suspensão (por exemplo, se RefreshData() for chamado).

Nota

Ao especificar o tempo de suspensão, você define um intervalo mínimo de suspensão do algoritmo. O tempo real de suspensão será sempre igual ou superior ao tempo de suspensão solicitado.

Para aplicar o método Sleep(), os desenvolvedores de algoritmos devem usar uma destas assinaturas, dependendo do seu propósito.

Para suspender o algoritmo até que o intervalo de tempo especificado decorra:

void Sleep(Timespan timespan)

Para suspender o algoritmo até que o número especificado de milissegundos decorra:

void Sleep(int milliseconds)

Para suspender o algoritmo até que a hora e data especificadas se aproximem:

void Sleep(DateTime dateTime)

Exemplo

Vamos assumir que o próximo discurso do atual Presidente da Reserva Federal Jerome Powell está programado para 11 de dezembro de 2023 às 11:00. Você espera alguns anúncios que afetariam a tendência do EURUSD e desenvolveu um cBot que seguiria uma estratégia relevante logo no início do discurso. Neste caso, você pode aplicar o método Sleep() da seguinte forma.

DateTime doomsday = new DateTime(2023, 12, 11, 11, 0, 0); 
Sleep(doomsday)

Aviso

Se o parâmetro DateTime não for do fuso horário do algoritmo, uma ArgumentException será lançada.

O método Sleep() funciona conforme pretendido em backtesting. Se quiser parar um cBot em suspensão a partir da interface do utilizador, não precisa esperar até que ele acorde. Clique no botão Parar e ele deixará de funcionar sem tempo limite.

Criar um cBot de exemplo

O seguinte cBot de exemplo dorme por 30 segundos após o seu lançamento, com a respetiva mensagem impressa no registo. Depois disso, ele coloca uma ordem de compra ao mercado para USDJPY.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SleepAndExecuteBot : Robot
    {
        protected override void OnStart()
        {
            Print("cBot will sleep for 30 seconds");
            Sleep(30000);

            var symbol = Symbols.GetSymbol("USDJPY");
            ExecuteMarketOrder(TradeType.Buy, symbol, 1000);
        }        
    }
}

Image title

Resumo

A funcionalidade de suspensão permite que os desenvolvedores de algoritmos suspendam a execução de outros métodos mesmo que o cBot tenha sido lançado. Aplicando o método Sleep() com seus parâmetros de tempo flexíveis, você sempre reagirá a eventos programados com sua estratégia personalizada no momento certo.