Alert-System

Überblick

Strategien in StockSharp besitzen ein integriertes Alert-System, mit dem Benachrichtigungen verschiedener Typen gesendet werden können: Popup-Fenster, Tonsignale, Logeinträge und Telegram-Nachrichten. Alerts sind nützlich, um den Trader über wichtige Ereignisse zu informieren - Positionseinstiege, Level-Durchbrüche, Fehler und andere Handelssignale.

Während des Backtestings werden Alerts außer dem Typ Log automatisch übersprungen, damit sie den Testlauf nicht stören.

Alert-Typen

Die Enumeration AlertNotifications definiert die verfügbaren Typen:

Typ Beschreibung
Sound Tonsignal
Popup Popup-Fenster
Log Logdateieintrag
Telegram Telegram-Nachricht

Methoden

Alert

Basismethode zum Senden eines Alerts mit angegebenem Typ, Titel und Nachricht:

// Mit Titel und Nachricht
Alert(AlertNotifications type, string caption, string message);

// Mit automatischem Titel (verwendet den Strategienamen)
Alert(AlertNotifications type, string message);

AlertPopup

Sendet eine Popup-Benachrichtigung. Der Titel ist der Strategiename:

AlertPopup(string message);

AlertSound

Sendet eine Tonbenachrichtigung:

AlertSound(string message);

AlertLog

Sendet eine Benachrichtigung in das Log. Dieser Typ funktioniert auch während des Backtestings:

AlertLog(string message);

Alert-Service konfigurieren

Damit Alerts funktionieren, muss der Service IAlertNotificationService in der Umgebung der Strategie registriert sein. Dies erfolgt über die Erweiterungsmethode:

strategy.SetAlertService(alertService);

Der aktuelle Service kann wie folgt abgerufen werden:

var service = strategy.GetAlertService();

In grafischen Anwendungen (Designer, Terminal) wird der Service normalerweise automatisch registriert.

Verwendungsbeispiel

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

        // Alert über Strategiestart
        AlertLog("Strategy started, tracked level: " + PriceLevel);
    }

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

        // Preis hat das Level von unten nach oben gekreuzt
        if (candle.OpenPrice < PriceLevel && candle.ClosePrice >= PriceLevel)
        {
            AlertPopup("Preis hat Niveau gekreuzt " + PriceLevel + " upward!");
            AlertSound("Level breakout!");
            BuyMarket();
        }

        // Preis hat das Level von oben nach unten gekreuzt
        if (candle.OpenPrice > PriceLevel && candle.ClosePrice <= PriceLevel)
        {
            Alert(AlertNotifications.Telegram, "Trading signal",
                "Preis hat Niveau durchbrochen " + PriceLevel + " downward");
            SellMarket();
        }
    }
}

In diesem Beispiel verwendet die Strategie verschiedene Alert-Typen für unterschiedliche Situationen: AlertPopup und AlertSound, um sofort die Aufmerksamkeit des Traders zu gewinnen, sowie Alert mit dem Typ Telegram für Remote-Benachrichtigungen.