Sistema de Alertas

Visão Geral

As estratégias no StockSharp têm um sistema de alertas integrado que permite enviar notificações de vários tipos: janelas popup, sinais sonoros, entradas de log e mensagens Telegram. Os alertas são úteis para informar o trader sobre eventos importantes -- entradas em posição, quebras de níveis, erros e outros sinais de negociação.

Durante o backtesting, alertas que não sejam do tipo Log são ignorados automaticamente para evitar interferência durante os testes.

Tipos de Alerta

A enumeração AlertNotifications define os tipos disponíveis:

Tipo Descrição
Sound Sinal sonoro
Popup Janela popup
Log Entrada em ficheiro de log
Telegram Mensagem Telegram

Métodos

Alert

Método base para enviar um alerta com tipo, legenda e mensagem especificados:

// Com título e mensagem
Alert(AlertNotifications type, string caption, string message);

// Com legenda automática (usa o nome da estratégia)
Alert(AlertNotifications type, string message);

AlertPopup

Envia uma notificação popup. A legenda é o nome da estratégia:

AlertPopup(string message);

AlertSound

Envia uma notificação sonora:

AlertSound(string message);

AlertLog

Envia uma notificação para o log. Este tipo também funciona durante o backtesting:

AlertLog(string message);

Configurar o Serviço de Alertas

Para que os alertas funcionem, o serviço IAlertNotificationService tem de estar registado no ambiente da estratégia. Isto é feito através do método de extensão:

strategy.SetAlertService(alertService);

O serviço atual pode ser obtido através de:

var service = strategy.GetAlertService();

Em aplicações gráficas (Designer, terminal), o serviço é normalmente registado automaticamente.

Exemplo de Utilização

public class AlertStrategy : Strategy
{
    private readonly StrategyParam<DataType> _candleType;
    private readonly StrategyParam<decimal> _priceLevel;

    public DataType CandleType
    {
        get => _candleType.Value;
        set => _candleType.Value = value;
    }

    public decimal PriceLevel
    {
        get => _priceLevel.Value;
        set => _priceLevel.Value = value;
    }

    public AlertStrategy()
    {
        _candleType = Param(nameof(CandleType), TimeSpan.FromMinutes(5).TimeFrame());
        _priceLevel = Param(nameof(PriceLevel), 100m);
    }

    protected override void OnStarted2(DateTime time)
    {
        base.OnStarted2(time);

        var subscription = SubscribeCandles(CandleType);

        subscription
            .Bind(ProcessCandle)
            .Start();

        // Alerta sobre início da estratégia
        AlertLog("Strategy started, tracked level: " + PriceLevel);
    }

    private void ProcessCandle(ICandleMessage candle)
    {
        if (!IsFormedAndOnlineAndAllowTrading())
            return;

        // O preço cruzou o nível de baixo para cima
        if (candle.OpenPrice < PriceLevel && candle.ClosePrice >= PriceLevel)
        {
            AlertPopup("O preço cruzou o nível " + PriceLevel + " upward!");
            AlertSound("Level breakout!");
            BuyMarket();
        }

        // O preço cruzou o nível de cima para baixo
        if (candle.OpenPrice > PriceLevel && candle.ClosePrice <= PriceLevel)
        {
            Alert(AlertNotifications.Telegram, "Trading signal",
                "O preço rompeu o nível " + PriceLevel + " downward");
            SellMarket();
        }
    }
}

Neste exemplo, a estratégia usa diferentes tipos de alerta para diferentes situações: AlertPopup e AlertSound para captar imediatamente a atenção do trader, e Alert com o tipo Telegram para notificação remota.