Конвертация исторических файлов QScalp в формат StockSharp


Конвертация исторических файлов QScalp в формат StockSharp
Atom
26.09.2013


Привет всем алготрейдерам!

Хочу поделиться своим решение для тестирования скальперских и ХФТ стратегий. Долгое время я использую замечательный привод Морошкина (бесплатную версию [smile] ). И недавно решил автоматизировать несколько стратегий на базе StockSharp.

Но для этого нужны исторические данные, в частности стаканы. У StockSharp есть программа Гидра, которая по идее позволяет качать все необходимое, но ее нужно держать постоянно включенной. Для меня это не вариант, так как я постоянно занят, и интернет не всегда стабильный.

Но недавно я узнал, что QScalp сам пишет историю и бесплатно ее выкладывает через брокера IT Invest.

В итоге, я написал конвертор данных QScalp в формат StockSharp!





Просто установите программу и скачайте исторические данные формата QSH для QScalp по одной из ссылок ниже

http://www.itinvest.ru/s...are/spo/qscalp/history/

ftp://athistory.zerich.com/

Теперь осталось только указать в конвертере путь к скаченным файлам и к папке хранения исторических данных StockSharp, и нажать кнопку “Запустить”!

Вуаля, теперь у вас есть высококачественные исторические данные для тестирования своих стратегий!

PS Торопитесь пока бесплатно ;))

PPS Шутка))


Всем удачной торговли!

Присоединиться и редактировать код можно по https://github.com/stocksharp/Qsh2Bin

скомпилированную программу по https://github.com/StockSharp/Qsh2Bin/releases


<< < 5 6 7 
torontoxx

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


Viacheslav Перейти
Коллеги, правильно ли я понимаю, что файлы сделок и стаканов на athistory.zerich.com и http://qsh.qscalp.ru/scalping.pro - это данные по Московской бирже?


Надо полагать, да
Спасибо:

Sun_Storm

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


Добрый день.
Пробую сейчас сконвертировать данные через этот конвертер. Данные беру отсюда: http://erinrv.qscalp.ru, за апрель
Возникли следующие ошибки:
При загрузке данных стаканов по акциям Сбербанка возникала ошибка и данные не грузились.
Проблему я решил, порывшись в исходниках. там в исходном файле в начале торгов есть строки с ценой и объемом 0 и типом Unknown. Когда тип Unknown, программа сразу выдает исключение:
Код

