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

Конвертация исторических файлов QScalp в формат StockSharp
Atom
9/26/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



<< < 3 4 5 6 7  >
Pantov

Avatar
Date: 8/21/2015
Reply


Mikhail Sukhov:

Pantov: все сделал, но даже в Гидре есть только BIDы и в ОЛ и в конвертированных стаканах. Какие надо учесть ньюансы, что не так?

https://github.com/StockSharp/Qsh2Bin/commit/8a314f967e918658219d6e44e4d5133b7e9e076f

Хочу к чему ОЛ при таком ДолларРубле...

Все заработало, получил, что хотел, спасибо Михаил. Готов оплатить помощь, скажите куда.

Thanks:

Mikhail Sukhov

Avatar
Date: 8/21/2015
Reply


Pantov: Все заработало, получил, что хотел, спасибо Михаил. Готов оплатить помощь, скажите куда.

Лучше выложите сконвертированное куда-то, чтобы не делать одно и то же всем.

Thanks:

Mikhail Sukhov

Avatar
Date: 12/8/2015
Reply


https://github.com/StockSharp/Qsh2Bin/releases/tag/1.0.4

Фильтр по инструменту. Фикс экспорта в csv.

Thanks:

vk37

Avatar
Date: 1/26/2016
Reply


У меня получился несколько иной алгоритм конвертации. Возможно, кому-то окажется полезным:

if (ol.Flags.HasFlag(OrdLogFlags.Add))                           
{
    // Action 1 - заявка добавлена
    msg.OrderState = StockSharpOrderState.Active;
    msg.Action = 1;
}
else if (ol.Flags.HasFlag(OrdLogFlags.Fill))
{
    // Action 2 - заявка сведена в сделку
    msg.OrderState = StockSharpOrderState.Done;
    msg.Action = 2;
}
else
{
    // Action 0 - заявка удалена
    msg.OrderState = StockSharpOrderState.Done;
    msg.Action = 0;
}

if (ol.Flags.HasFlag(OrdLogFlags.NonZeroReplAct))
    msg.ReplAct = -1;

if (ol.Flags.HasFlag(OrdLogFlags.SessIdChanged))
    msg.SessId = -1;

var status = 0;

if (ol.Flags.HasFlag(OrdLogFlags.Canceled))
    status |= 0x200000;

if (ol.Flags.HasFlag(OrdLogFlags.CanceledGroup))
    status |= 0x400000;

if (ol.Flags.HasFlag(OrdLogFlags.Moved))
    status |= 0x100000;

if (ol.Flags.HasFlag(OrdLogFlags.Buy))
    msg.Side = Side.Buy;
else if (ol.Flags.HasFlag(OrdLogFlags.Sell))
    msg.Side = Side.Sell;
else
    throw new ArgumentException("Не задано направление заявки");

if (ol.Flags.HasFlag(OrdLogFlags.Quote))
{
    // котировочная
    msg.TimeInForce = StockSharpTimeInForce.PutInQueue;
    status |= 0x01;
}

if (ol.Flags.HasFlag(OrdLogFlags.Counter))
{
    // встречная
    msg.TimeInForce = StockSharpTimeInForce.CancelBalance;
    status |= 0x02;
}

if (ol.Flags.HasFlag(OrdLogFlags.FillOrKill))
{
    // fill-or-kill
    msg.TimeInForce = StockSharpTimeInForce.MatchOrCancel;
    status |= 0x80000;
}

if (ol.Flags.HasFlag(OrdLogFlags.NonSystem))
    status |= 0x04;

if (ol.Flags.HasFlag(OrdLogFlags.EndOfTransaction))
    status |= 0x1000;

if (ol.Flags.HasFlag(OrdLogFlags.CrossTrade))
    status |= 0x20000000;

msg.Status = status;

По 3 дням стакан построить не получилось: предполагаю что запись данных была выполнена с ошибками. Даты и время ошибок: 13.10.2014 Пн 19:00:55.878 11.06.2015 Чт 18:56:21.672 18.09.2015 Пт 18:51:07.919

Thanks:

sharafievrr

Avatar
Date: 4/27/2016
Reply


После конвертации в из qsh в bin подкладываю данные в директорию где хранятся данные для гидры. Но при попытке получить тики по этому инструменту гидра говорит что данных нет. Что надо сделать чтобы гидра увидела файлы с сконвертированной историей?

Thanks:

Lexuz77

Avatar
Date: 9/10/2016
Reply


