Рабочие инструменты

Описание

Метод GetWorkingSecurities() в базовом классе Strategy используется для получения списка инструментов и типов данных, которые стратегия использует в своей работе. Этот метод играет важную роль при работе с Дизайнером.

Назначение

Основная цель метода - предоставить Дизайнеру информацию о том, какие инструменты и типы данных необходимы стратегии для работы. Это позволяет Дизайнеру:

  1. Проверить наличие необходимых исторических данных в хранилище перед запуском тестирования
  2. Автоматически подгрузить нужные данные при их наличии
  3. Корректно настроить подписки при запуске стратегии

Реализация

В базовом классе 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. Это позволяет избежать ситуаций, когда стратегия запускается на тестирование, но не показывает никаких результатов из-за отсутствия необходимых исторических данных.