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

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


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

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

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

Но недавно я узнал, что QScalp сам пишет историю и бесплатно ее выкладывает через брокера [url=http://www.itinvest.ru/software/spo/qscalp/history/]IT Invest[/url].

В итоге, я [url=https://github.com/StockSharp/Qsh2Bin/releases]написал конвертор[/url] данных QScalp в формат StockSharp!

[center][img]102640[/img][/center]

[center][img]103814[/img][/center]

Просто установите программу и скачайте исторические данные формата 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

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


[quote=Mikhail Sukhov;33583][quote=Pantov;33570]все сделал, но даже в Гидре есть только BIDы и в ОЛ и в конвертированных стаканах. Какие надо учесть ньюансы, что не так?[/quote]

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

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

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

Спасибо:

Mikhail Sukhov

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


[quote=Pantov;33594] Все заработало, получил, что хотел, спасибо Михаил. Готов оплатить помощь, скажите куда.[/quote]

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

Спасибо:

Mikhail Sukhov

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


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

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

Спасибо:

vk37

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


У меня получился несколько иной алгоритм конвертации. Возможно, кому-то окажется полезным: [SPOILER][code=csharp]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;[/code][/SPOILER] По 3 дням стакан построить не получилось: предполагаю что запись данных была выполнена с ошибками. Даты и время ошибок: 13.10.2014 Пн 19:00:55.878 11.06.2015 Чт 18:56:21.672 18.09.2015 Пт 18:51:07.919

Спасибо:

sharafievrr

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


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

Спасибо:

Lexuz77

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


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

Спасибо:

Mikhail Sukhov

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


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

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

[url=https://github.com/StockSharp/Qsh2Bin/releases/tag/1.0.5]Скачать[/url]

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

Спасибо: JaguarFX

JaguarFX

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


Программа очень и очень нужная для тестирования hft-стратегий на предмет того не являются ли они тестовыми граалыми, у которых чудо-доходность обусловлена исключительно несовершенством тестера (а-ля такого [url=https://charts.mql5.com/10/331/si-splice-m1-oao-brokerskiy-dom-moy-testoviy-graal-v-zhizni-bi.png]Мой hft-грааль[/url]). А так же подобные данные позволяют "исследовать" микроструктуру рынка на предмет реальных возможностей для заработка на фреймах ниже М1. Основное пожелание - интегрировать в следующую версию S#.Data данный сайт Цериха как доп. источник для скачивания данных с конвертацией "на лету" в формат bin с формированием OL или стаканов по выбору пользователя.

Спасибо:

Mikhail Sukhov

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


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

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

Спасибо:

Константин

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


Конвертор не работает с файлами типа: [quote]Название.AuxInfo.qsh[/quote] Ошибка: 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.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[T](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.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[T](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()<--- "

Спасибо:
<< < 3 4 5 6 7  >

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

loading
clippy