← 返回

Гидра на CodePlex

Так как Гидра теперь выложена со своими исходника в систему CodePlex, предлагаю всем неравнодушным к проекту помочь в развитие.

Навскидку видны следующие таски:

  1. (Сделано) Научить ее работать с SQL Lite, чтобы не требовалась сложная установка с Sql Server 2008.
  2. Авто обновление закаченных данных и структуры базы при новой версии.
  3. (Сделано) Научить Гидру работать со свечками. Закачивать из внешних источников, автоматически их создавать из тиков и т.д. Нужно для тех инструментов, для который просто не найти тики. Со стороны тестера S# такое можно поддержать.
  4. Сделать источники для западных площадок (IQFeed, ESignal).
  5. (Сделано) Научить Гидру сохранять не только тики и стаканы, а так же волатильность, открытый интерес.
  6. (Сделано) Выводить ошибки через MonitorWindow (переделав предварительно все логи на ILogSource).

Желающих прощу высказываться в этом топике.

评论 (77)

登录创建账户, 登录或注册以发表评论

Serg
Serg

Насколько мне известно SQL Lite не умеет одновременно из нескольких процессов писать в базу данных(если гидре это необходимо). Хотя могу ошибаться. По мне так лучше postgresql. Но это сугубо мое личное мнение))

Mikhail Sukhov
Mikhail Sukhov 作者

Serg: Насколько мне известно SQL Lite не умеет одновременно из нескольких процессов писать в базу данных(если гидре это необходимо). Хотя могу ошибаться. По мне так лучше postgresql. Но это сугубо мое личное мнение))

SQL Lite не требует установки вообще. Это просто файл. И нет, конечно же не требуется, так как параллельно несколько Гидр работать не может, будут конфликты на логическом уровне. Которые, кстати, могут быть успешно устранены за счет SQL Lite.

Mikhail Sukhov
Mikhail Sukhov 作者

Добавил 6-ой такс.

Желающие в итоге есть?

prometey1982
prometey1982

Есть желающие. Студии 2010 Express хватит? Логин на кодеплексе совпадает с форумным.

Alexander
Alexander

prometey1982: Есть желающие. Студии 2010 Express хватит? Логин на кодеплексе совпадает с форумным.

Добавил в список девелоперов на codeplex

Serg
Serg

А что значит добавил 6-й таск? где его можно наблюдать?

prometey1982
prometey1982

Я так полагаю в первом посте 😀 :

  1. Выводить ошибки через MonitorWindow (переделал предварительно все логи на ILogSource). да, таск, от анлийского task - задача.
Mikhail Sukhov
Mikhail Sukhov 作者
  1. Выводить ошибки через MonitorWindow (переделал предварительно все логи на ILogSource).

Первоначально описался. Не переделал, а переделав. Тоесть, это еще нужно сделать в рамках таска.😉

prometey1982
prometey1982
  1. Выводить ошибки через MonitorWindow (переделал предварительно все логи на ILogSource).

Первоначально описался. Не переделал, а переделав. Тоесть, это еще нужно сделать в рамках таска.😉 Вообще все сообщения должны поступать в лог? И еще вопрос, окна наследовать от этого интерфейса? Они будут поставщиками сообщений?

Mikhail Sukhov
Mikhail Sukhov 作者

prometey1982: Вообще все сообщения должны поступать в лог? И еще вопрос, окна наследовать от этого интерфейса? Они будут поставщиками сообщений?

Все что пишется сейчас в файл неплохо бы писать в MonitorWindow. Про наследования окон не понял. Окна разве транслируют какую-то отладочную информацию?

Mikhail Sukhov
Mikhail Sukhov 作者

По SQLite есть желающие помочь? Можно сделать совместно. В первую очередь нужна Hydra.db3 (со всеми таблицами и констрейтами, что есть у текущей взрослой Гидры).

Serg
Serg

Не имею за плечами два мешка опыта, но готов попробовать с sqlite. Ткните только мне плиз пальцем поближе к тому месту откуда начать, а то с гидрой совсем дела не имел из-за MSSQL))

Alexander
Alexander

Serg: Не имею за плечами два мешка опыта, но готов попробовать с sqlite. Ткните только мне плиз пальцем поближе к тому месту откуда начать, а то с гидрой совсем дела не имел из-за MSSQL))

Sqlite .Net

Serg
Serg

Alexander Mukhanchikov: Sqlite .Net Эт да) а что мы с ним делаем то... переводим полную структуру базы Гидры?

