Добрый день!
Возникли несколько вопросов по реализации MarketQuotingStrategy.
В учебном примере MqSpreadstrategy при помощи алгоритма MarketQuotingStrategy стратегия котирует одновременно на покупку и продажу с двух сторон спреда. После того как как котировщик наберёт позицию хотя бы с одной стороны спреда, стратегия тут же останавливает котирование с той стороны спреда. После того, как отработает котировщик с другой стороны спреда, стратегия автоматически останавливается и не запускается Перезапускать всю стратегию нужно вручную.
В учебных стратегиях из других уроков происходит практически тоже самое. Учебная стратегия MQstrategy отрабатывает также: сначала она набирает позицию с помощью стратегии котирования на покупку, а потом, когда позиция набрана, котирует на продажу. После того как отработают последовательно оба алгоритма котирования на покупку и продажу, она сразу же останавливается.
Поэтому у меня возникли следующие вопросы:
- После того как набрана позиция, MarketQuotingStrategy сразу останавливается и автоматически удаляется из списка дочерних стратегий? Или нужно дополнительно прописать код остановки и удаления из списка дочерних стратегий?
- Почему MarketQuotingStrategy не запускается автоматически после того как позиция закрыта или равна нулю?
- Каждый раз для повторного запуска котировщика нужно создавать новый экземпляр MarketQuotingStrategy?
- Какие события лучше использовать для запуска MarketQuotingStrategy? В учебном примере используется событие изменения времени в коннекторе. Может лучше использовать событие изменения стакана?
Заранее спасибо за помощь!
Комментарии (4)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Мы проверили проверку нашего примера с котированием в уроках. Результат - стратегия работает как и должно быть. Вероятность есть некоторые особенности в задании настройках, инструменте.
Могли бы вы прислать на почту минимальный пример со всеми настройками для воспроизведения?
Далее ответы от разработчика кода для уроков
Добрый день!
Я отправил на почту файл Visual Studio со стратегией. Вашей почты у меня нет, поэтому отправил на на support@stocksharp.ru. Все свои команды и действия я снабдил комментариями в самом файле.
Идея стратегии заключается в следующем. При помощи алгоритма MarketQuotingStrategy стратегия котирует одновременно на покупку и продажу с двух сторон спреда. После того как как стратегия наберёт позицию хотя бы с одной стороны спреда, котирование с другой стороны спреда продолжается. В случае, если стратегия успевает закрыть позицию перед изменением цены, цикл повторяется. При этом стратегия постоянно мониторит текущую цену и сравнивает её с ценой открытия позиции. Если же стратегия не успевает закрыть позицию перед тем как цена изменилась, то стратегия останавливает котирование по цене Following, и запускает стратегию быстрого закрытия позиции котированием по цене Opposite для гарантированного быстрого закрытия позиции. При остановке, стратегия должна закрыть все позиции котированием, чтобы это потом не делать вручную.
Однако во время работы стратегии происходит следующее:
При компиляции ошибок нет. Что я сделал не так?
Добрый день
Извещаем вас, что анализ кода и исправления еще ведутся. Результат будет предоставлен в ближайшее время.
Стратегия в том виде что предоставлена не запустится.
В стратегии используются 2 стратегии котирования противоположные по направлению, есть совсем небольшая вероятность что при их работе Math.Abs(Position) == Volume. Это возможно только в том случае если все сделки придутся только на одну стратегию котирования. Вместо этого запуск стратегий закрытия _strategySellClosePosition и _strategyBuyClosePosition стоит запускать после остановки _strategySellClosePosition и _strategyBuyOpenPosition соответственно. Это можно реализовать, используя правило:
_strategyBuyOpenPosition .WhenStopped() .Do(() => { _strategyBuyClosePosition = new MarketQuotingStrategy(Sides.Buy, Volume) …
}) .Once() .Apply(this); 2)
Так как выбрана модель периодического запуска стратегии, то вполне возможна ситуация, когда позиция стратегии равна 0 но стратегии котирования уже запущены. Это приведет к многократному выставлению заявок. Необходимо реализовать дополнительную фильтрацию на наличие запушенных стратегий котирования _strategySellClosePosition и _strategyBuyClosePosition. 3)
Дочерние стратегии сами остановятся при остановке родительской.
4)
Закрытие позиции котированием в этом случае не произойдет. Так как это тоже дочерняя стратегия и она остановиться при остановке родительской. То есть в момент выполнения base.OnStopping();.