Friend
Friend личный блог
25 сентября 2018, 11:55

S#.Data от StockSharp и Финам, попытка сделать автообновление истории.

Была у меня мысль, и сейчас она есть, сделать автообновление истории по нашим акциям и фьючерсам. Так как у самого времени на это не хватало, на разбирательство что и как — то перепоручил это дело знакомому. Вот об этом и рассказ. Может кто то уже сталкивался или делал это. Может подскажите. 
Стиль автора сохранен. 

            Добрый день! Эта история о том, как я работал с продуктом S# — S#.Data, также известной как Гидра.

            Идея была таковой: обеспечить автоматическую загрузку и обновление исторических данных (минутные свечи) с Финама по сотне акций и двум десяткам фьючерсов. Решено было реализовать эту идею с помощью источника «Финам» и задачи «Экспорт (авто)». С первых минут работы с сим шедевром стало ясно, что придётся помучиться. Первым делом загрузил все инструменты, доступные Гидре (с трудом, ибо Гидра начала бунтовать, пришлось перезапустить эту программу), после добавил примерно сотню акций и около двадцати фьючерсов, настроил кое-как источник и задачу, установил начальную дату для загрузки историй.

            Первой серьёзной, как тогда казалось, проблемой стал шаблон экспорта, но всё по порядку. Пришлось разбираться, какой формат данных нужен был (предусматривалась работа с TSLab): скриншот ниже.
S#.Data от StockSharp и Финам, попытка сделать автообновление истории.
            Загвоздка оказалась в том, что данный файл с расширением txt, а Гидра, как ни странно, умеет выводить текстовые файлы только в формате csv, для которого в TSLab существовал другой формат. К сожалению, скриншот вставить не могу, так как все файлы в формате csv я удалил, а это уже совсем другая история. Могу только предоставить шаблон экспорта минутных свечей, который нужен Гидре:

{OpenTime:MM/dd/yyyy};{OpenTime:HH}:{OpenTime:mm};{OpenPrice};{HighPrice};{LowPrice};{ClosePrice};{TotalVolume}

            Но и с ним были проблемы: время должно было быть в формате HH:mm, поэтому в шаблоне пришлось бы прописывать {OpenTime:HH:mm}, а второе двоеточие Гидре не понравилось. Спустя две недельки до меня наконец-то дошло, что можно просто разделить поля, как в шаблоне выше. Так первая проблема была решена.

            Второй проблемой стала сама механика работы задачи экспорта в Гидре. Мало того, что название экспортируемого файла было, мягко говоря, некрасивым (например: candles_TimeFrameCandle_00_01_00_SBER@TQBR_2007_01_09_2018_08_16.csv), так ещё и Гидра не могла дополнять файлы, то есть она выводила один файл, потом спустя сутки ещё один, вместо дополнения первого, и так каждый день. В итоге я наблюдал чудесную картину: три файла: один за период 01.01.2007 — 01.08.2018, другой —  за период 01.08.2018 — 02.08.2018, третий — за 02.08.2018 — 03.08.2018. Чтобы избежать этой мути, пришлось писать .bat, склеивающий файлы одной акции/фьючерса, одновременно давая адекватные названия файлам. Ещё один бзик Гидры побеждён!

            Но радовался я недолго… Оказалась, что в выходные и праздники Гидра продолжает каждый день экспортировать файлы, несмотря на отсутствие новых данных. В итоге каждый день появлялись новые одинаковые файлы, а скрипт их склеивал, и в основном файле со всей историей с 2007 года последние строки просто дублировались. Решение тоже нашлось: пришлось дополнить скрипт, чтобы он сравнивал новые файлы с последними строками основных файлов, и, если они идентичные, скрипт их удаляет. Одной проблемой меньше.

            Очень скоро нашлась ещё одна проблема, Гидра встраивает в файлы в формате csv временной признак +3, который не нужен, и получалось, что в TSLab'е вся история была сдвинута на 3 часа вперёд. Торги начинались в 13:00, а заканчивались в 3:00. Именно тогда я психанул, удалил все файлы в формате csv и переделал шаблон и скрипт для работы с txt. Гидра экспортировала файлы в формате csv, но скрипт, склеивая их, менял их расширение на txt. Кстати, вот шаблон для минуток:

