Хранение данных

Хранение данных
Atom
11/4/2011
profts


Только начинаю разбираться с S#. Сразу возник вопрос - перечитал весь форум, ответа не нашел. Для стратегии нужно сохранять информацию из таблицы всех сделок, на основе нее производить определенные вычисления, результаты которых также необходимо сохранять в какой-то файл или таблицу, для дальнейшего их анализа и генерирования торговых сигналов. Раньше все было реализовано в Access. Вопрос в следующем - какой способ хранения информации более предпочтительней? И с точки зрения добавления новых данных и с точки зрения доступа и работы с ними. В документации к S# этому вопросу уделено очень мало. И Насколько понимаю StockSharp.Algo.Storages позволяет хранить только историю маркет данных, но не сохранять результаты вычисления над ними. помогите разобраться...


Tags:


Thanks:


1 2  >
Alexander

Avatar
Date: 11/4/2011
Reply


Sqlite наверное если нужно хранить за несколько дней

Thanks:

profts

Avatar
Date: 11/4/2011
Reply


Если честно,я перечитал всю документацию и в голове путанница... работая с Access была понятная цепочка: Quik - Access(по ODBC), анализ поступаемых данных и сохранение результатов вычислений в отдельную таблицу, отправка сделок в Quik. а тут никак не могу для себя выработать подобную цепочку. если sqlite, то с помощью чего производить экспорт Всех сделок в реальном времени и их обработки? стратегия не скальперская, но достаточно часто генерирует сделки, т.е. требуется постоянно производить анализ тиковых сделок за последние минут 10 торгов. Гидра, StockSharp.Algo.Storages или S# предоставляет другие способы?

из документации (самое начало) - "Для стратегий, которым необходима информация о стакане по инструменту, в S# предусмотрен метод ITrader.GetMarketDepth(Security). Данный метод возвращает MarketDepth, который позволяет получить группированно по типу котировки (биды и оффера), а так же удобную работу с лучшими котировками и спредом."... в каком виде и где хранятся эти данные или данный метод просто "достает" информацию из стакана, но не сохраняет ее? аналогично и с примерами экспорта таблиц по DDE...

Thanks:

Alexander

Avatar
Date: 11/4/2011
Reply


всё хранится в памяти. все сделки - ITrader.Trades стакан - MarketDepth

Далее вы вольны поступать с ним как душе заблагорассудится. если необходимо сохранять историю в какой-то базе данных, то используйте, к примеру sqlite.

Thanks: profts

profts

Avatar
Date: 11/4/2011
Reply


т.е. я могу брать информацию по сделкам из ITrader.Trades, производить анализ, а результаты анализа уже сохранять либо в отдельный файл или в БД? и как понимаю при каждом закрытии приложения память обнуляется и при следующем запуске ITrader.Trades заново получает данные из квика?

Thanks:

Alexander

Avatar
Date: 11/4/2011
Reply


profts: т.е. я могу брать информацию по сделкам из ITrader.Trades, производить анализ, а результаты анализа уже сохранять либо в отдельный файл или в БД? и как понимаю при каждом закрытии приложения память обнуляется и при следующем запуске ITrader.Trades заново получает данные из квика?

ITrader.Trades хранит только данные за текущую сессию вы можете вообще сделать враппер над Trade и хранить нужную вам информацию вместе со сделками. В общем C# позволяет всё что приходит на ум и многими способами :)

Thanks:

profts

Avatar
Date: 11/8/2011
Reply


помогите начинающему в C# ))

как правильнее будет построить запрос из ITrader.Trades... к примеру следующего типа: middle = средняя цена сделки, где инструмент RIZ1, направление buy, за последние 10 мин.

Thanks:

profts

Avatar
Date: 11/8/2011
Reply


сделал следующий запрос:

"this.Trader.NewTrades += trades => { this.GuiAsync(() => middle = this.Trader.Trades.Where(p => p.Security == _RIZ1).GetAveragePrice()); };"

а вот дальше зашел в тупик... как в него включить выборку по времени и направлению сделки?

Thanks:

Sergey Masyura

Avatar
Date: 11/8/2011
Reply


profts: сделал следующий запрос:

"this.Trader.NewTrades += trades => { this.GuiAsync(() => middle = this.Trader.Trades.Where(p => p.Security == _RIZ1).GetAveragePrice()); };"

а вот дальше зашел в тупик... как в него включить выборку по времени и направлению сделки?

Вы фильтруете сделки по инструменту, туда же добавить условия для времени и направления

Where(p => p.Security == _RIZ1 && p.Direction == OrdersDirections.Buy && p.Time > time)

Thanks: profts

profts

Avatar
Date: 11/9/2011
Reply


Спасибо, разобрался... немного не так оператор && использовал (

запускаю, все работает, показывает результат вычисления... НО! до тех пор пока загружается история сделок. как только подгружаются все сделки - приложение виснет и не откликается ((

Thanks:

profts

Avatar
Date: 11/10/2011
Reply


Понятно, что дело в потоках, но перечитав всю теорию по ним, а также раздел "Пользовательский интерфейс (GUI)" из документации так и не разобрался. видимо все новички сталкиваются с данной проблемой.

Из документации - "Основное ограничение визуального API под Windows состоит в том, что нельзя обращаться из другого потока к элементам окна." далее имеем следующий код:

this.Trader.NewTrades += trades => { middle = this.Trader.Trades.Where(p => p.Security == _RIZ1).GetAveragePrice()); this.GuiAsync(() => this.mid_price.Text = middle.ToString(); };

Насколько я понял, для события появления новой сделки создается новый поток, поэтому результат вычислений не выводится в текстбокс. Т.е. нужно исправить на

                           middle = this.Trader.Trades.Where(p => p.Security == _RIZ1).GetAveragePrice());
                           this.GuiAsync(() => this.mid_price.Text = middle.ToString();

Все работает!

Но я никак не могу понять почему не хочет работать такой вариант:

                           this.GuiAsync(() => middle = this.Trader.Trades.Where(p => p.Security == _RIZ1).GetAveragePrice());
                           this.GuiAsync(() => this.mid_price.Text = middle.ToString();

И еще такой вопрос... Если изначально использовать шлюз GuiTrader, данная проблема отпадает?

Thanks:
1 2  >

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

loading
clippy