Скажите - а для чего там 3 параметра? ITrader - понятно, а зачем портвель и бумага? ведь стратегия может торговать более чем одгим инструментом и более чем на одном счете. Я понимаю что это перекочевало из контсруктора стратегии, но сама суть вопроса не меняется.
评论 (9)
登录 或 创建账户, 登录或注册以发表评论
Правильно. Поэтому и задумка такова, чтобы это было возможно. Нужно запустить стратегию по другом инструменту - создаете объект стратегии и регистрируете под другим инструментом. Если еще и по другому счету - то еще раз создаете и еще раз регистрируете. В итоге StrategyManager крутит несколько стратегий единого класса, но по разным инструментам и портфелям.
А если несколько стратегий, и у них много одинаковых действий - обращение к одной и той же БД, например. Имеет смысл создать головную стратегию, которая читает БД, а потом в зависимости от условий, вызывает ту или иную стратегию, чтобы одно и тоже действие не производилось несколько раз? И ещё, все стратегии работают параллельно. Значит ли это что например две стратегии одновременно могут производить котирование по разным инструментам? Или это как-то по другому происходит.
Выносите в отдельный блоки, наследуйте стратегии одна от другой. Ограничений по организации кода, по сути, никаких.
Да, будут котировать параллельно.
так а если стратегия работает с двумя инструментами? тот же арбитраж? или спредер?
Если пойти по пути развития 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 минуты. Может быть, поможет найти правильный путь.
Ну в вариант - конструткор для Strategy только ITrader и класс Strategy - асбтрактный? Кому надо - то намутит фабрику.
в смысле параметр в конструкторе Strategy - только ITrader
У стратегии вроде не должно быть конструкторов с параметрами. Класс Strategy абстрактный и есть.
Думаю, что эффективнее всего сделать свою такую стратегию и посмотреть, чего там требуется. Потому что эмпирически слишком долго думать надо.