Mikhail Sukhov
Mikhail Sukhov 作者

Serg:

Alexander Mukhanchikov: Sqlite .Net Эт да) а что мы с ним делаем то... переводим полную структуру базы Гидры?

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

prometey1982
prometey1982

То есть выводить в лог только exceptions, которые приходят сюда:


private void OnLog(IMarketDataSource source, string message)

или вот такие вещи тоже должны туда попадать:


MessageBox.Show(this, "Необходимо включить хотя бы один источник данных.", "Гидра", MessageBoxButton.OK, MessageBoxImage.Warning);

Mikhail Sukhov
Mikhail Sukhov 作者

prometey1982: То есть выводить в лог только exceptions, которые приходят сюда:

private void OnLog(IMarketDataSource source, string message)


Да, только это... Возможно, еще то, что в MainWindow (в конструкторе, где try catch сделан) и App.xaml.cs
Mikhail Sukhov
Mikhail Sukhov 作者

Закомментировал изменения в логах. Предлагаю использовать механизм shelves, потому что по частям коммитить код в рабочий репозитарий очень плохо. Или все сразу, или ничего. Что смотреть прогресс вот как раз шелвы и можно использовать. Плюс по ним можно обсуждать правильные и неправильные моменты.

prometey1982
prometey1982

Как эти shelves использовать? Тоже думал над этим моментом поэтому попытался сделать чтобы логи работали. Единственный момент, видимо опять же нужно сохранение логов в файлы.

Alexander
Alexander

prometey1982: Как эти shelves использовать? Тоже думал над этим моментом поэтому попытался сделать чтобы логи работали. Единственный момент, видимо опять же нужно сохранение логов в файлы.

shelve - полка. изменения кладутся просто в репозиторий на полку, при этом не портится основной бранч. оттуда их можно достать - unshelve. гугл по запроса. Shelve pending changes - есть в выпадающем меню. Unshelve - тоже (File->Source control->unshelve)

Вводите комментарий, выбираете файлы, кладёте. Когда надо - достаёте, продолжаете изменения.

Mikhail Sukhov
Mikhail Sukhov 作者

prometey1982: Как эти shelves использовать? Тоже думал над этим моментом поэтому попытался сделать чтобы логи работали. Единственный момент, видимо опять же нужно сохранение логов в файлы.

Шелв описал уже Александр, а про логи в файл - это естественно. Идея LogManager в том, что он умеет ретранслировать сообщения от своих источников LogManager.Sources (в данном случае, это все Гидра источники, главная форма, Worker) в свои слушатели. Вот случателями я предлагаю сделать FileLogListener и GuiLogListener. Последний вы как раз и успели создать в коде. Только зачем-то его создание перенесли в момент, когда нажимается кнопка Логи. А нужно в конструкторе. Потому что MonitorWindow будет получать логи начиная с того момента, как он был передан в GuiLogListener.

prometey1982
prometey1982

Понял, значит LogManager только транслятор сообщений. Смущает немного INotifyCollection или как оно на память точно не помню. Это было сделано для построения иерархии сообщений? Точнее вывода в иерархию? А есть ли коллекции реализующие данный интерфейс? Хотя наверно это все в документации есть. Хотя с другой стороны можно реализовать и без коллекции как таковой, динамически возвращать элементы по там же будет Worker и источники только, в смысле свою коллекцию сделать, тем более что из MainWindow надо эти вещи убрать в класс менеджер наверно, они ИМХО слабо с самой формой связаны. Из-за этого и пришлось вложенный класс логов сделать, дабы свойство Parent не перекрывалось.

Mikhail Sukhov
Mikhail Sukhov 作者

prometey1982: Понял, значит LogManager только транслятор сообщений. Смущает немного INotifyCollection или как оно на память точно не помню. Это было сделано для построения иерархии сообщений? Точнее вывода в иерархию? А есть ли коллекции реализующие данный интерфейс? Хотя наверно это все в документации есть. Хотя с другой стороны можно реализовать и без коллекции как таковой, динамически возвращать элементы по там же будет Worker и источники только, в смысле свою коллекцию сделать, тем более что из MainWindow надо эти вещи убрать в класс менеджер наверно, они ИМХО слабо с самой формой связаны. Из-за этого и пришлось вложенный класс логов сделать, дабы свойство Parent не перекрывалось.

Не совсем понял причину вложенного класса. Иерархия вложенности источников достигается за счет реализации интерфейса ILogSource, а не структуры кода.

prometey1982
prometey1982

