Mikhail Sukhov
|
Date: 9/9/2010
Правильно. Поэтому и задумка такова, чтобы это было возможно. Нужно запустить стратегию по другом инструменту - создаете объект стратегии и регистрируете под другим инструментом. Если еще и по другому счету - то еще раз создаете и еще раз регистрируете. В итоге StrategyManager крутит несколько стратегий единого класса, но по разным инструментам и портфелям.
|
|
Thanks:
|
|
|
|
|
dart
|
Date: 9/9/2010
А если несколько стратегий, и у них много одинаковых действий - обращение к одной и той же БД, например. Имеет смысл создать головную стратегию, которая читает БД, а потом в зависимости от условий, вызывает ту или иную стратегию, чтобы одно и тоже действие не производилось несколько раз? И ещё, все стратегии работают параллельно. Значит ли это что например две стратегии одновременно могут производить котирование по разным инструментам? Или это как-то по другому происходит.
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 9/9/2010
Выносите в отдельный блоки, наследуйте стратегии одна от другой. Ограничений по организации кода, по сути, никаких.
Да, будут котировать параллельно.
|
|
Thanks:
|
|
|
|
|
Tauler
|
Date: 9/9/2010
так а если стратегия работает с двумя инструментами? тот же арбитраж? или спредер?
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 9/10/2010
Если пойти по пути развития Strategy, то параметры инструмент и портфель появились больше из-за того, чтобы их не передавать в конструктор. И чтобы была возможность сериализации-дересерилации стратегий в xml.
Но я полностью согласен по поводу парно-инструментальный стратегий. Более того, не только по таким, но и по стратегиям, где собирается корзина инструментов... Думаю, даже банальное использование множества портфелей так же не экзотика (особено в ДУ).
Я помню об этом, но пока не придумал никакого элегантного решения. Пока, как есть - необходимо передавать в метод Register первый инструмент и первый портфель. Если есть соображения, как улучшить дизайн, готов послушать.
|
|
Thanks:
|
|
|
|
|
Иванов Андрей
|
Date: 9/12/2010
Вместо одного объекта передавать массив или IEnumerable =) Другие варианты отсутствуют.
Но мне кажется, что это ускорение энтропии. А лучше делать базовую стратегию для нескольких инструментов и нескольких портфелей, с расширением класса StrategyManager, который будет понимать эту ветку стратегий. Начальная регистрация стратегии через обычный путь -- StrategyManager.Register(Strategy, ITrader, Portfolio, Security). А расширять тремя методами (ну или по-другому как-нибудь) типа StrategyManager.Register(StrategyWide, ITrader), StrategyManager.Register(StrategyWide, Portfolio) и StrategyManager.Register(StrategyWide, Security); Соответственно, начальные параметры стратегии будут доступны через свойства Strategy, остальные параметры через свойства StrategyWide.
Мне пока не требовалось такого, пишу чего придумалось за 3 минуты. Может быть, поможет найти правильный путь.
|
|
Thanks:
|
|
|
|
|
Tauler
|
Date: 9/13/2010
Ну в вариант - конструткор для Strategy только ITrader и класс Strategy - асбтрактный? Кому надо - то намутит фабрику.
|
|
Thanks:
|
|
|
|
|
Tauler
|
Date: 9/14/2010
в смысле параметр в конструкторе Strategy - только ITrader
|
|
Thanks:
|
|
|
|
|
Иванов Андрей
|
Date: 9/15/2010
У стратегии вроде не должно быть конструкторов с параметрами. Класс Strategy абстрактный и есть.
Думаю, что эффективнее всего сделать свою такую стратегию и посмотреть, чего там требуется. Потому что эмпирически слишком долго думать надо.
|
|
Thanks:
|
|
|
|