← Atrás

StrategyManager.Register

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

¿Le resultó útil este tema?

Compartir tema

Comentarios (9)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Mikhail Sukhov
Mikhail Sukhov

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

dart
dart

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

Mikhail Sukhov
Mikhail Sukhov

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

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

Tauler
Tauler Autor

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

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 Autor

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

Tauler
Tauler Autor

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

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

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

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