Система оповещений
Обзор
Стратегии в StockSharp имеют встроенную систему оповещений, позволяющую отправлять уведомления различных типов: всплывающие окна, звуковые сигналы, записи в лог и сообщения в Telegram. Оповещения полезны для информирования трейдера о важных событиях -- входах в позицию, достижении уровней, ошибках и прочих торговых сигналах.
При бэктестинге оповещения, кроме типа Log, автоматически пропускаются, чтобы не создавать помех при тестировании.
Типы оповещений
Перечисление AlertNotifications определяет доступные типы:
| Тип | Описание |
|---|---|
Sound |
Звуковой сигнал |
Popup |
Всплывающее окно |
Log |
Запись в лог-файл |
Telegram |
Сообщение в Telegram |
Методы
Alert
Базовый метод отправки оповещения с указанием типа, заголовка и текста:
// С заголовком и текстом
Alert(AlertNotifications type, string caption, string message);
// С автоматическим заголовком (используется имя стратегии)
Alert(AlertNotifications type, string message);
AlertPopup
Отправляет всплывающее уведомление. Заголовком является имя стратегии:
AlertPopup(string message);
AlertSound
Отправляет звуковое уведомление:
AlertSound(string message);
AlertLog
Отправляет уведомление в лог. Этот тип работает и при бэктестинге:
AlertLog(string message);
Настройка сервиса оповещений
Для работы оповещений необходимо, чтобы в окружении стратегии был зарегистрирован сервис IAlertNotificationService. Это выполняется через метод расширения:
strategy.SetAlertService(alertService);
Получить текущий сервис можно через:
var service = strategy.GetAlertService();
В графических приложениях (Designer, терминал) сервис обычно регистрируется автоматически.
Пример использования
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();
// Оповещение о запуске стратегии
AlertLog("Стратегия запущена, отслеживаемый уровень: " + PriceLevel);
}
private void ProcessCandle(ICandleMessage candle)
{
if (!IsFormedAndOnlineAndAllowTrading())
return;
// Цена пересекла уровень снизу вверх
if (candle.OpenPrice < PriceLevel && candle.ClosePrice >= PriceLevel)
{
AlertPopup("Цена пересекла уровень " + PriceLevel + " вверх!");
AlertSound("Пробой уровня!");
BuyMarket();
}
// Цена пересекла уровень сверху вниз
if (candle.OpenPrice > PriceLevel && candle.ClosePrice <= PriceLevel)
{
Alert(AlertNotifications.Telegram, "Торговый сигнал",
"Цена пробила уровень " + PriceLevel + " вниз");
SellMarket();
}
}
}
В этом примере стратегия использует разные типы оповещений для разных ситуаций: AlertPopup и AlertSound для немедленного привлечения внимания трейдера, а Alert с типом Telegram для удаленного уведомления.