В этой статье посмотрим, как сохранять слепки стаканов и затем запускать роботов в тестере на стаканах.
В OsEngine недавно появилась поддержка формата QSH версии 4 для стаканов (Quotes) и тиков (Deals). OsData поддерживает загрузку стаканов в формате QSH для рынка криптовалют и MOEX. Тестер также поддерживает формат QSH для стаканов (Quotes) и тиков (Deals) — как для файлов, скачанных через OsData, так и для файлов от сторонних поставщиков, например Scalping.Pro.
В главном меню открываем OsData и подключаемся к коннектору, с которого хотим сохранять стаканы:
Создаём новый сет и настраиваем:
Внимание!
Для сохранения стаканов в реальном времени в формате QSH коннектор должен поддерживать получение стаканов. Так, например, коннектор TInvest поддерживает работу с этим форматом, в то время как коннектор Finam доступен только для скачивания исторических данных.
В настройках коннектора необходимо установить параметр «Использовать полный стакан» в значение true.
Рядом с exe файлом OsEngine есть папка Data. В ней Вы найдёте сет данных, который Вы создавали и данные по конкретной бумаге.
Формат QSH является бинарным. Это означает, что нельзя просто открыть файл и посмотреть, какие данные в нём находятся. Такие данные можно прочитать только с помощью специальных программ — в нашем случае это тестер.
Для надёжности хранения данных для каждого дня создаётся отдельный файл.
Для тестирования роботов на стаканах или сделках переходим в Тестер.Light:

Заходим в подключение к тестовому ядру:

И включаем скаченный сет данных:

В данном пример у нас загружены стаканы по бумагам SBER и MOEX за три дня.
Особое внимание стоит уделить количеству скачиваемых инструментов. Время записи стакана фиксируется в момент его поступления из коннектора в OsData. При этом сам коннектор должен обработать все входящие стаканы и передать их в OsData. Это означает, что при скачивании сотен или тысяч инструментов через один коннектор могут возникать задержки, и время записи слепка стакана будет отличаться от момента, когда сам стакан поступил в коннектор. Разница может достигать нескольких секунд. Особенно это актуально при скачивании стаканов с криптобирж, где волатильность в разы выше, чем на Московской бирже.
Создадим два робота BollingerRevers и подключим бумаги:
Теперь заходим в самого робота:

Включив эмуляцию рынка, мы увидим, что данные пошли:

При этом данные синхронизированы для всех торгуемых бумаг.
Рассмотрим подключение данных по сделкам через файлы, скачанные не через OsEngine. Данные в формате QSH можно посмотреть на сайте https://www.qscalp.ru/qsh-service. У Scalping.Pro доступны актуальные данные по 30 акциям и фьючерсам Московской биржи. Скачаем данные по тикам (Deals) для MOEX и SBER за несколько дней.

Подключение данных выполняется так же, как и для стакана, однако свечи в этом случае формируем на основе тиков.
После подключения и настройки всех бумаг, запускам тестирование. При этом стакан будет транслировать только последнюю цену трейдов.
Если скачивать сотни и тысячи инструментов в один сет, такой сет будет содержать тысячи файлов и может занимать десятки гигабайт. Для тестирования он окажется слишком тяжёлым, поэтому рекомендуется создать отдельную папку, в которой будут находиться только инструменты, необходимые для тестирования.

В данном примере слева расположен сет стаканов по всем спотовым акциям Московской биржи за несколько дней. Для тестера такая папка будет слишком тяжёлой, и загрузка данных по инструментам может занимать несколько минут.
Чтобы облегчить работу тестера, запустим только необходимые инструменты, поместив их в отдельную папку.
Если в папке одновременно присутствуют файлы Deals и Quotes, в первую очередь будут читаться файлы Deals, а файлы Quotes будут проигнорированы.
Если вы не программист и тестируете стандартных роботов из сборки, то надо уделить особое внимание на сопровождение позиции.
1. Время жизни ордеров необходимо установить в режим Specified.
2. Чтобы позиции не открывались по несуществующим ценам, до которых стакан фактически не доходил, проскальзывание желательно отключить
3. Ордера на закрытие позиции следует выставлять как Market. При использовании Limit возможны ситуации, когда ордер постоянно переставляется вслед за ценой и не исполняется. После пятой попытки ордер перестаёт выставляться, и позиция может «зависнуть».
Удачных алгоритмов!
Комментарии открыты для друзей!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support