Чтобы MainWindow наследующийся от FrameworkElement не перекрывал Parent объявленный как раз во FrameworkElement.

Mikhail Sukhov
Mikhail Sukhov 作者

prometey1982: Чтобы MainWindow наследующийся от FrameworkElement не перекрывал Parent объявленный как раз во FrameworkElement.

http://altyn.livejournal.com/340068.html

Mikhail Sukhov
Mikhail Sukhov 作者

Что-то все затихло.😢

AlexK2
AlexK2

прежде чем изобретать квадратное колесо, поискал в инете и нашел (есть задача скачаивать данные торгов с квика, сохранять и потом строить свечи), скачал исходники, собрал, настроил. предложения по мелочам - первым делом когда скачал гидру, то для удобства добавил менюшки, статус бары(чтоб видеть что происходит), создал пару таблиц для хранения данных торгов с ртс и квика, сейчас хочу MonitorWindow прикрутить и разобраться с многопоточностью(есть задачи, источники и инструменты, как их безопасно обрарабывать в разных потоках).

я новичок, просьба не пинать, не было времени чтобы прочитать всю документацию по сток шарпу, юзал ка кобычно дебагер :-) у меня такой вопрос. использование DDE - это полный пипец. тот же квик прекрасно сохраняет данные в базу данных. может уже есть какой-то интерфейс в стокшарпе чтоб сохранять данные в базу, строить по ним свечи и графически отбражать свечи, используя гидру?

Alexander
Alexander

AlexK2: прежде чем изобретать квадратное колесо, поискал в инете и нашел (есть задача скачаивать данные торгов с квика, сохранять и потом строить свечи), скачал исходники, собрал, настроил. предложения по мелочам - первым делом когда скачал гидру, то для удобства добавил менюшки, статус бары(чтоб видеть что происходит), создал пару таблиц для хранения данных торгов с ртс и квика, сейчас хочу MonitorWindow прикрутить и разобраться с многопоточностью(есть задачи, источники и инструменты, как их безопасно обрарабывать в разных потоках).

я новичок, просьба не пинать, не было времени чтобы прочитать всю документацию по сток шарпу, юзал ка кобычно дебагер :-) у меня такой вопрос. использование DDE - это полный пипец. тот же квик прекрасно сохраняет данные в базу данных. может уже есть какой-то интерфейс в стокшарпе чтоб сохранять данные в базу, строить по ним свечи и графически отбражать свечи, используя гидру?

Нет, по ODBC не выводим. Stock# - безбазовый клиент. Не знаю чем DDE "пипец", но работает как часы и довольно шустро для своих задач. Не медленнее чем было бы по ODBC.

Mikhail Sukhov
Mikhail Sukhov 作者

AlexK2: предложения по мелочам - первым делом когда скачал гидру, то для удобства добавил менюшки, статус бары(чтоб видеть что происходит), создал пару таблиц для хранения данных торгов с ртс и квика,

Следующая версия Гидры будет без привязки к SQL Server. Переносим на SQLite. Может сделаете такс с авто накатывания скрипты модификации базы при старте новой версии Гидры?

Что в меню? Статус бар уже есть - то что посередине. Плюс логи. Что-то еще выводите?

AlexK2: сейчас хочу MonitorWindow прикрутить и разобраться с многопоточностью(есть задачи, источники и инструменты, как их безопасно обрарабывать в разных потоках).

Да, было бы хорошо. Помощникам выделенный саппорт через скайп.😎 Могу рассказать про многопоточность (хотя пока не понимаю сути проблемы).

AlexK2: тот же квик прекрасно сохраняет данные в базу данных.

Как я пишу, от базы нужно избавляться. Тем более, построение свечек, отличных от ТФ, на SQL - это тот еще геморрой. Зачем, если на C# уже есть и будет быстрее на порядок. Ну и плюс - это не универсальное решение. Квик - это вчерашний день. В него вкладываться (в плане разработки) уже не эффективно.

AlexK2
AlexK2

