Блог им. kurd

Алготрейдинг с обезличенными сделками. С чего начать

Обезличенные сделки в Quik'е содержат информацию о направлении сделок — Buy и Sell. Теоретически, это даёт дополнительные возможности прогноза движения цены. На практике дело сразу упирается в громадный объём этих тиковых данных и недоступность их во всех широко известных источниках.
Запрос «smart-lab Обезличенные сделки» в Яндексе даёт подборку
smart-lab.ru/blog/583818.php?ysclid=l5rmqam0or156053926
smart-lab.ru/tag/%D0%BE%D0%B1%D0%B5%D0%B7%D0%BB%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%81%D0%B4%D0%B5%D0%BB%D0%BA%D0%B8/?ysclid=l5rmr8efkg459101185
Разговоры сводятся к откачивание данных из Quik'а с помощью QLua и манипуляциям в Excel. Подход беспомощный и бесперспективный.

Во-первых, держать Quik включённым целый день только для получения данных по обезличенным сделкам впрок, для дальнейшего анализа — испытание терпения, немногим по силам. Ведь для реалистичности тестирования нужны данные за много дней.
Во-вторых,  объёмы данных за один торговый день — сотни тысяч записей, до полутора миллиона и более. Никакой Excel или Python не справятся. Выход в использовании источника с готовыми данными и эффективного средства программирования вроде C++, C# или Java.

Бесплатный источник полных тиковых данных с MOEX — на страницах www.qscalp.ru/download и erinrv.qscalp.ru
Однако, ожидать толку в игре от реакции на каждый тик — нереально.
Во-первых, типовое TrueRange между соседними тиками менее 0.01% от текущей цены. Это сопоставимо с комиссией биржа+брокер.
Во-вторых, у моего брокера БКС прохождение заявки с терминала до биржи занимает время от 0.1 до 0.5 сек.
Примерно на такое же время запаздывают данные о сделках на бирже. За это время Quik получит сотни тиков — с таким запаздыванием. Заявка по этим запоздавшим данным придёт на биржу с таким же запаздыванием. Реакция на тик — всегда игра невпопад.

Так что если C++, C# или Java при тестировании стратегии справятся с громадными тиковыми объёмами, в торговом терминале Quik с использованием QLua польза от реакции на каждый тик не очевидна. При том, что в главном Windows-потоке Quik'а не рекомендуется размещение трудоёмких вычислений. Только регистрация событий в соответствущей таблице из обработчика событий обезличеных сделок OnAllTrade(). Обработка этой таблицы возможна в подчиненном потоке main() через регулярные промежутки времени.

Чтобы использовать в торговой стратегии тиковые данные с обезличенными сделками, я предлагаю агрегировать их в секундный или минутный тайм-фрейм с обычным форматом данных .csv
Ticker,Period,Date,Time,Open,High,Low,Close,Volume.
Значения Volume в каждой обезличенной тиковой сделке в пределах тайм-фрейма суммируются: для Buy — со знаком плюс, для Sell — со знаком минус. Таким образом, поле Volume агрегированных данных даёт направление сделок в пределах секунды или минуты.

На меня пока не сошло озарение, как использовать эти данные для беспроигрышной стратегии. Я вообще невысоко оцениваю свой дар предвидеть будущее.
Возможно, кому-то эти данные принесут больше пользы. Или хотя бы развлекут. Они выложены на странице
disk.yandex.ru/d/T5NEjT2P5sh4ow
Яндекс даёт дерево каталогов одним zip-файлом.
Там же выложен мой код Java для JDK 11 Liberica. "… это рекомендованный отечественный софт, который включен в реестр российского ПО"
www.cnews.ru/news/top/2020-09-21_platezhnaya_sistema_mir?ysclid=l5w5c13jpe323300702

Данные в формате .sqh переведены программой qsh2txt.exe (с сайта qscalp.ru) в .txt и из-за их громоздкости упакованы в формат .7z — для самых рьяных энтузиастов. Например, кому-то захочется отфильтровать тики, прежде чем их суммировать.
Для тех, кого заинтересует, выложены  агрегированные данные в формате .csv с разделителями полей ";". Excel читает как родную таблицу. Для проверки результатов суммирования тиков к формату .csv добавлено поле Index, относящее начало бара ко смещению (номер-1) первой тиковой записи бара в исходном файле .txt.

PS если кто захочет ловить удачу на тиках, могу подсказать, как вычислять скользящие среднюю и средне-квадратичное отклонение в «один проход». Задав период N, для средней, вычисляете сумму SUM первых N чисел. Для следующего числа прибавляете его к SUM и вычитаете из неё первое число. Среднее всегда равно
AVR = SUM / N.
Для скользящего средне-квадратичного надо вычислять ещё текущую сумму квадратов чисел SQRSUM. Средне-квадратичное отклонение всегда равно
SIGMA = SQRT ((SQRSUM — SUM * SUM / N) / (N-1))

PPS Также на erinrv.qscalp.ru лежат и данные по очереди заявок. Но это объёмы ещё большие — по 50 уровней вверх и вниз от лучших цен на каждый тик, более 20 млн записей на один торговый день. Что с ними делать — совсем непонятно.

★3
8 комментариев
1) Можно считать экспоненциальную среднюю (EMA), для нее даже вычитать первое число не нужно.
2) Еще вариант получения обезличенных сделок — через терминал Metatrader.
avatar
Jame Bonds, 11:14 так много чего можно! Например, John F. Ehlers «Cycle Analytics for Traders» рекомендует SuperSmoother по 4 барам.
Rostislav Kudryashov, есть интересная идея для использования таблицы ОС. Но не для торговли, а для создания платного облачного сервиса. Если интересно, пишите в личку.
Ростислав, а задача то в итоге какая? HFT?
Я как-то тоже с тиками плотно работал и возлагал определенный надежды на поле «направление сделки». В итоге пришел к выводу, что по крайней мере на срочном рынке (для него доступен полный ордерлог в формате qsh) это просто шум ( smart-lab.ru/blog/541587.php ), и лучше всего его определять по тому выше или ниже середины спреда была цена сделки. А питону вполне реально скормить таблицу размером в гигабайты и работать с ней, если это реально нужно вам, конечно. Так что если не знаете с++, то нечего горевать или начинать учить с нуля. Питона вполне достаточно.
avatar
Добрый день!
А СПб биржа поставляет ОС?
avatar
Rustam Rust, СПб это не биржа, это даркпул или вовсе кухня. Сделки на этой бирже просто неинформативны.

теги блога Rostislav Kudryashov

....все тэги



UPDONW
Новый дизайн