Блог им. Din_Don

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

    • 25 сентября 2018, 11:55
    • |
    • Friend
  • Еще
Была у меня мысль, и сейчас она есть, сделать автообновление истории по нашим акциям и фьючерсам. Так как у самого времени на это не хватало, на разбирательство что и как — то перепоручил это дело знакомому. Вот об этом и рассказ. Может кто то уже сталкивался или делал это. Может подскажите. 
Стиль автора сохранен. 

            Добрый день! Эта история о том, как я работал с продуктом 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. Прошу откликнуться кто что знает, может кто то реализовал уже данный процесс. 

★3
31 комментарий
Еще ни разу не встречал того, кто был бы доволен их продуктами) 
avatar
Friendly Deep Space, я в принципе доволен. Не скажу, что там все без шерохов, но работает.

HYDRA их сложная до чертиков. Так же мучался с настройками акций вместо фьючерсов. Саппорт платный, покупаю по месячно когда требуется решать вопросы. Просто писать на форум бесполезно, его никто не мониторит.
avatar
Sergey, Решили вопрос? 
avatar
Frend, да
avatar
Sergey, Sergey, глюкавый смарт лаб. Комментарии через раз работают.

Решение было скачать ночную сборку и удалить предыдущие настройки. Перезакачал базу с Финам, все пошло нормально. Мне объяснили, что иногда Финам меняет идентификаторы у секций рынков, поэтому такое случается.
avatar
Sergey, Спасибо, проверим 
avatar
порой удивляет способность людей создать себе проблем на ровном месте. За время потраченное на бодание с гидрой можно было уже раза три написать свою собственную утилиту подкачки с финама
avatar
wrmngr, Единственно разумное мнение по озвученной теме..)
avatar
wrmngr, я не могу, человек который пробовал тоже не может. вы можете? 
avatar
Frend, что не можете? написать утилиту? ну так закажите у программера.
Я вот не программер, но написал такую в 2007 году за полдня (120 строк на visual basic), до сих пор работает исправно. Правда не автомат, обновление по кнопке,  но мне и не надо
avatar
wrmngr, может поделитесь ? 
avatar
Frend, в ЛС отпишу
avatar
wrmngr, Спасибо, попробуем 
avatar
Было дело. Хотел сэкономить себе время, выкачав с МФД историю опционов (тики) российского рынка с помощью Гидры (свое лень было писать — уже ведь есть готовое решение) — ага, сэкономил… Чего-то там не получалось загрузить список тикеров автоматом, написал на их форуме — тишина, неделю не было ответа. В итоге таки удалось добиться, чтобы Гидра получила список тикеров (около 100 тысяч), жму загрузку — а в ответ она что-то начинает усиленно с процем работать, а в соответствующей папке для исторических данных ни одного файла так и не было загружено. Подождал полчаса — все так же что-то усиленно вычисляла (черт его знает, что там так  долго можно делать, даже если сортировку строк...). Убил процесс. Повторно попробовал еще пару раз. Снес, сел писать свое… заняло не так и много времени, нервы целее  будут
avatar
Владислав К, печально, не хочется соображать что то свое. но видимо если решение не найдется, то выхода не останется
avatar
Тоже бегал по этим граблям, та же задача — сделать автообновление для TSLaba. Тоже начал с Гидры. Ваш автор ещё одну проблему не написал — в конце файла Гидра ставит символ перевода строки, а ТСЛабу это не нравится.

avatar
ti-m, Решили задачу?  
avatar
Frend, нет, не решил. Попробовал еще OSA Engine Алексея Вана, там тоже есть своя Гидра, TSLab понимает их файл, но почему-то не обновляется в реальном времени.
avatar
ti-m, Спасибо, посмотрю 
avatar
ti-m, Спасибо, помогла. Автообновление сработало. По крайней мере сегодня. 
avatar
Frend, мне не удалось. Пытался настроить автообновление минуток для ри — не получилось:
1. В Data нет SmartCom-а, пришлось использовать Финам, как поставщик данных.
2. Исторические данные Финам дает нормально, а с реалом — проблемы. Минутные свечки формируются неверно. Открывал параллельно поток данных от SmartCom-а и сравнивал с тем, что дает Data — идут расхождения. Возможно, причина в том, что в Data  свечки формируются из тиков, а Финам дает тики с игрового сервера, не знаю. 

Вообщем, эту идею оставил. Сейчас пытаюсь перенести скрипт, написанный на АПИ ТСЛаба, на ОСА. Ничего не имею против ТСЛаба, но 4 тыс. в месяц платить, по-моему, слишком дорого. Когда только разрабатывал, то писал им на техподдержку, спрашивал, тогда было оправдано. Но когда уже все отладил, то дорого. Опционами я не пользуюсь, версия 2.0 не нужна.
avatar
ti-m, Реальные данные я не получаю, нет необходимости. Исторические раз в неделю вполне хватает. Вручную неудобно так как много инструментов. Ту же сотню акций вручную не закачаешь. Поэтому акции проверяю раз в пол года. А надо учащать. Да и по срочке. Те же 10 инструментов не совсем удобно.Спасибо за наводку 
avatar
ti-m, Столкнулся с проблемой автообновления. Там дата не меняется автоматом, правиться легко. В txt файле настроек прописал новую. и все ок. Перезапустил программу, подхватила новую дату, докачала. 
avatar
Frend, не думали уходить с ТСЛаба? В ОСА, например, реально событийная модель, в отличие от ТСЛаба, где всего одно событие — формирование свечи.
avatar
ti-m, Нет, меня лаба всем устраивает. Да и по надежности парковать сотню+ агентов как то привычнее в ней уже.
avatar
Frend, по поводу даты — не понял. Какую дату надо менять автоматом — начальную или конечную? Если конечную, то ведь можно поставить любую дату, хоть 31.12.2029. Опишите проблему, я Алексею напишу, он не против доработать.
avatar
ti-m, в файле Settings.txt 

Off
False
False
False
False
False
False
False
True
False
False
False
False
False
False
False
False
False
Finam
01.01.2008 0:00:00
18.10.2018 0:00:00
Min1
BR
BR*22460@ED*21989@Eu*22010@GAZP*17451@GOLD*19898@MGNT*390848@MIX*81408@MOEX*390846@RTS*17455@SBRF*17456@Si*19899@
Tick
5
True
False
такой вид имеет, и в нем есть дата, вот эта дата и берется. Не пробовал поставить сильно далекую. Запрос делается  на +2 дня от текущей, её и ставил. Она не меняется автоматом

avatar
Frend, а если попробовать вместо 18.10.2018 поставить 31.12.2018 и потом менять эту дату вручную раз в год?
avatar
ti-m, Попробую в следующий раз 
avatar
а я раньше бесплатной прогой пользовался для загрузки с финама… но чет год назад гдето в очередной раз она просто не смогла подключиться и нихрена с финама закачать… на том и усё.
Бабёр-Енот, Жаль
avatar

теги блога Friend

....все тэги



UPDONW
Новый дизайн