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

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


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




Спасибо: Mikhail Sukhov


JaguarFX

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


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

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

[u]2. Получение торговых данных [/u] Шаг-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. Кстати, наткнулся на это еще в [url=http://stocksharp.ru/forum/4203/smatlab---poluchenie-istoricheskih-dannyh/#m30616] 2013 [/url], 3 года прошло, но пробелема с NET.invokeGenericMethod так и остается)) Поэтому получается, что в конечном итоге проше завернуть всю работу с S#.API в промежуточную библиотеку, оставив на стороне пакета только вызов простейщих функций и конечную конвертацию из NET в свой внутренний формат.

Спасибо:

Mikhail Sukhov

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


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

Про оболочку знаю, у нас же сам [product]12[/product] построен на оболочке.

Спасибо:

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