{SecurityId.SecurityCode},1,{OpenTime:yyyyMMdd},{OpenTime:HHmmss},{OpenPrice},{HighPrice},{LowPrice},{ClosePrice},{TotalVolume}

Также в формате txt TSLab'у нужен заголовок файла:

<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>

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

            Не успел я разобраться с предыдущей проблемой, как появилась ещё одна. Оказалось, что большая часть акций просто не те! То есть данные, загруженные напрямую с Финама, сильно отличаются от данных, которые предоставила Гидра, хотя тикеры акций идентичны!

Ниже можно увидеть скриншоты истории по акции HYDR (слева — с Финама, справа — с Гидры):

 S#.Data от StockSharp и Финам, попытка сделать автообновление истории.
            Рядом на скриншоте можно увидеть, что Гидра считает HYDR@TQBRакцией:

S#.Data от StockSharp и Финам, попытка сделать автообновление истории.

И добавлю про логи: Гидра пишет, что начинает загрузку данных с 2007 года, но потом, с 2011 года, по-настоящему начинает загружать:

S#.Data от StockSharp и Финам, попытка сделать автообновление истории.
            Кстати, интересен факт того, что скаченные данные уже неправильные, т. е. Это не экспорт шалит, а именно источник Финам. Вот сравнение скачанных данных, лежащих в папке Гидры (слева) и выходного файла (справа) после экспорта:
S#.Data от StockSharp и Финам, попытка сделать автообновление истории.
            Мало того, что данные разные, так ещё и история с Гидры начинается 01.03.2011, как будто это фьючерс какой-то. И так со многими акциями, почти со всеми. Фьючерсы вроде правильные, но я проверял не все.

            Моё повествование подошло к концу. Собственно, зачем я всё это писал? Чтобы попросить вас о помощи. Что не так с Гидрой? И вообще, взбесилась Гидра или Финам? Почему Гидра и Финам предоставляют абсолютно разные данные?
Вот такая история. От себя добавлю. 
1. Автор статьи вместо акций скачивает фьючерс на данную акцию, хотя в настройках четко указано что это акция. 
2. На поддержку StockSharp говорит писал, 0. Видимо из за того что продукт не платный. 
3. Прошу откликнуться кто что знает, может кто то реализовал уже данный процесс. 