как у Вас организована работа над проектом? (кто раздает задачи, кто тетсирует и т.д) может кинете мне какую-нибудь задачку? (может уже используется что-то типа jira? )

  1. Хранение данных. почему бы для хранения настроек программы и загруженных и обработанных данных не использовать какой-то общий интерфейс и реализовать хотя бы несколько базовых провайдеров (txt, xls, csv, MySql, Ms Sql). я бы написал провайдеры под субд и excel (на openxml, vsto или interop) а каждый пользователь подключит нужную ему имплементацию? (я бы вместо файлов использовал бы MySQL).

  2. Многозадачность. Мне нужно выполнять одновременно несколько задач - качать данные, обрабатывать их, сохранять в базу/файл и строить по ним свечи. А самое важное - во время закачки данных иметь возможность добавлять и удалять интсрументы.

  3. обработка ошибок. например в строке securities.ForEach(_trader.Trader.RegisterQuotes); у меня часто возникает ексепшн. в таком случае можно просто удалить плохой инструмент из списка и продолжить работу с другими.

  4. Все-таки для программ, которыми пользуются трейдеры/аналитики юзабилити имеет значение

  • это всякие тулбары, менюшки, статус бары, хоткеи настраиваемые, лог окна и т.д.
  1. насчет квика - к сожалению эта хрень достаточно востребована.
Mikhail Sukhov
Mikhail Sukhov 作者

Задачи раздают пользователи, тестируют они же😂 Баг трекер - http://stocksharp.codeplex.com/workitem/list/advanced Чем задача с авто накатыванием скрипта не подходит + прикрутить нормальный логгинг (сейчас не все сообщения в гидру идут от источников, потому что не используется подход ILogSource).

  1. Сейчас есть универсальный доступ на уровне БД. Тоесть, миграция с SqlServer будет не такая, что перестанет с ним работать, а будет поддерживаться еще и SQLite. Который станет режимом по умолчанию. Интерфейс сейчас единый - ITradingStorage + Ecng.Data. С не БД форматами сложнее. Честно говоря, даже сложно себе представить необходимость хранения метаданных в Экселе.

  2. С добавлением и удалением инструментов просто. Тут нужно переделать несколько интерфейсы для источников и Worker. А вот другие задачи... Я думаю они уже к Гидре не имеют отношения. Гидра - это качалка данных. Пусть она ей и остается.

  3. Это тоже просто. Заводите отдельную настройку в MarketDataSourceSettings и пусть ее источник нормально обрабатывает.

  4. Вопрос был в том, не зачем оно вообще существует, а что вы сделали с ними конкретно в рамках Гидры.

  5. Востребована. Но не незаменимая.

Graliur
Graliur

Добрый день! Сегодня установил S# 4.0.9, и гидру из codeplex'a, собрал, запустил. При попытке построить в гидре свечки из данных финама столкнулся с проблемой - сделки не появляются в окне "Сформировать свечки для ...". При прогоне через дебаггер выяснил - что метод _storage.GetTradeStorage(Security).ToDate как и _storage.GetTradeStorage(Security).FromDate для загруженного инструмента всегда выдает дату 01.01.0001. Во временную папку сделки скачиваются с нормальными датами. Что я делаю не так?

Alexander
Alexander

Нажмите потом "Показать свечки".

P.S. Сделал чтоб автоматом показывались по завершению.

Graliur
Graliur

При нажатии кнопки "Показать свечки" ничего не происходит.

Alexander
Alexander

Graliur: При нажатии кнопки "Показать свечки" ничего не происходит.

для какого инструмента? проделал у себя всё это - строит нормально

какие даты выставлены? сделки для каких дат скачены?

Graliur
Graliur

  • файл со сделками в формате финама:
Alexander
Alexander

Сделал с последней версии 4.0.10, с нуля загрузил аэрофлот, загрузил сделки с финама (у меня настройки такие же, только на месте временной директории и директории с данными пусто). далее нажал свечки, авто, и нажал создать свечки.

всё ок сработало, свечки загрузились.

скриншот прилагаю.

попробуйте у себя с 0 сделать тоже самое.

Graliur
Graliur

Вчера запустил на другом компьютере CoreQuad9450 Win7x64 - заработало, сейчас пытаюсь добиться подобного результата на нетбуке asus1215n Win7x64 (на процессоре intel D525 - 2 ядра но урезанные, 4Гиб оперативки). По ощущениям гидра работает на нем существенно медленнее(задержки более 10 секунд в работе интерфейса, после нажатия кнопок), а сегодня при попытке обновить инструменты выдала ошибку:

Помощник отладки управляемого кода "ContextSwitchDeadlock" обнаружил неполадку в "D:\PRG\StockSharp_4.1.0\Hydra\Hydra\bin\Debug\Hydra.vshost.exe". Дополнительные сведения: The CLR has been unable to transition from COM context 0x4543f8 to COM context 0x454568 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.

После чего, минуты через 3, выдала список инструментов.

