
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вчера вдруг увлекся БД SQLite. Для нее есть уже готовый интерфейс к Python - https://docs.python.org/3.6/library/sqlite3.html.
В итоге, до поздней ночи читал документацию и на саму БД и на Python-интерфейс. Чтобы выяснить некоторые непонятки, попутно сварганил для SQLite пару-тройку совершенно бесполезных программ. В общем, очарован. Зря раньше пренебрегал. Что впервые узнал, что БД SQLite можно штатно организовать в памяти - одной командой: conn = sqlite3.connect(":memory:") - это в Python. Это все, что нужно. Далее в несколько запросов, создаем таблицы, и работаем.
Раньше для тех-же целей использовал MS SQL Server или BD Access, а БД в памяти организовывал через таблицы DataTable NET библиотек. А здесь, одна ДЛЛ весом 1,5 MB и одна команда,))) и делать ничего не надо.
Теперь, для чего это надо? Это не надо, а необходимо. Пока ваша система что-то там считает, с биржи приходят новые данные - стакан, сделки, котировки, и вы их пихаете в БД в памяти. И когда системе требуются новые данные, они уже все здесь, под рукой, в памяти. Бери и пользуйся. Не надо ждать никаких тиков и прочего. Кроме того, когда происходит некое событие, вы всегда можете отвлечься от расчетов и его обработать. Опять-таки, вся информация уже у вас, в памяти. Безусловно для этого нужны и события пользователя и потоки, но это уже нигде не проблема.
Ну, а дальше, информация из БД памяти в фоновом режиме сохраняется в основную базу.
Да, и еще, SQLite, хоть и маленькая, но поддерживает многопользовательский доступ чтение/запись. А вообще, почти все как у взрослых - есть некоторые ограничения, но, в большинстве случаев, они или несущественны или вообще не мешают.
Начали заниматься БД SQLite, неплохо сделать что-то полезное. Начнем с импорта в БД файла CSV.
Вот кусок самого файла, всего около 55 тысяч строк.
Импорт CSV файла в Python мы описывали ранее, останавливаться не будем. В результате, у нас есть строка заголовка CSV - title и строки данных - data.
Теперь сама программа Python:
Смотрим на таблицу SBER в программе SQLiteStudio:
Да, все удовольствие 3-4 с с момента запуска программы, включая открытие и чтение CSV файла. Кстати, размер файла БД меньше аналогичного CSV. Вся БД - 4.3 МБ, размер CSV - 5.2 МБ
Ну, остальное делается так-же.))
Продолжим нашу мою непопулярную у аборигенов тему.
На форуме регулярно появляются темы о чтении данных из CSV-фалов. Только за последнюю неделю их уже было две - требовалось прочитать последние-предпоследние пару строк.
Прошлый раз мы записали данные CSV-файла в БД, сегодня мы рассмотрим решение задачи чтения строк из БД.
В нашей таблице в БД около 55 тысяч строк. Попробуем прочитать даже не последнюю, а какую-нибудь 27568-ю. Для этого напишем SQL запрос и отправим его в БД:
Все. Получили результат:
Время выполнения ~0.003004 c
Усложним задачу. Найдем строки, где Close=22730.0000000
Все тоже самое, только сам запрос выглядит по другому.
И результат:
Вернулось строк 20. Время выполнения ~0.0625c
Ну, и наконец определим самую высокую цену в столбце (поле) CLOSE
B ответ:
Ну, и время исполнения -0.035 с
Как видите, все оч. просто и быстро. На месте потребителей CSV-файлов, я бы задумался, отчего-бы под МТ не написать ДЛЛ с 5-6-ю функциями и использовать БД вместо CSV-файлов.
PS Файл CSV, на котором проводились экзерсисы с БД в архиве, прикрепленном несколько постов назад.М-да, нелегка жизнь MQL4-5 разработчиков. Погуглил, есть ли решения для подключения МТ к SQLite. Да, такие решения есть - статья на MQL5.com - SQL И MQL5: РАБОТАЕМ С БАЗОЙ ДАННЫХ SQLITE непосредственно от MQ, и несколько материалов сторонних разработчиков. Имхо, все это излишне переусложнено, и программы, в отличие от аналогичных на Python, простотой не отличаются.
На самом деле, чтобы работать с SQLite на первое время достаточно импортировать в MQL всего 7-8 высокоуровневых функций SQLite. Остальное, по большей части, если и понадобится, то в отдаленном будущем. Такую работу С++ программист может выполнить, в худшем случае, за пару дней. Но можно попробовать и готовые решения.
PS Посмотрел более внимательно статью SQL И MQL5: РАБОТАЕМ С БАЗОЙ ДАННЫХ SQLITE. Вообще, может что и получится. Там только х86 ДЛЛ используется для приготовления х64 DLL под МТ. Статья, все-таки, 2014 г. Но, если не ошибаюсь уже есть и х64 ДЛЛ SQLite. Можно попробовать скомпилировать с ней.
Yuriy Asaulenko:
М-да, нелегка жизнь MQL4-5 разработчиков. .....Имхо, все это излишне переусложнено, и программы, в отличие от аналогичных на Python, простотой не отличаются.
имхо у Вас на Питоне проблем не меньше: нужно историю формировать, нужно рисовалку баров делать, нужны технические индикаторы...про тестер и торговлю я бы тоже подумал....
ну как говорится: на вкус и цвет все фломастеры разные!
имхо у Вас на Питоне проблем не меньше: нужно историю формировать, нужно рисовалку баров делать, нужны технические индикаторы...про тестер и торговлю я бы тоже подумал....
ну как говорится: на вкус и цвет все фломастеры разные!
История не вопрос и ее подкачка тоже. Технические индикаторы - не вопрос, тем более у меня только свои индикаторы. Ну, а стандартные, если понадобятся, - там несложные алгоритмы.
Рисовалка баров в Python имеется. Вот нужна ли она для автосистемы? - я-ж не терминал пишу.)
Да и не первая такая система, раньше были и на VB Excel, и на С++, и на C#. Собственно, Python выбран из-за обширности библиотек и нежелания плодить зоопарк из смеси разных языков и интерфейсов, чтобы достучаться до этих библиотек. Кроме того, Python позволяет заниматься моделированием - собственно, для того и предназначен, и это оч важно при разработке системы. Скажем, прямой конкурент МатЛабу.)
Вопрос.
Можно ли через ссылку обмениваться mql- ким и питоновским канвасом?
В C++ это делается легко, а вот в питоне - не знаю.
Вопрос.
Можно ли через ссылку обмениваться mql- ким и питоновским канвасом?
В C++ это делается легко, а вот в питоне - не знаю.
Не знаю.
Благая весть.))) -Бета-версия платформы MetaTrader 5 build 1910: Свободное перетаскивание графиков и .Net библиотеки в MQL5 . Теперь, когда бета-версия станет рабочей, для соединения с SQLite ( как, впрочем, и многими другими библиотеками) не надо ничего писать. Не нужны будут никакие DLL.
Под SQLite Net -библиотеки уже есть - http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
Теперь (точнее, чуть позднее, после появления рабочей версии МТ) об общении МТ с торговой системой через обмен файлами можно забыть, и общаться через БД. Ранее, в этой теме, показано, что это оч. быстро и для большинства систем более чем достаточно.
Благая весть.))) -Бета-версия платформы MetaTrader 5 build 1910: Свободное перетаскивание графиков и .Net библиотеки в MQL5 . Теперь, когда бета-версия станет рабочей, для соединения с SQLite ( как, впрочем, и многими другими библиотеками) не надо ничего писать. Не нужны будут никакие DLL.
Под SQLite Net -библиотеки уже есть - http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
Теперь (точнее, чуть позднее, после появления рабочей версии МТ) об общении МТ с торговой системой через обмен файлами можно забыть, и общаться через БД. Ранее, в этой теме, показано, что это оч. быстро и для большинства систем более чем достаточно.
Вы неправильно поняли новость.
Поддержка .NET библиотек не означает, что контроль безопасности над DLL отключен. Контроль за DLL всегда работал и будет работать.
Мы лишь позволили загружать .NET без танцев с бубном. Вернее, всю грязную и нетривиальную работу по связи с виртуальной машиной .NET мы взяли на себя и скрыли все неудобства.
А вот поддержку SQlite мы давно планировали добавить в MQL5. Скорее всего, сделаем.