sharafievrr: После конвертации в из qsh в bin подкладываю данные в директорию где хранятся данные для гидры. Но при попытке получить тики по этому инструменту гидра говорит что данных нет. Что надо сделать чтобы гидра увидела файлы с сконвертированной историей? Присоединяюсь к вопросу - ни гидра, ни дизайнер бетка эти данные (bin) не видит :(

Thanks:

Mikhail Sukhov

Avatar
Date: 10/17/2016
Reply


Новая версия 1.0.5:

  1. Многопоточная обработка. Лучше запускать, если инструменты разбиты по разным файлам, как это сделано у Цериха.
  2. Преобрезование Order log в стаканы. Глубика по-умолчанию 5, правится в настройках в конфиг-файле.
  3. Фильтр инструментов по маске, перечисление через запятую. Например, SBER,RTS-*,BR будет означать поиск инструментов с названием SBER, вме инструменты, начинающиеся с RTS- и все инструменты, содержащие в названии BR (SBER, BRENT и т.д.).

Скачать

Напишите пожелание по утилите. Интересен ли вам сервис от Цериха, нужны ли в работе такие данные. Кто знает что стало с аналогичным сервисом от IT Invest?

Thanks: JaguarFX

JaguarFX

Avatar
Date: 10/30/2016
Reply


Программа очень и очень нужная для тестирования hft-стратегий на предмет того не являются ли они тестовыми граалыми, у которых чудо-доходность обусловлена исключительно несовершенством тестера (а-ля такого Мой hft-грааль). А так же подобные данные позволяют "исследовать" микроструктуру рынка на предмет реальных возможностей для заработка на фреймах ниже М1. Основное пожелание - интегрировать в следующую версию S#.Data данный сайт Цериха как доп. источник для скачивания данных с конвертацией "на лету" в формат bin с формированием OL или стаканов по выбору пользователя.

Thanks:

Mikhail Sukhov

Avatar
Date: 10/30/2016
Reply


Лебедев Сергей: Основное пожелание - интегрировать в следующую версию S#.Data данный сайт Цериха как доп. источник для скачивания данных с конвертацией "на лету" в формат bin с формированием OL или стаканов по выбору пользователя.

Сайт поддерживает неофициально. Вполне вероятно, что у Цериха не хватает ресурсов, и он может быть закрыт в любое время. Тратить ресурсы на такую задачу нам не сильно охота. Да и что там автоматизировать? Закачку c FTP? Это делается любым download manager-ом на 1-2-3.

Thanks:

Константин

Avatar
Date: 2/12/2018
Reply


Конвертор не работает с файлами типа:

Название.AuxInfo.qsh Ошибка: Qsh2Bin 12.02.2018 19:27:26 Error "System.AggregateException: Произошла одна или несколько ошибок. ---> System.ArgumentOutOfRangeException: Время в формате UTC, представленное при применении смещения, должно находиться в диапазоне от 0 до 10 000 лет. Имя параметра: offset в System.DateTimeOffset.ValidateDate(DateTime dateTime, TimeSpan offset) в System.DateTimeOffset..ctor(DateTime dateTime, TimeSpan offset) в Ecng.Common.TimeHelper.ApplyTimeZone(DateTime dt, TimeZoneInfo zone) в StockSharp.Qsh2StockSharp.MainWindow.<>c__DisplayClass16_1.<ConvertFile>b__9(Int32 key, AuxInfo info) в QScalp.History.Reader.V4.AuxInfoStream.Read(Boolean push) в QScalp.History.Reader.V4.QshReaderImpl.Read(Boolean push) в StockSharp.Qsh2StockSharp.MainWindow.ConvertFile(String fileName, IStorageRegistry registry, StorageFormats format, ExchangeBoard board, String securityLike, Dictionary2 orderLog2OrderBookBuilders, Int32 orderBookMaxDepth) в StockSharp.Qsh2StockSharp.MainWindow.<>c__DisplayClass14_0.<ConvertDirectory>b__0(String f) в MoreLinq.MoreEnumerable.ForEach(IEnumerable1 source, Action1 action) в StockSharp.Qsh2StockSharp.MainWindow.ConvertDirectory(String path, IStorageRegistry registry, StorageFormats format, ExchangeBoard board, String securityLike, Boolean multithread, Dictionary2 orderLog2OrderBookBuilders, Int32 orderBookMaxDepth) в StockSharp.Qsh2StockSharp.MainWindow.<>c__DisplayClass13_0.<Convert_OnClick>b__0() в System.Threading.Tasks.Task.Execute() --- Конец трассировки внутреннего стека исключений --- ---> (Внутреннее исключение #0) System.ArgumentOutOfRangeException: Время в формате UTC, представленное при применении смещения, должно находиться в диапазоне от 0 до 10 000 лет. Имя параметра: offset в System.DateTimeOffset.ValidateDate(DateTime dateTime, TimeSpan offset) в System.DateTimeOffset..ctor(DateTime dateTime, TimeSpan offset) в Ecng.Common.TimeHelper.ApplyTimeZone(DateTime dt, TimeZoneInfo zone) в StockSharp.Qsh2StockSharp.MainWindow.<>c__DisplayClass16_1.<ConvertFile>b__9(Int32 key, AuxInfo info) в QScalp.History.Reader.V4.AuxInfoStream.Read(Boolean push) в QScalp.History.Reader.V4.QshReaderImpl.Read(Boolean push) в StockSharp.Qsh2StockSharp.MainWindow.ConvertFile(String fileName, IStorageRegistry registry, StorageFormats format, ExchangeBoard board, String securityLike, Dictionary2 orderLog2OrderBookBuilders, Int32 orderBookMaxDepth) в StockSharp.Qsh2StockSharp.MainWindow.<>c__DisplayClass14_0.<ConvertDirectory>b__0(String f) в MoreLinq.MoreEnumerable.ForEach(IEnumerable1 source, Action1 action) в StockSharp.Qsh2StockSharp.MainWindow.ConvertDirectory(String path, IStorageRegistry registry, StorageFormats format, ExchangeBoard board, String securityLike, Boolean multithread, Dictionary2 orderLog2OrderBookBuilders, Int32 orderBookMaxDepth) в StockSharp.Qsh2StockSharp.MainWindow.<>c__DisplayClass13_0.<Convert_OnClick>b__0() в System.Threading.Tasks.Task.Execute()<--- "

Thanks:
<< < 3 4 5 6 7  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy