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


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


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



Спасибо: Mikhail Sukhov


JaguarFX

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


В настоящее время 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 - массив со значениями запрашиваемых торговых данных.


Спасибо:

JaguarFX

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


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

Mikhail Sukhov

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


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

JaguarFX

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


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

Mikhail Sukhov

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


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

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

Rebelion

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


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

Mikhail Sukhov

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


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

JaguarFX

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


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


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

loading
clippy