В процессе работы возникли следующие вопросы:

  • есть ли возможность получить более подробное логирование?
  • как правильно обнулять базу и настройки программы?
  • планируется ли оптимизация скорости работы?
Alexander
Alexander

Graliur: В процессе работы возникли следующие вопросы:

  • есть ли возможность получить более подробное логирование?
  • как правильно обнулять базу и настройки программы?
  • планируется ли оптимизация скорости работы?
  1. Да, добавить логирование в работу гидры
  2. Удалить из папки Мои документы\StockSharp базу данных
  3. Какие конкретно операции вы хотите оптимизировать и каким образом?
Graliur
Graliur

1 Оно существует( и его можно включить )или его нужно написать? 3.1 Как минимум оптимизировать скорость работы пользовательского интерфейса (вынести исполнение в отдельный поток). 3.2 Ввести окна с сообщением об ожидании для процессов с временем задержки > 1 сек. 3.3 Дать возможность прерывать пользователю длительные процессы. 3.4 В идеале показать терминал с выводом сообщений состояния. 3.5 После визуализации состояний станут наглядно видны места повышенных задержек - далее уже поработать над конкретными модулями.

Alexander
Alexander

Graliur: 1 Оно существует( и его можно включить )или его нужно написать? 3.1 Как минимум оптимизировать скорость работы пользовательского интерфейса (вынести исполнение в отдельный поток). 3.2 Ввести окна с сообщением об ожидании для процессов с временем задержки > 1 сек. 3.3 Дать возможность прерывать пользователю длительные процессы. 3.4 В идеале показать терминал с выводом сообщений состояния. 3.5 После визуализации состояний станут наглядно видны места повышенных задержек - далее уже поработать над конкретными модулями.

Готовы заняться? Доступ на codeplex дадим

Graliur
Graliur

В свободное от работы время могу организовать посильную помощь ;)

Если с этим вопросов нет - то дальше в мейл Graliur собака мейлру

Alexander
Alexander

Graliur: В свободное от работы время могу организовать посильную помощь ;)

Если с этим вопросов нет - то дальше в мейл Graliur собака мейлру

Зачем mail? Надо зарегистрироваться на codeplex, мы добавляем к проекту с возможностью вносить изменения.

Вносите изменения в проект - кладёте в репозиторий, отписываетесь на форуме.

P.S. Добавил Graliur к проекту

Mikhail Sukhov
Mikhail Sukhov 作者

2Graliur. Временно заблокировал ваш аккаунт после того, как залили неработающее. Понимаю, что не со зла. Поэтому, дам опять доступ после того, как прочтете руководство пользования Visual Studio.

2All. Выкинул всех тех, кто не имеет активности более 60 дней.

Graliur
Graliur

Прошу прощения за нечаянный саботаж, обещаю больше не заливать не работающий код ). По поводу разбора Гидры - обнаружил, что у меня не открывается окно графика свечей из окна "Сформировать свечки для..." , при этом из окна "Найти сделки для..." все работает. Стал разбираться в коде - в CandlesCompressWindow.xaml.cs нет создания и вывода ChartWindow, который выполняет вывод графика в CandlesWindowsxaml.cs. Одна из мыслей - может это я его случайно удалил 😊, последнюю версию с кодплекса к себе залить не могу так как забанен.

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: Прошу прощения за нечаянный саботаж, обещаю больше не заливать не работающий код ). По поводу разбора Гидры - обнаружил, что у меня не открывается окно графика свечей из окна "Сформировать свечки для..." , при этом из окна "Найти сделки для..." все работает. Стал разбираться в коде - в CandlesCompressWindow.xaml.cs нет создания и вывода ChartWindow, который выполняет вывод графика в CandlesWindowsxaml.cs. Одна из мыслей - может это я его случайно удалил 😊, последнюю версию с кодплекса к себе залить не могу так как забанен.

Забанить мы не можем и, если бы могли, не делали. Качать теперь как все смертные, через http://stocksharp.codeplex.com/SourceControl/list/changesets После реабилитации себя в глазах общественности доступ вернем для более удобного способа скачивания.

Alexander
Alexander

Graliur: Прошу прощения за нечаянный саботаж, обещаю больше не заливать не работающий код ). По поводу разбора Гидры - обнаружил, что у меня не открывается окно графика свечей из окна "Сформировать свечки для..." , при этом из окна "Найти сделки для..." все работает. Стал разбираться в коде - в CandlesCompressWindow.xaml.cs нет создания и вывода ChartWindow, который выполняет вывод графика в CandlesWindowsxaml.cs. Одна из мыслей - может это я его случайно удалил 😊, последнюю версию с кодплекса к себе залить не могу так как забанен.

Добавил опять к проекту. Просьба перед внесением изменений отписаться на форуме. И изменения для начала класть в Shelve (File -> Source Control -> Shelve Pending changes...)

Graliur
Graliur

Заметил еще один интересный момент - во время отладки Гидры SQLite ругается в вывод VisualStudio: SQLite error (21): misuse at line 110832 of [a499ae3835]

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: Заметил еще один интересный момент - во время отладки Гидры SQLite ругается в вывод VisualStudio: SQLite error (21): misuse at line 110832 of [a499ae3835]

И Гугл по этому ничего вразумительного не сказал.

Graliur
Graliur

Подправил CandlesCompressWindow - добавил метод ShowChart() для отображения графика свечей, и его вызов в CandlesCompressWindow.UpdateCandlesList().

UPD: по Sqlite 21 нашел:

http://stackoverflow.com/questions/5285456/android-sqlite-error-code-21

UPDUPD: Еще про SQLite err 21:

http://translate.google.ru/translate?hl=ru&sl=en&tl=ru&u=http%3A%2F%2Fosdir.com%2Fml%2Fsqlite-users%2F2010-01%2Fmsg00151.html&anno=2

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: Подправил CandlesCompressWindow - добавил метод ShowChart() для отображения графика свечей, и его вызов в CandlesCompressWindow.UpdateCandlesList().

На КодеПлексе уже?

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: http://translate.google.ru/translate?hl=ru&sl=en&tl=ru&u=http%3A%2F%2Fosdir.com%2Fml%2Fsqlite-users%2F2010-01%2Fmsg00151.html&anno=2

Из переписки я так понял, что по умолчанию СКЛайт не тридсейф. И нужно его пересобрать. Мда.

Graliur
Graliur

Нет - пока на полку выложил UPD: Я некорректно сформулировал - создал pending changes. UPD: Делать Shelving на сервер? UPD: Сделал Shelve

Graliur
Graliur

http://www.sqlite.org/threadsafe.html

Видимо SQLite нужно специально собирать для многопоточной модели и при использовании для каждого потока открывать свое соединение.

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: http://www.sqlite.org/threadsafe.html

Видимо SQLite нужно специально собирать для многопоточной модели и при использовании для каждого потока открывать свое соединение.

Самое интересное, что в Гидре идет работа идет в одном потоке с HydraStorage в один момент времени. А просто при запуске такая ошибка проявляется?

Graliur
Graliur

А Smart сейчас в Гидре работать должен? А то он у меня плагин загружать не хочет - ругается:

Гидра 17:14:26.2232990 System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'StockSharp.Smart, Version=4.0.12.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. at StockSharp.Hydra.Smart.SmartTraderSource.ApplySettings(MarketDataSourceSettings settings, Boolean isNew) ...

Alexander
Alexander

А Smart сейчас в Гидре работать должен? А то он у меня плагин загружать не хочет - ругается:

Гидра 17:14:26.2232990 System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'StockSharp.Smart, Version=4.0.12.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. at StockSharp.Hydra.Smart.SmartTraderSource.ApplySettings(MarketDataSourceSettings settings, Boolean isNew) ...

Гидра не работает со смарткомом под 64х, т.к. смартком - 32х. Необходимо перекомпилировать не под AnyCPU, а под 32x.

В 4.0.13 будет фикс и мессадж бокс с ошибкой.

Graliur
Graliur

Первая ошибка 21 в SQLite вылезает при обращении к _storage.Exchanges.Count в конструкторе MainWindow:

Шаг с заходом: обход метода без символов "StockSharp.Algo.Storages.TradingStorage.Exchanges.get" Шаг с заходом: обход метода без символов "Ecng.Serialization.RelationManyList<StockSharp.BusinessEntities.Exchange>.Count.get" "Hydra.vshost.exe" (Управляемый (v4.0.30319)): Загружен "C:\Windows\Microsoft.Net\assembly\GAC_64\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll" "Hydra.vshost.exe" (Управляемый (v4.0.30319)): Загружен "C:\Windows\Microsoft.Net\assembly\GAC_64\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.Wrapper.dll" SQLite error (21): misuse at line 110832 of [a499ae3835]

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: Первая ошибка 21 в SQLite вылезает при обращении к _storage.Exchanges.Count в конструкторе MainWindow:

Хм, так точно 1 поток - GUI.

Mikhail Sukhov
Mikhail Sukhov 作者

Вы в С++ разбираетесь? http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki В чем отличие bundle от static bundle?

Graliur
Graliur

Отличие между static bundle и bundle релизами SQLite в типе линковки библиотеки The Visual C++ 2008 SP1/2010 runtime, например:

  • в sqlite-netFx35-static-binary-bundle-Win32-2008-1.0.77.0.zip:

The Visual C++ 2008 SP1 runtime for x86 is statically linked.

  • в sqlite-netFx35-setup-bundle-x86-2008-1.0.77.0.exe :

The Visual C++ 2008 SP1 runtime for x86 is included. В общем случае далеко не всегда можно использовать статическую и динамическую линковку для одного и того же проекта - это связано с тем, что линковщик может не понять какую динамическую или статическую библиотеку грузить в случае совпадающих имен переменных/функций/классов/пространств имен. Для Stock# я бы использовал вариант с динамической библиотекой без префикса static.

upd: корректнее будет сказать, что различные по версии библиотеки могут иметь одинаковые имена переменных/функций/классов/пространств имен. Так как линковщик C++ не проверяет версий и в основном отдает предпочтение динамическим библиотекам, то в проектах со статически прилинкованными библиотеками могут быть функции с одинаковыми названиями и разными функциональными частями.

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: upd: корректнее будет сказать, что различные по версии библиотеки могут иметь одинаковые имена переменных/функций/классов/пространств имен. Так как линковщик C++ не проверяет версий и в основном отдает предпочтение динамическим библиотекам, то в проектах со статически прилинкованными библиотеками могут быть функции с одинаковыми названиями и разными функциональными частями.

C++ Runtime всегда есть на машине или он когда то может отсутствовать?

Graliur
Graliur

Visual Studio runtime может отсутствовать, но его всегда можно бесплатно скачать с сайта Microsoft.

Graliur
Graliur

Сегодня весь вечер сражался со SmartCom'ом(v2.2) - Гидра инструменты из него получает, а котировки получить не может, ругается в вывод visual studio:

Первый этап обработки исключения типа "System.ComponentModel.Win32Exception" в приложении System.dll Первый этап обработки исключения типа "System.NullReferenceException" в приложении StockSharp.Smart.dll ... Первый этап обработки исключения типа "System.Runtime.InteropServices.COMException" в приложении StockSharp.Smart.dll ... Первый этап обработки исключения типа "System.NullReferenceException" в приложении StockSharp.Smart.dll Настройки плагина Smart:

Alexander
Alexander

Полный Stack Trace покажите. Система x64 или x86?

Если x64 - то дело в этом, смартком только под x86 работает.

Graliur
Graliur

Сегодня с помощью Reflector'а добрался до места первого появления ошибки SQLite 21. Ошибка появляется при 2-м вызове метода DatabaseProvider.CreateConnection сразу после выполнения первой строчки кода : > DbConnection connection = this.Factory.CreateConnection(); Распечатка стека:

Mikhail Sukhov
Mikhail Sukhov 作者

Сегодня с помощью Reflector'а добрался до места первого появления ошибки SQLite 21. Ошибка появляется при 2-м вызове метода DatabaseProvider.CreateConnection сразу после выполнения первой строчки кода : > DbConnection connection = this.Factory.CreateConnection(); Распечатка стека:

Стек трейс только подтверждает, что никакого другого потока нет. Могу дать исходники Ecng для продолжения инвестигейшена.

Graliur
Graliur

Получить котировки через SmartCOM так и не удалось. Откомпилировал все проекты Гидры под x86, получил список инструментов через SmartCom. При запуске импорта котировок программа вызывает исключение, описание исключения и stacktrace из логов :

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: Получить котировки через SmartCOM так и не удалось. Откомпилировал все проекты Гидры под x86, получил список инструментов через SmartCom. При запуске импорта котировок программа вызывает исключение, описание исключения и stacktrace из логов :

Все просто. SmartTrader сделан так, что при старте он грохает процесс со СмартКом. Это сделано из-за особенностей последнего к зависанию. Пути два, или выключить в Гидре эту особенность, или дать побольше прав Гидре.

Сообщение Oops, data manager call failed.. меня просто убило. По такому сообщению сразу можно определить возрастной уровень создателей.

upd. Посмотрел код SmartTrader.OnConnected

protected override void OnConnect()
{
	try
	{
		KillSmartComProcess();
	}
	catch (Exception ex)
	{
		RaiseProcessDataError(ex);
	}

	Wrapper.Connect();
}

Так что эта ошибка не должна влиять работоспособность. Почему падает дальше - СмартКом новый? Сервер боевой? Может там что выключили до 3-го?

Graliur
Graliur

Мне кажется c 21-ой ошибкой именно очередность операций соединения и запросов к базе данных играет роль. Так как SQLite выдает эту ошибку приблизительно на каждый второй вызов DatabaseProvider.CreateConnection. Исходники конечно помогли бы в дальнейших изысканиях - в Reflector'е приходится через кракозябры вместо осмысленных имен пробираться.

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: Мне кажется c 21-ой ошибкой именно очередность операций соединения и запросов к базе данных играет роль. Так как SQLite выдает эту ошибку приблизительно на каждый второй вызов DatabaseProvider.CreateConnection. Исходники конечно помогли бы в дальнейших изысканиях - в Reflector'е приходится через кракозябры вместо осмысленных имен пробираться.

Исходники обфусцированы только у СтокШарп и их я могу дать только за особые заслуги🙂 А вот ецнг с легкость. Могу подключить к TFS. Или по почте архивом. Как проще?

Graliur
Graliur

Лучше,наверное, к TFS - возможно еще чего подправить смогу ;) Ведь идеология с полками там тоже работает?

Graliur
Graliur

SmartCom версии 2.2, сервер демо, но вроде боеспособный - SmartX с ним работает. Сейчас попробовал запустить Гидру от Администратора - котировки опять через SmartCom не пошли, но уже без Ooops'ов в логах:

upd. Может действительно во времени дело, так как новые инструменты через SmartCom, судя по логам, он получает. С другой стороны запись > Smart 02:51:47.7616877 System.ArgumentException: Минимальный шаг цены 2 не соответствует самой цене 99,14.

Parameter name: minStepSize меня несколько удивляет - минимального шага цены 2 я нигде не указывал, видимо что-то не так срабатывает по умолчанию.

Mikhail Sukhov
Mikhail Sukhov 作者

Graliur: SmartCom версии 2.2, сервер демо, но вроде боеспособный - SmartX с ним работает.

Начнем с простого - с SampleSmart.

Graliur
Graliur

SampleSmart Подключается и получает список инструментов, портфели. Торговля сейчас не идет, поэтому оценить работоспособность остальных функций проблематично. При нажатии клавиши "Вид-Оффер" в окне Инструменты выпадает с ошибкой:

ссылка на картинку: http://saveimg.ru/show-image.php?id=43f734cdbb0ebfa6caf5f76f34b05127

UPD: Указанное поведение с ошибкой проявлялось только на инструменте "Аэрофлот", на Фьючерсе RTS-3.12 окно просто не выводится, но текущий стакан отображается. Скорее всего дело в неторговом времени.4-го числа еще раз проверю.

Mikhail Sukhov
Mikhail Sukhov 作者

На MessageBox работает Ctrl+C

tmt
tmt

У меня почему то изредка подвисает программа, а точнее загрузка стаканов останавливается (последн. изменение замирает и все.. стоит..) приходится останавливать и заного запускать, в чем может быть проблема (в интернете понятно.. но думаю это можно исключить)

Лог вот такой..

Smart 16:08:44.4053437 RIH2@RTS
Для RIH2@RTS загружено 11 cтаканов.
Smart 16:08:45.4194017 Получены новые инструменты:
Smart 16:08:45.4194017 RIH2@RTS
Для RIH2@RTS загружено 12 cтаканов.
Smart 16:08:46.4324596 Получены новые инструменты:
Smart 16:08:46.4324596 RIH2@RTS
Для RIH2@RTS загружено 9 cтаканов.
Smart 16:21:24.8958413 Останавливается.
Smart 16:21:24.9018416 Остановлен.
Smart 16:21:25.8208942 Инициализируется.
Smart 16:21:44.6429707 Получены новые инструменты:
Smart 16:21:44.6429707 RIH2@RTS
Для RIH2@RTS загружено 4 cтаканов.
Smart 16:21:45.8300386 Получены новые инструменты:
Smart 16:21:45.8310387 RIH2@RTS
Для RIH2@RTS загружено 1 сделок.
Smart 16:21:45.8880419 Получены новые инструменты:
Smart 16:21:45.8880419 RIH2@RTS
Для RIH2@RTS загружено 6 cтаканов.
Smart 16:21:47.6851447 Получены новые инструменты:
Smart 16:21:47.6851447 RIH2@RTS