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

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


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

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

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

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

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

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

http://www.itinvest.ru/software/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 (768) SBER@FORTS.7z 503 KB (882)
Спасибо:

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