31 Комментарий
  • Friendly Deep Space
    25 сентября 2018, 12:36
    Еще ни разу не встречал того, кто был бы доволен их продуктами) 
    • Sergey
      25 сентября 2018, 12:58
      Friendly Deep Space, я в принципе доволен. Не скажу, что там все без шерохов, но работает.

      HYDRA их сложная до чертиков. Так же мучался с настройками акций вместо фьючерсов. Саппорт платный, покупаю по месячно когда требуется решать вопросы. Просто писать на форум бесполезно, его никто не мониторит.
        • Sergey
          25 сентября 2018, 18:03
          Frend, да
          • Sergey
            25 сентября 2018, 19:11
            Sergey, Sergey, глюкавый смарт лаб. Комментарии через раз работают.

            Решение было скачать ночную сборку и удалить предыдущие настройки. Перезакачал базу с Финам, все пошло нормально. Мне объяснили, что иногда Финам меняет идентификаторы у секций рынков, поэтому такое случается.
  • wrmngr
    25 сентября 2018, 13:09
    порой удивляет способность людей создать себе проблем на ровном месте. За время потраченное на бодание с гидрой можно было уже раза три написать свою собственную утилиту подкачки с финама
    • alt
      25 сентября 2018, 13:30
      wrmngr, Единственно разумное мнение по озвученной теме..)
      • wrmngr
        25 сентября 2018, 16:07
        Frend, что не можете? написать утилиту? ну так закажите у программера.
        Я вот не программер, но написал такую в 2007 году за полдня (120 строк на visual basic), до сих пор работает исправно. Правда не автомат, обновление по кнопке,  но мне и не надо
          • wrmngr
            25 сентября 2018, 17:02
            Frend, в ЛС отпишу
  • Дед Нечипор
    25 сентября 2018, 15:33
    Было дело. Хотел сэкономить себе время, выкачав с МФД историю опционов (тики) российского рынка с помощью Гидры (свое лень было писать — уже ведь есть готовое решение) — ага, сэкономил… Чего-то там не получалось загрузить список тикеров автоматом, написал на их форуме — тишина, неделю не было ответа. В итоге таки удалось добиться, чтобы Гидра получила список тикеров (около 100 тысяч), жму загрузку — а в ответ она что-то начинает усиленно с процем работать, а в соответствующей папке для исторических данных ни одного файла так и не было загружено. Подождал полчаса — все так же что-то усиленно вычисляла (черт его знает, что там так  долго можно делать, даже если сортировку строк...). Убил процесс. Повторно попробовал еще пару раз. Снес, сел писать свое… заняло не так и много времени, нервы целее  будут
  • Сергей Грошев
    25 сентября 2018, 19:31
    Тоже бегал по этим граблям, та же задача — сделать автообновление для TSLaba. Тоже начал с Гидры. Ваш автор ещё одну проблему не написал — в конце файла Гидра ставит символ перевода строки, а ТСЛабу это не нравится.

      • Сергей Грошев
        05 октября 2018, 19:31
        Frend, нет, не решил. Попробовал еще OSA Engine Алексея Вана, там тоже есть своя Гидра, TSLab понимает их файл, но почему-то не обновляется в реальном времени.
          • Сергей Грошев
            10 октября 2018, 14:13
            Frend, мне не удалось. Пытался настроить автообновление минуток для ри — не получилось:
            1. В Data нет SmartCom-а, пришлось использовать Финам, как поставщик данных.
            2. Исторические данные Финам дает нормально, а с реалом — проблемы. Минутные свечки формируются неверно. Открывал параллельно поток данных от SmartCom-а и сравнивал с тем, что дает Data — идут расхождения. Возможно, причина в том, что в Data  свечки формируются из тиков, а Финам дает тики с игрового сервера, не знаю. 

            Вообщем, эту идею оставил. Сейчас пытаюсь перенести скрипт, написанный на АПИ ТСЛаба, на ОСА. Ничего не имею против ТСЛаба, но 4 тыс. в месяц платить, по-моему, слишком дорого. Когда только разрабатывал, то писал им на техподдержку, спрашивал, тогда было оправдано. Но когда уже все отладил, то дорого. Опционами я не пользуюсь, версия 2.0 не нужна.
              • Сергей Грошев
                16 октября 2018, 11:19
                Frend, не думали уходить с ТСЛаба? В ОСА, например, реально событийная модель, в отличие от ТСЛаба, где всего одно событие — формирование свечи.
              • Сергей Грошев
                16 октября 2018, 14:53
                Frend, по поводу даты — не понял. Какую дату надо менять автоматом — начальную или конечную? Если конечную, то ведь можно поставить любую дату, хоть 31.12.2029. Опишите проблему, я Алексею напишу, он не против доработать.
                  • Сергей Грошев
                    16 октября 2018, 17:43
                    Frend, а если попробовать вместо 18.10.2018 поставить 31.12.2018 и потом менять эту дату вручную раз в год?
  • Niktesla (бывш. Бабёр-Енот)
    27 сентября 2018, 00:27
    а я раньше бесплатной прогой пользовался для загрузки с финама… но чет год назад гдето в очередной раз она просто не смогла подключиться и нихрена с финама закачать… на том и усё.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн