Рабочие инструменты
Описание
Метод GetWorkingSecurities() в базовом классе Strategy используется для получения списка инструментов и типов данных, которые стратегия использует в своей работе. Этот метод играет важную роль при работе с Дизайнером.
Назначение
Основная цель метода - предоставить Дизайнеру информацию о том, какие инструменты и типы данных необходимы стратегии для работы. Это позволяет Дизайнеру:
- Проверить наличие необходимых исторических данных в хранилище перед запуском тестирования
- Автоматически подгрузить нужные данные при их наличии
- Корректно настроить подписки при запуске стратегии
Реализация
В базовом классе Strategy метод возвращает пустую коллекцию. Для корректной работы с Дизайнером рекомендуется переопределить его в вашей стратегии:
public override IEnumerable<(Security sec, DataType dt)> GetWorkingSecurities()
{
// Возвращаем список пар (инструмент, тип данных), которые использует стратегия
return new[]
{
(Security, CandleType),
// Другие пары инструмент-тип данных, если стратегия использует несколько
};
}
Важность переопределения метода
Если метод GetWorkingSecurities() не переопределен в вашей стратегии:
- Дизайнер не сможет автоматически проверить наличие необходимых данных
- При отсутствии нужных исторических данных в хранилище Дизайнер не выдаст предупреждений
- Стратегия может быть запущена на тестирование, но никаких результатов не будет показано
- Пользователь не получит никакой информации о причине отсутствия результатов
Пример использования
public class MySmaStrategy : Strategy
{
private readonly StrategyParam<DataType> _candleType;
public DataType CandleType
{
get => _candleType.Value;
set => _candleType.Value = value;
}
public MySmaStrategy()
{
_candleType = Param(nameof(CandleType), TimeSpan.FromMinutes(1).TimeFrame());
}
// Переопределяем метод для корректной работы с Дизайнером
public override IEnumerable<(Security sec, DataType dt)> GetWorkingSecurities()
{
return new[] { (Security, CandleType) };
}
// Остальной код стратегии...
}
Заключение
Хотя метод GetWorkingSecurities() не является обязательным для реализации базовой функциональности стратегии, его переопределение настоятельно рекомендуется для корректной работы с Дизайнером StockSharp. Это позволяет избежать ситуаций, когда стратегия запускается на тестирование, но не показывает никаких результатов из-за отсутствия необходимых исторических данных.