Так как Гидра теперь выложена со своими исходника в систему CodePlex, предлагаю всем неравнодушным к проекту помочь в развитие.
Навскидку видны следующие таски:
- (Сделано) Научить ее работать с SQL Lite, чтобы не требовалась сложная установка с Sql Server 2008.
- Авто обновление закаченных данных и структуры базы при новой версии.
- (Сделано) Научить Гидру работать со свечками. Закачивать из внешних источников, автоматически их создавать из тиков и т.д. Нужно для тех инструментов, для который просто не найти тики. Со стороны тестера S# такое можно поддержать.
- Сделать источники для западных площадок (IQFeed, ESignal).
- (Сделано) Научить Гидру сохранять не только тики и стаканы, а так же волатильность, открытый интерес.
- (Сделано) Выводить ошибки через MonitorWindow (переделав предварительно все логи на ILogSource).
Желающих прощу высказываться в этом топике.
Comentarios (77)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Насколько мне известно SQL Lite не умеет одновременно из нескольких процессов писать в базу данных(если гидре это необходимо). Хотя могу ошибаться. По мне так лучше postgresql. Но это сугубо мое личное мнение))
SQL Lite не требует установки вообще. Это просто файл. И нет, конечно же не требуется, так как параллельно несколько Гидр работать не может, будут конфликты на логическом уровне. Которые, кстати, могут быть успешно устранены за счет SQL Lite.
Добавил 6-ой такс.
Желающие в итоге есть?
Есть желающие. Студии 2010 Express хватит? Логин на кодеплексе совпадает с форумным.
Добавил в список девелоперов на codeplex
А что значит добавил 6-й таск? где его можно наблюдать?
Я так полагаю в первом посте 😀 :
Первоначально описался. Не переделал, а переделав. Тоесть, это еще нужно сделать в рамках таска.😉
Первоначально описался. Не переделал, а переделав. Тоесть, это еще нужно сделать в рамках таска.😉 Вообще все сообщения должны поступать в лог? И еще вопрос, окна наследовать от этого интерфейса? Они будут поставщиками сообщений?
Все что пишется сейчас в файл неплохо бы писать в MonitorWindow. Про наследования окон не понял. Окна разве транслируют какую-то отладочную информацию?
По SQLite есть желающие помочь? Можно сделать совместно. В первую очередь нужна Hydra.db3 (со всеми таблицами и констрейтами, что есть у текущей взрослой Гидры).
Не имею за плечами два мешка опыта, но готов попробовать с sqlite. Ткните только мне плиз пальцем поближе к тому месту откуда начать, а то с гидрой совсем дела не имел из-за MSSQL))
Sqlite .Net
Да, первый этап - это создать базу db3, чтобы с ней можно было бы работать из кода. Второй этап - это работа как раз из кода. Тут я планирую помочь.
То есть выводить в лог только exceptions, которые приходят сюда:
или вот такие вещи тоже должны туда попадать:
private void OnLog(IMarketDataSource source, string message)
Закомментировал изменения в логах. Предлагаю использовать механизм shelves, потому что по частям коммитить код в рабочий репозитарий очень плохо. Или все сразу, или ничего. Что смотреть прогресс вот как раз шелвы и можно использовать. Плюс по ним можно обсуждать правильные и неправильные моменты.
Как эти shelves использовать? Тоже думал над этим моментом поэтому попытался сделать чтобы логи работали. Единственный момент, видимо опять же нужно сохранение логов в файлы.
shelve - полка. изменения кладутся просто в репозиторий на полку, при этом не портится основной бранч. оттуда их можно достать - unshelve. гугл по запроса. Shelve pending changes - есть в выпадающем меню. Unshelve - тоже (File->Source control->unshelve)
Вводите комментарий, выбираете файлы, кладёте. Когда надо - достаёте, продолжаете изменения.
Шелв описал уже Александр, а про логи в файл - это естественно. Идея LogManager в том, что он умеет ретранслировать сообщения от своих источников LogManager.Sources (в данном случае, это все Гидра источники, главная форма, Worker) в свои слушатели. Вот случателями я предлагаю сделать FileLogListener и GuiLogListener. Последний вы как раз и успели создать в коде. Только зачем-то его создание перенесли в момент, когда нажимается кнопка Логи. А нужно в конструкторе. Потому что MonitorWindow будет получать логи начиная с того момента, как он был передан в GuiLogListener.
Понял, значит LogManager только транслятор сообщений. Смущает немного INotifyCollection или как оно на память точно не помню. Это было сделано для построения иерархии сообщений? Точнее вывода в иерархию? А есть ли коллекции реализующие данный интерфейс? Хотя наверно это все в документации есть. Хотя с другой стороны можно реализовать и без коллекции как таковой, динамически возвращать элементы по там же будет Worker и источники только, в смысле свою коллекцию сделать, тем более что из MainWindow надо эти вещи убрать в класс менеджер наверно, они ИМХО слабо с самой формой связаны. Из-за этого и пришлось вложенный класс логов сделать, дабы свойство Parent не перекрывалось.
Не совсем понял причину вложенного класса. Иерархия вложенности источников достигается за счет реализации интерфейса ILogSource, а не структуры кода.
Чтобы MainWindow наследующийся от FrameworkElement не перекрывал Parent объявленный как раз во FrameworkElement.
http://altyn.livejournal.com/340068.html
Что-то все затихло.😢
прежде чем изобретать квадратное колесо, поискал в инете и нашел (есть задача скачаивать данные торгов с квика, сохранять и потом строить свечи), скачал исходники, собрал, настроил. предложения по мелочам - первым делом когда скачал гидру, то для удобства добавил менюшки, статус бары(чтоб видеть что происходит), создал пару таблиц для хранения данных торгов с ртс и квика, сейчас хочу MonitorWindow прикрутить и разобраться с многопоточностью(есть задачи, источники и инструменты, как их безопасно обрарабывать в разных потоках).
я новичок, просьба не пинать, не было времени чтобы прочитать всю документацию по сток шарпу, юзал ка кобычно дебагер :-) у меня такой вопрос. использование DDE - это полный пипец. тот же квик прекрасно сохраняет данные в базу данных. может уже есть какой-то интерфейс в стокшарпе чтоб сохранять данные в базу, строить по ним свечи и графически отбражать свечи, используя гидру?
Нет, по ODBC не выводим. Stock# - безбазовый клиент. Не знаю чем DDE "пипец", но работает как часы и довольно шустро для своих задач. Не медленнее чем было бы по ODBC.
Следующая версия Гидры будет без привязки к SQL Server. Переносим на SQLite. Может сделаете такс с авто накатывания скрипты модификации базы при старте новой версии Гидры?
Что в меню? Статус бар уже есть - то что посередине. Плюс логи. Что-то еще выводите?
Да, было бы хорошо. Помощникам выделенный саппорт через скайп.😎 Могу рассказать про многопоточность (хотя пока не понимаю сути проблемы).
Как я пишу, от базы нужно избавляться. Тем более, построение свечек, отличных от ТФ, на SQL - это тот еще геморрой. Зачем, если на C# уже есть и будет быстрее на порядок. Ну и плюс - это не универсальное решение. Квик - это вчерашний день. В него вкладываться (в плане разработки) уже не эффективно.
как у Вас организована работа над проектом? (кто раздает задачи, кто тетсирует и т.д) может кинете мне какую-нибудь задачку? (может уже используется что-то типа jira? )
Хранение данных. почему бы для хранения настроек программы и загруженных и обработанных данных не использовать какой-то общий интерфейс и реализовать хотя бы несколько базовых провайдеров (txt, xls, csv, MySql, Ms Sql). я бы написал провайдеры под субд и excel (на openxml, vsto или interop) а каждый пользователь подключит нужную ему имплементацию? (я бы вместо файлов использовал бы MySQL).
Многозадачность. Мне нужно выполнять одновременно несколько задач - качать данные, обрабатывать их, сохранять в базу/файл и строить по ним свечи. А самое важное - во время закачки данных иметь возможность добавлять и удалять интсрументы.
обработка ошибок. например в строке securities.ForEach(_trader.Trader.RegisterQuotes); у меня часто возникает ексепшн. в таком случае можно просто удалить плохой инструмент из списка и продолжить работу с другими.
Все-таки для программ, которыми пользуются трейдеры/аналитики юзабилити имеет значение
Задачи раздают пользователи, тестируют они же😂 Баг трекер - http://stocksharp.codeplex.com/workitem/list/advanced Чем задача с авто накатыванием скрипта не подходит + прикрутить нормальный логгинг (сейчас не все сообщения в гидру идут от источников, потому что не используется подход ILogSource).
Сейчас есть универсальный доступ на уровне БД. Тоесть, миграция с SqlServer будет не такая, что перестанет с ним работать, а будет поддерживаться еще и SQLite. Который станет режимом по умолчанию. Интерфейс сейчас единый - ITradingStorage + Ecng.Data. С не БД форматами сложнее. Честно говоря, даже сложно себе представить необходимость хранения метаданных в Экселе.
С добавлением и удалением инструментов просто. Тут нужно переделать несколько интерфейсы для источников и Worker. А вот другие задачи... Я думаю они уже к Гидре не имеют отношения. Гидра - это качалка данных. Пусть она ей и остается.
Это тоже просто. Заводите отдельную настройку в MarketDataSourceSettings и пусть ее источник нормально обрабатывает.
Вопрос был в том, не зачем оно вообще существует, а что вы сделали с ними конкретно в рамках Гидры.
Востребована. Но не незаменимая.
Добрый день! Сегодня установил S# 4.0.9, и гидру из codeplex'a, собрал, запустил. При попытке построить в гидре свечки из данных финама столкнулся с проблемой - сделки не появляются в окне "Сформировать свечки для ...". При прогоне через дебаггер выяснил - что метод _storage.GetTradeStorage(Security).ToDate как и _storage.GetTradeStorage(Security).FromDate для загруженного инструмента всегда выдает дату 01.01.0001. Во временную папку сделки скачиваются с нормальными датами. Что я делаю не так?
Нажмите потом "Показать свечки".
P.S. Сделал чтоб автоматом показывались по завершению.
При нажатии кнопки "Показать свечки" ничего не происходит.
для какого инструмента? проделал у себя всё это - строит нормально
какие даты выставлены? сделки для каких дат скачены?
Сделал с последней версии 4.0.10, с нуля загрузил аэрофлот, загрузил сделки с финама (у меня настройки такие же, только на месте временной директории и директории с данными пусто). далее нажал свечки, авто, и нажал создать свечки.
всё ок сработало, свечки загрузились.
скриншот прилагаю.
попробуйте у себя с 0 сделать тоже самое.
Вчера запустил на другом компьютере CoreQuad9450 Win7x64 - заработало, сейчас пытаюсь добиться подобного результата на нетбуке asus1215n Win7x64 (на процессоре intel D525 - 2 ядра но урезанные, 4Гиб оперативки). По ощущениям гидра работает на нем существенно медленнее(задержки более 10 секунд в работе интерфейса, после нажатия кнопок), а сегодня при попытке обновить инструменты выдала ошибку:
После чего, минуты через 3, выдала список инструментов.
В процессе работы возникли следующие вопросы:
1 Оно существует( и его можно включить )или его нужно написать? 3.1 Как минимум оптимизировать скорость работы пользовательского интерфейса (вынести исполнение в отдельный поток). 3.2 Ввести окна с сообщением об ожидании для процессов с временем задержки > 1 сек. 3.3 Дать возможность прерывать пользователю длительные процессы. 3.4 В идеале показать терминал с выводом сообщений состояния. 3.5 После визуализации состояний станут наглядно видны места повышенных задержек - далее уже поработать над конкретными модулями.
Готовы заняться? Доступ на codeplex дадим
В свободное от работы время могу организовать посильную помощь ;)
Если с этим вопросов нет - то дальше в мейл Graliur собака мейлру
Зачем mail? Надо зарегистрироваться на codeplex, мы добавляем к проекту с возможностью вносить изменения.
Вносите изменения в проект - кладёте в репозиторий, отписываетесь на форуме.
P.S. Добавил Graliur к проекту
2Graliur. Временно заблокировал ваш аккаунт после того, как залили неработающее. Понимаю, что не со зла. Поэтому, дам опять доступ после того, как прочтете руководство пользования Visual Studio.
2All. Выкинул всех тех, кто не имеет активности более 60 дней.
Прошу прощения за нечаянный саботаж, обещаю больше не заливать не работающий код ). По поводу разбора Гидры - обнаружил, что у меня не открывается окно графика свечей из окна "Сформировать свечки для..." , при этом из окна "Найти сделки для..." все работает. Стал разбираться в коде - в CandlesCompressWindow.xaml.cs нет создания и вывода ChartWindow, который выполняет вывод графика в CandlesWindowsxaml.cs. Одна из мыслей - может это я его случайно удалил 😊, последнюю версию с кодплекса к себе залить не могу так как забанен.
Забанить мы не можем и, если бы могли, не делали. Качать теперь как все смертные, через http://stocksharp.codeplex.com/SourceControl/list/changesets После реабилитации себя в глазах общественности доступ вернем для более удобного способа скачивания.
Добавил опять к проекту. Просьба перед внесением изменений отписаться на форуме. И изменения для начала класть в Shelve (File -> Source Control -> Shelve Pending changes...)
Заметил еще один интересный момент - во время отладки Гидры SQLite ругается в вывод VisualStudio: SQLite error (21): misuse at line 110832 of [a499ae3835]
И Гугл по этому ничего вразумительного не сказал.
Подправил 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
На КодеПлексе уже?
Из переписки я так понял, что по умолчанию СКЛайт не тридсейф. И нужно его пересобрать. Мда.
Нет - пока на полку выложил UPD: Я некорректно сформулировал - создал pending changes. UPD: Делать Shelving на сервер? UPD: Сделал Shelve
http://www.sqlite.org/threadsafe.html
Видимо SQLite нужно специально собирать для многопоточной модели и при использовании для каждого потока открывать свое соединение.
Самое интересное, что в Гидре идет работа идет в одном потоке с HydraStorage в один момент времени. А просто при запуске такая ошибка проявляется?
А Smart сейчас в Гидре работать должен? А то он у меня плагин загружать не хочет - ругается:
А Smart сейчас в Гидре работать должен? А то он у меня плагин загружать не хочет - ругается:
Гидра не работает со смарткомом под 64х, т.к. смартком - 32х. Необходимо перекомпилировать не под AnyCPU, а под 32x.
В 4.0.13 будет фикс и мессадж бокс с ошибкой.
Первая ошибка 21 в SQLite вылезает при обращении к _storage.Exchanges.Count в конструкторе MainWindow:
Хм, так точно 1 поток - GUI.
Вы в С++ разбираетесь? http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki В чем отличие bundle от static bundle?
Отличие между static bundle и bundle релизами SQLite в типе линковки библиотеки The Visual C++ 2008 SP1/2010 runtime, например:
upd: корректнее будет сказать, что различные по версии библиотеки могут иметь одинаковые имена переменных/функций/классов/пространств имен. Так как линковщик C++ не проверяет версий и в основном отдает предпочтение динамическим библиотекам, то в проектах со статически прилинкованными библиотеками могут быть функции с одинаковыми названиями и разными функциональными частями.
C++ Runtime всегда есть на машине или он когда то может отсутствовать?
Visual Studio runtime может отсутствовать, но его всегда можно бесплатно скачать с сайта Microsoft.
Сегодня весь вечер сражался со SmartCom'ом(v2.2) - Гидра инструменты из него получает, а котировки получить не может, ругается в вывод visual studio:
Полный Stack Trace покажите. Система x64 или x86?
Если x64 - то дело в этом, смартком только под x86 работает.
Сегодня с помощью Reflector'а добрался до места первого появления ошибки SQLite 21. Ошибка появляется при 2-м вызове метода DatabaseProvider.CreateConnection сразу после выполнения первой строчки кода : > DbConnection connection = this.Factory.CreateConnection(); Распечатка стека:
Сегодня с помощью Reflector'а добрался до места первого появления ошибки SQLite 21. Ошибка появляется при 2-м вызове метода DatabaseProvider.CreateConnection сразу после выполнения первой строчки кода : > DbConnection connection = this.Factory.CreateConnection(); Распечатка стека:
Стек трейс только подтверждает, что никакого другого потока нет. Могу дать исходники Ecng для продолжения инвестигейшена.
Получить котировки через SmartCOM так и не удалось. Откомпилировал все проекты Гидры под x86, получил список инструментов через SmartCom. При запуске импорта котировок программа вызывает исключение, описание исключения и stacktrace из логов :
Все просто. SmartTrader сделан так, что при старте он грохает процесс со СмартКом. Это сделано из-за особенностей последнего к зависанию. Пути два, или выключить в Гидре эту особенность, или дать побольше прав Гидре.
Сообщение Oops, data manager call failed.. меня просто убило. По такому сообщению сразу можно определить возрастной уровень создателей.
upd. Посмотрел код SmartTrader.OnConnected
Так что эта ошибка не должна влиять работоспособность. Почему падает дальше - СмартКом новый? Сервер боевой? Может там что выключили до 3-го?
Мне кажется c 21-ой ошибкой именно очередность операций соединения и запросов к базе данных играет роль. Так как SQLite выдает эту ошибку приблизительно на каждый второй вызов DatabaseProvider.CreateConnection. Исходники конечно помогли бы в дальнейших изысканиях - в Reflector'е приходится через кракозябры вместо осмысленных имен пробираться.
Исходники обфусцированы только у СтокШарп и их я могу дать только за особые заслуги🙂 А вот ецнг с легкость. Могу подключить к TFS. Или по почте архивом. Как проще?
Лучше,наверное, к TFS - возможно еще чего подправить смогу ;) Ведь идеология с полками там тоже работает?
SmartCom версии 2.2, сервер демо, но вроде боеспособный - SmartX с ним работает. Сейчас попробовал запустить Гидру от Администратора - котировки опять через SmartCom не пошли, но уже без Ooops'ов в логах:
upd. Может действительно во времени дело, так как новые инструменты через SmartCom, судя по логам, он получает. С другой стороны запись > Smart 02:51:47.7616877 System.ArgumentException: Минимальный шаг цены 2 не соответствует самой цене 99,14.
Начнем с простого - с SampleSmart.
SampleSmart Подключается и получает список инструментов, портфели. Торговля сейчас не идет, поэтому оценить работоспособность остальных функций проблематично. При нажатии клавиши "Вид-Оффер" в окне Инструменты выпадает с ошибкой:
ссылка на картинку: http://saveimg.ru/show-image.php?id=43f734cdbb0ebfa6caf5f76f34b05127
UPD: Указанное поведение с ошибкой проявлялось только на инструменте "Аэрофлот", на Фьючерсе RTS-3.12 окно просто не выводится, но текущий стакан отображается. Скорее всего дело в неторговом времени.4-го числа еще раз проверю.
На MessageBox работает Ctrl+C
У меня почему то изредка подвисает программа, а точнее загрузка стаканов останавливается (последн. изменение замирает и все.. стоит..) приходится останавливать и заного запускать, в чем может быть проблема (в интернете понятно.. но думаю это можно исключить)
Лог вот такой..