Проблемы с реализацией стратегии котирования


Проблемы с реализацией стратегии котирования
Atom
29.05.2020


Добрый день!

Возникли несколько вопросов по реализации MarketQuotingStrategy.

В учебном примере MqSpreadstrategy при помощи алгоритма MarketQuotingStrategy стратегия котирует одновременно на покупку и продажу с двух сторон спреда. После того как как котировщик наберёт позицию хотя бы с одной стороны спреда, стратегия тут же останавливает котирование с той стороны спреда. После того, как отработает котировщик с другой стороны спреда, стратегия автоматически останавливается и не запускается Перезапускать всю стратегию нужно вручную.

В учебных стратегиях из других уроков происходит практически тоже самое. Учебная стратегия MQstrategy отрабатывает также: сначала она набирает позицию с помощью стратегии котирования на покупку, а потом, когда позиция набрана, котирует на продажу. После того как отработают последовательно оба алгоритма котирования на покупку и продажу, она сразу же останавливается.

Поэтому у меня возникли следующие вопросы:

1) После того как набрана позиция, MarketQuotingStrategy сразу останавливается и автоматически удаляется из списка дочерних стратегий? Или нужно дополнительно прописать код остановки и удаления из списка дочерних стратегий?
2) Почему MarketQuotingStrategy не запускается автоматически после того как позиция закрыта или равна нулю?
3) Каждый раз для повторного запуска котировщика нужно создавать новый экземпляр MarketQuotingStrategy?
3) Какие события лучше использовать для запуска MarketQuotingStrategy? В учебном примере используется событие изменения времени в коннекторе. Может лучше использовать событие изменения стакана?

Заранее спасибо за помощь!





Спасибо:


Mikhail Sukhov

Фотография
Дата: 02.06.2020
Ответить


Здравствуйте.

Мы проверили проверку нашего примера с котированием в уроках. Результат - стратегия работает как и должно быть. Вероятность есть некоторые особенности в задании настройках, инструменте.

Могли бы вы прислать на почту минимальный пример со всеми настройками для воспроизведения?

Далее ответы от разработчика кода для уроков

1) После тога как позиция набрана стратегия останавливается, ничего удалять не надо.
2) Стратегии MarketQuotingStrategy запускаются автоматически когда две предыдущие будут остановлены. Возможно две предыдущие MarketQuotingStrategy не набрали полностью позиции которые вы задали.
3) Любую стратегию S# можно запустить(Start), остановить(Stop), сбросить(Reset). В данном случае так же можно было остановить -> сбросить -> запустить.
4) Событие изменение времени коннектора взято для облегчения понимания алгоритма. Вы можете использовать другой способ, это зависит от вашего алгоритма.
Спасибо:

Анвар Насыров

Фотография
Дата: 03.06.2020
Ответить


Добрый день!

Я отправил на почту файл Visual Studio со стратегией. Вашей почты у меня нет, поэтому отправил на на support@stocksharp.ru. Все свои команды и действия я снабдил комментариями в самом файле.

Идея стратегии заключается в следующем. При помощи алгоритма MarketQuotingStrategy стратегия котирует одновременно на покупку и продажу с двух сторон спреда. После того как как стратегия наберёт позицию хотя бы с одной стороны спреда, котирование с другой стороны спреда продолжается. В случае, если стратегия успевает закрыть позицию перед изменением цены, цикл повторяется. При этом стратегия постоянно мониторит текущую цену и сравнивает её с ценой открытия позиции. Если же стратегия не успевает закрыть позицию перед тем как цена изменилась, то стратегия останавливает котирование по цене Following, и запускает стратегию быстрого закрытия позиции котированием по цене Opposite для гарантированного быстрого закрытия позиции.
При остановке, стратегия должна закрыть все позиции котированием, чтобы это потом не делать вручную.

Однако во время работы стратегии происходит следующее:

1) После того как отработает хотя бы одна из стратегий котирования, и наберет объем, стратегия просто останавливается и дальше не происходит ничего.
2) Правило расчета средневзвешенной цены исполнения по сделкам стратегии не срабатывает.
3) Средневзвешенная цена исполнения по сделкам стратегии не выводится в лог.
4) Стратегия быстрого закрытия позиции не запускается.
5) При остановке стратегия не закрывает позиции.

При компиляции ошибок нет.
Что я сделал не так?

P. S. Если вас не затруднит, откорректируйте, пожалуйста стратегию в самом файле Visual Studio и отправьте мне. Я не профессиональный программист и мне так проще понимать.
Спасибо:

Support

Фотография
Дата: 05.06.2020
Ответить


Добрый день

Извещаем вас, что анализ кода и исправления еще ведутся. Результат будет предоставлен в ближайшее время.
Спасибо:

Support

Фотография
Дата: 11.06.2020
Ответить


Стратегия в том виде что предоставлена не запустится.
1) 5f92cdf7169805ac7ddb5fe34a4f867b.png

В стратегии используются 2 стратегии котирования противоположные по направлению, есть совсем небольшая вероятность что при их работе Math.Abs(Position) == Volume. Это возможно только в том случае если все сделки придутся только на одну стратегию котирования.
Вместо этого запуск стратегий закрытия _strategySellClosePosition и _strategyBuyClosePosition стоит запускать после остановки _strategySellClosePosition и _strategyBuyOpenPosition соответственно. Это можно реализовать, используя правило:

_strategyBuyOpenPosition
.WhenStopped()
.Do(() => {
_strategyBuyClosePosition = new MarketQuotingStrategy(Sides.Buy, Volume)


})
.Once()
.Apply(this);
2) d4aba21ab0036f89f58313ab9d212ff2.png

Так как выбрана модель периодического запуска стратегии, то вполне возможна ситуация, когда позиция стратегии равна 0 но стратегии котирования уже запущены. Это приведет к многократному выставлению заявок. Необходимо реализовать дополнительную фильтрацию на наличие запушенных стратегий котирования _strategySellClosePosition и _strategyBuyClosePosition.
3) 530b83fc5f9e0c32b99bd3d37e091329.png
Дочерние стратегии сами остановятся при остановке родительской.
4) 8dc5970b0c202787f3f3f8b90fae8630.png
Закрытие позиции котированием в этом случае не произойдет. Так как это тоже дочерняя стратегия и она остановиться при остановке родительской. То есть в момент выполнения base.OnStopping();.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy