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


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

Теги:


Спасибо:


1 2  >
Alexander

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


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

profts

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


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

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

Alexander

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


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

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

profts

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


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

Alexander

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


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


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

profts

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


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

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

Спасибо:

profts

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


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

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

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

Sergey Masyura

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


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)
Спасибо: profts

profts

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


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

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

profts

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


Понятно, что дело в потоках, но перечитав всю теорию по ним, а также раздел "Пользовательский интерфейс (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<T>, данная проблема отпадает?


Спасибо:
1 2  >

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

loading
clippy