← Назад

StrategyManager.Register

Скажите - а для чего там 3 параметра? ITrader - понятно, а зачем портвель и бумага? ведь стратегия может торговать более чем одгим инструментом и более чем на одном счете. Я понимаю что это перекочевало из контсруктора стратегии, но сама суть вопроса не меняется.

Комментарии (9)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Mikhail Sukhov
Mikhail Sukhov

Правильно. Поэтому и задумка такова, чтобы это было возможно. Нужно запустить стратегию по другом инструменту - создаете объект стратегии и регистрируете под другим инструментом. Если еще и по другому счету - то еще раз создаете и еще раз регистрируете. В итоге StrategyManager крутит несколько стратегий единого класса, но по разным инструментам и портфелям.

dart
dart

А если несколько стратегий, и у них много одинаковых действий - обращение к одной и той же БД, например. Имеет смысл создать головную стратегию, которая читает БД, а потом в зависимости от условий, вызывает ту или иную стратегию, чтобы одно и тоже действие не производилось несколько раз? И ещё, все стратегии работают параллельно. Значит ли это что например две стратегии одновременно могут производить котирование по разным инструментам? Или это как-то по другому происходит.

Mikhail Sukhov
Mikhail Sukhov

Выносите в отдельный блоки, наследуйте стратегии одна от другой. Ограничений по организации кода, по сути, никаких.

Да, будут котировать параллельно.

Tauler
Tauler Автор

так а если стратегия работает с двумя инструментами? тот же арбитраж? или спредер?

Mikhail Sukhov
Mikhail Sukhov

Если пойти по пути развития Strategy, то параметры инструмент и портфель появились больше из-за того, чтобы их не передавать в конструктор. И чтобы была возможность сериализации-дересерилации стратегий в xml.

Но я полностью согласен по поводу парно-инструментальный стратегий. Более того, не только по таким, но и по стратегиям, где собирается корзина инструментов... Думаю, даже банальное использование множества портфелей так же не экзотика (особено в ДУ).

Я помню об этом, но пока не придумал никакого элегантного решения. Пока, как есть - необходимо передавать в метод Register первый инструмент и первый портфель. Если есть соображения, как улучшить дизайн, готов послушать.

Иванов Андрей
Иванов Андрей

Вместо одного объекта передавать массив или IEnumerable =) Другие варианты отсутствуют.

Но мне кажется, что это ускорение энтропии. А лучше делать базовую стратегию для нескольких инструментов и нескольких портфелей, с расширением класса StrategyManager, который будет понимать эту ветку стратегий. Начальная регистрация стратегии через обычный путь -- StrategyManager.Register(Strategy, ITrader, Portfolio, Security). А расширять тремя методами (ну или по-другому как-нибудь) типа StrategyManager.Register(StrategyWide, ITrader), StrategyManager.Register(StrategyWide, Portfolio) и StrategyManager.Register(StrategyWide, Security); Соответственно, начальные параметры стратегии будут доступны через свойства Strategy, остальные параметры через свойства StrategyWide.

Мне пока не требовалось такого, пишу чего придумалось за 3 минуты. Может быть, поможет найти правильный путь.

Tauler
Tauler Автор

Ну в вариант - конструткор для Strategy только ITrader и класс Strategy - асбтрактный? Кому надо - то намутит фабрику.

Tauler
Tauler Автор

в смысле параметр в конструкторе Strategy - только ITrader

Иванов Андрей
Иванов Андрей

У стратегии вроде не должно быть конструкторов с параметрами. Класс Strategy абстрактный и есть.

Думаю, что эффективнее всего сделать свою такую стратегию и посмотреть, чего там требуется. Потому что эмпирически слишком долго думать надо.