switch (q.Type)
{
    case QuoteType.Unknown:
    case QuoteType.Free:
    case QuoteType.Spread:
        throw new ArgumentException(q.Type.ToString());

Написал пока так для себя, не знаю, как в С# принято такое обрабатывать, когда у нас только 2 значения side:
Код

switch (q.Type)
{
    case QuoteType.Free:
    case QuoteType.Spread:
        throw new ArgumentException(q.Type.ToString());
    case QuoteType.Unknown:
        \\throw new ArgumentException(q.Type.ToString());
        side = 0;
        break;


Второй ошибкой является то, что для всех стаканов (файл quotes) время проставляется одно и то же для каждой строчки на весь файл.
Эта ошибка проявляется и для акций и для фьючерсов.
Пока не могу её побороть. сохранение в файл делается средствами StockSharp.Algo.Storages, все исходники там, как я понимаю. По отладке не могу понять, какие параметры должны быть у pair, чтобы в строке registry.GetQuoteMessageStorage(pair.Key, format: format).Save(pair.Value.Item1); запись происходила как надо. Пробовал менять LocalTime и ServerTime для каждого набора, всё равно сохраняет неправильно (со временем 35517549, например)
Спасибо:

Sun_Storm

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


Опытным путем разобрался с проблемой времени!
Если у вас в папке, из которой вы конвертируете, лежат сразу 3 файла на день из архива http://erinrv.qscalp.ru (Deals, Quotes И AuxInfo), то конвертация будет некорректной!
Я скачивал сразу все 3 файла, и из одной папки конвертировал, поэтому была ошибка.
Если в папке лежат 2 файла на день - Deals, Quotes, то всё конвертируется нормально (если не считать ошибки по акциям, описанной мной выше)

UPD:
В общем это я поспешил, что разобрался, всё равно время некорректно ставится.
Ошибка плавающая... Я в потоках этих не разбираюсь...
Однако, если прописать вместо
ServerTime = currentDate.ApplyTimeZone(TimeHelper.Moscow),
ServerTime = qr.CurrentDateTime.ApplyTimeZone(TimeHelper.Moscow),
то вроде будет работать и время сменяться. Только в файлах начало дня при таком раскладе будет 4 часа.
Спасибо:

traveller

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


Тип Unknown для quotes действительно надо фильтровать, в файле MainWindow.xaml.cs я добавил Where
var quotes2 = quotes.Where(q => q.Type != QuoteType.Unknown).Select(...
что позволяет сразу выкинуть этот тип из рассмотрения.

И цена бывает иногда нулевая, тоже можно фильтровать при желании.

Для правки времени согласен с постом выше, можно использовать
ServerTime = qr.CurrentDateTime.ApplyTimeZone(TimeHelper.Moscow)
и тогда присвоение currentDate выше можно удалить, оно нигде не используется.
Спасибо:

MichaelShpin

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


Писал подобную утилиту для TSLab и тоже заметил проблему рассинхронизации стакана и сделок.
Как я понял эту проблему:
- Есть лаг между событием на бирже и записью в локальный фаил. Он может достигать существенное количество секунд.
- Записанный отдельно стакан в Quotes.qsh не имеет того самого реального (биржевого события), а только время локальной записи.
- Сделка же летит сразу со временем, и можно увидеть этот лаг между временем записи и времен в самой сделке.
При генерации из ордер лога всё хорошо, так как в логе есть все записи, а вот с акциями придётся наворачивать.

Как поступил я.

Если акция я просто создаю сразу 2 QshReader для Deals.qsh и Quotes.qsh. И начинаю их читать опираясь на внутреннее время записи QshReader CurrentDateTime, и стакан синхронизирую относительно времени сделки.

Код


if (readers.Count > 1)
                {
                    while (true)
                    {
                        if (readers.All(qr => qr.CurrentDateTime == DateTime.MaxValue))
                            break;

                        QshReader rd = readers.OrderBy(qr => qr.CurrentDateTime).First();
                        rd.Read(true);
                    }

                    foreach (QshReader r in readers)
                        r.Dispose();
                }
                else
                {
                    QshReader qr = readers[0];

                    while (qr.CurrentDateTime != DateTime.MaxValue)
                        qr.Read(true);

                    qr.Dispose();
                }


Есть засада, что стаканы до первой сделки придётся проигнорировать, но в моей задаче была цель узнать лучший Бид/Аск в момент сделки и я её так решил.

Надеюсь помог.

Думаю скоро погружусь в эту задачу и для StokSharp
Спасибо:

GIP

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


Позвольте глупый вопрос... При импорте данных QSH по инструменту RIZ2019 за 20.11.19 первая строка: 064624425;+03:00;637098399844250000;38091733454;143780;1;Buy;Done;PutInQueue;;;; 64624425 это время в миллисекундах с начала дня, получается 18 часов? Или это 06:46? Первая сделка должна проходить в 10:00 мск.
Спасибо:

samosh

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


Здравствуйте, у меня Qsh2bin не видит файлы QSH
Спасибо:

Di

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


Я не трейдер, меня попросили сконвертировать данные в csv или txt, нашел вашу утилиту, но она выдает ошибку при конвертации.
qsh.7z исходные файлы и то что получается SBER@FORTS.7z

Что делаю не так?
qsh.7z 1 MB (329) SBER@FORTS.7z 503 KB (377)
Спасибо:

Mikhail Sukhov

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


Обновил утилиту. Перевел на 17ую версию, заобно пофиксил ошибки. Бинарники так же по ссылке https://github.com/StockSharp/Qsh2Bin/releases

Важный момент при анализе записей. QSH не имеет признака временной зоны у времени. Поэтому понять в какой временной зоне записаны данные невозможно. С большей вероятностью она может быть или Московская или UTC. Точно могу сказать, что Церих и Айти в разных временных зонах пишут данные.

Как вишенка на торт - временная зона биржевой даты так же может отличаться от временной зоны локальной метки (хотя, это вполне логично, но вдруг для кого-то сюрприз).

Как решить это проблему. Конечно же, надо писать всё в UTC. Но данные и формат уже легаси, поэтому в утилите две выпадающих списка. Один для установка временной зоны локальной отметки, другой для биржевой.

После конвертации может Гидрой или через S#.Storage API просмотреть полученные данные на предмет времени. Если начало торгов что-то вроде 7 часов утра - значит временная зона была в UTC.

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

Данные по качестве средней паршивости и для пипсовых алгоритмов совершенно бесполезные из-за недостоверной отметки времени и пропуска ряда цен внутри спреда (я про стакан). Но объемы более менее совпадают по итогу. Сервис уже достоин медали, что столь долго существует, и его ещё кто-то поддерживает.
Спасибо: nik

zoh

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


Mikhail Sukhov Перейти
Обновил утилиту. Перевел на 17ую версию, заобно пофиксил ошибки. Бинарники так же по ссылке https://github.com/StockSharp/Qsh2Bin/releases

Важный момент при анализе записей. QSH не имеет признака временной зоны у времени. Поэтому понять в какой временной зоне записаны данные невозможно. С большей вероятностью она может быть или Московская или UTC. Точно могу сказать, что Церих и Айти в разных временных зонах пишут данные.

Как вишенка на торт - временная зона биржевой даты так же может отличаться от временной зоны локальной метки (хотя, это вполне логично, но вдруг для кого-то сюрприз).

Как решить это проблему. Конечно же, надо писать всё в UTC. Но данные и формат уже легаси, поэтому в утилите две выпадающих списка. Один для установка временной зоны локальной отметки, другой для биржевой.

После конвертации может Гидрой или через S#.Storage API просмотреть полученные данные на предмет времени. Если начало торгов что-то вроде 7 часов утра - значит временная зона была в UTC.

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

Данные по качестве средней паршивости и для пипсовых алгоритмов совершенно бесполезные из-за недостоверной отметки времени и пропуска ряда цен внутри спреда (я про стакан). Но объемы более менее совпадают по итогу. Сервис уже достоин медали, что столь долго существует, и его ещё кто-то поддерживает.


А АйТи ещё продолжает шарить записи с qscalp ?
Спасибо:
<< < 5 6 7 

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

loading
clippy