SDataExtract - API для работы с данными в хранилище S#.Data из внешних приложений

SDataExtract - API для работы с данными в хранилище S#.Data из внешних приложений
Atom
10/9/2016
JaguarFX


Составной частью алготрейлдинга является создание прибыльных торговых стратегий, дизайн и математическое содержание которых части бывает достаточно сложным. И прежде чем их кодить на S# важно исследовать лежащие в основе стратегии идеи на предмет их пригодности к реальной жизни. Для этого чаще всего используются внешние математические/статистические пакеты - Matlab, R и иные.
Однако существенной проблемой при реальных исследованиях, например проведении WalkForward тестирования, является оперативная подгрузка необходимых данных в такие пакеты по ценных бумагам российского рынка.
Для решения данной пробемы было создано простое API SDataExtract, которое позволяет работать с данными в хранилище S#.Data из внешних приложений, поддерживающих интеграцию с .NET
API расположено в общем репозитарии https://github.com/lebedevsrg/SDataExtract/



Thanks: Mikhail Sukhov


JaguarFX

Avatar
Date: 10/9/2016
Reply


В настоящее время API способна предоставить в внешнее приложение 2 вида данных: список инструментов в хранилище и торговые данные по сохраненным данным (HLOCV) за указаный пользователем промежуток времени и по указанному тайм-фрейму

1. Получение списка бумаг
Происходит путем первичного вызова функции GetList() и последующим считыванием массива строк из переменной SecArray. Далее полученный в внешнем приложении массив строк необходимо привести к внутреннему формату строковых массивов.

2. Получение торговых данных
Шаг-1: вначале необходимо задать 5 переменных:
Code - код инструмента из хралища S#.Data,
DType - состав необходимых данных
- 'ALL','A' - полный состав HLOCV
- 'CLOSE','C' - только значения Close
- 'OPEN','O' - только значения Open
- 'VOL','V' - только значения Volume
TimeFrame - тайм-фрейм запрашиваемых данных (должен соответствовать тому что есть в локальном хранилище)
From - указать на начало периода получения данных
To - указать на начало периода получения данных
Шаг2: затем необходимо вызвать функцию GetData(), которая как раз и считает данные в внутренний массив библиотеки.
Шаг3: на последнем шаге данные получаются путем считывания из объекта следуюдих двух переменных:
- dlDates - массив со значениями дата-время по каждой записи
- dlInfo - массив со значениями запрашиваемых торговых данных.


Thanks:

JaguarFX

Avatar
Date: 10/9/2016
Reply


Для тестирования решение содержит два дополнительных проекта:
WPFtest - проект для тестирования через простое приложение
MTBtest - пустой проект, содержащий в качестве ресурсов две m-функции для получения данных в среде Matlab
Thanks:

Mikhail Sukhov

Avatar
Date: 10/9/2016
Reply


Можно для непосвященных? А в чем трабла то работа с хранилищем из МатЛаб, R и Python?
Thanks:

JaguarFX

Avatar
Date: 10/9/2016
Reply


Могу сказать только за Matlab: прямая работа с компонентами S#.API там конечно возможна, но в реальности оболочка NET.invokeGenericMethod подглючивает и часто его не дает результатов при обращении к NET объектам, которые должны быть и которые нормально получаются при работе внутри проектов VisualStudio. Кстати, наткнулся на это еще в 2013 , 3 года прошло, но пробелема с NET.invokeGenericMethod так и остается))
Поэтому получается, что в конечном итоге проше завернуть всю работу с S#.API в промежуточную библиотеку, оставив на стороне пакета только вызов простейщих функций и конечную конвертацию из NET в свой внутренний формат.
Thanks:

Mikhail Sukhov

Avatar
Date: 10/9/2016
Reply


Можно сохранять историю в CSV формат. Тогда и обращение к АПИ не нужно.

Про оболочку знаю, у нас же сам MatLab построен на оболочке.
Thanks:

Rebelion

Avatar
Date: 10/10/2016
Reply


Я вставлю свои 3 копейки - вызовы S#.API могут быть реализованы только через rClr библиотеку, но насколько она адекватно пашет - хз. Прямых же методов работы с базой S#.Data просто нет, насколько я понимаю. Т.е. если мне нужно, я не могу подключиться к S#.Data базе через ODBC или напрямую.
Thanks:

Mikhail Sukhov

Avatar
Date: 10/11/2016
Reply


Гидра хранит данные как файлы. Обращаться через драйвера баз данных не нужно.
Thanks:

JaguarFX

Avatar
Date: 10/13/2016
Reply


Конечно пост Rebelion насчет ODBC у S#.Data смахивает на детский лепет, но как известно устами младенца глаголет истина - с "потребительской" точки зрения системе S#.Data не хватает полноценного COM/API для раздачи данных во внешние приложения как локально, так и как по сети. В иделе конечно был бы еще и собтственый ODBC драйвер)
При этом у S#.Data заявлен некий режим работы S#.DataServer но в чем он заключается нигде толком не описано, может быть сделаете на сайте статью по использоваию этого режима или хотя бы раздел в Справке?
Thanks:


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

loading
clippy