Обсуждение статьи "SQLite: нативная работа с базами данных на SQL в MQL5"

 

Опубликована статья SQLite: нативная работа с базами данных на SQL в MQL5:

Разработка торговых стратегий связана с обработкой больших объемов данных. Теперь прямо в MQL5 вы можете работать с базами данных с помощью SQL-запросов на основе SQLite. Важным преимуществом данного движка является то, что вся база данных содержится в единственном файле, который находится на компьютере пользователя.

Отладка SQL-запросов в MetaEditor

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

  1. все хендлы запросов должны уничтожаться после использования с помощью DatabaseFinalize();
  2. база данных перед завершением работы должна закрываться с помощью DatabaseClose();
  3. результаты выполнения запросов должны проверяться;
  4. в случае ошибки необходимо сначала уничтожить запрос, а затем закрыть базу данных.

Самое сложное при этом — понять в чем состоит ошибка, если запрос не создался. MetaEditor позволяет открывать файлы *.sqlite и работать с ними с помощью SQL-запросов. Покажем как это делается на примере созданного файла company.sqlite:

1. Открываем в общей папке терминалов файл company.sqlite.

2.  После открытия базы данных мы видим в Навигаторе таблицу COMPANY  и дважды кликаем на ней.

3. В статусной строке автоматически создается запрос "SELECT * FROM COMPANY".

4. Запрос выполняется автоматически, его можно также выполнить по клавишу F9 или нажатием на кнопке Execute.

5. Смотрим результат выполнения запроса.

6. Если что-то пошло не так, то ошибки будут показаны в Журнале редактора.


С помощью SQL-запросов можно получать статистику по полям таблицы, например, сумму и среднее. Составим запросы, убедимся, что они работают.

Автор: MetaQuotes

 

Кто разобрался, прошу показать реализацию такой задачи.

  1. Есть два Терминала.
  2. Нужно котиры одного символа с Терминала1 перекидывать реал-тайм в соответствующий кастомный символ Терминала2.
 
Спасибо за статью и хорошие примеры полезного применения.
 
fxsaber:

Кто разобрался, прошу показать реализацию такой задачи.

  1. Есть два Терминала.
  2. Нужно котиры одного символа с Терминала1 перекидывать реал-тайм в соответствующий кастомный символ Терминала2.

В рамках этой задачи правильно ли понимаю, что в обоих случаях (при чтении базы на Терминале2 и записи в базу в Терминале1) нужно ее блокировать через механизм транзакций?


Как наиболее дешево определить, что база данных была обновлена?

 
fxsaber:

В рамках этой задачи правильно ли понимаю, что в обоих случаях (при чтении базы на Терминале2 и записи в базу в Терминале1) нужно ее блокировать через механизм транзакций?

Нет, это другая блокировка. Если база уже открыта в другой MQL5-программе или MetaEditor, то при попытках модификации вы получите ошибку 5124.

 
Rashid Umarov:

Нет, это другая блокировка. Если база уже открыта в другой MQL5-программе или MetaEditor, то при попытках модификации вы получите ошибку 5124.

Получается, что обмен данными имеет меньше возможностей, чем через файлы?

 
fxsaber:

Получается, что обмен данными имеет меньше возможностей, чем через файлы?

зависит от самой реализации БД 

с файлами всегда неудобно - последовательный доступ и те же проблемы при работе с одним файлом 

 
fxsaber:

Получается, что обмен данными имеет меньше возможностей, чем через файлы?

SQLite - это не серверная база данных, а встраиваемая. Поэтому она не может обеспечить совместное И одновременное использование из разных процессов.

Ее предназначение - для внутреннего использования в MQL5 и обмена(не одновремененного использования)/переноса с другими системами.

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


В рамках разных MQL5 экспертов, запущенных в одном терминале, можно совместно использовать одну и ту же базу данных.

 
Renat Fatkhullin:

SQLite - это не серверная база данных, а встраиваемая. Поэтому она не может обеспечить совместное И одновременное использование из разных процессов.

В рамках разных экспертов, запущенных в одном терминале, можно совместно использовать одну и ту же базу данных.

Теперь понятно, спасибо.

 

То, что описывается для мкл5, возможно использовать в мкл4?

Функции и работа с библиотеками совместимы? или это только для мкл5?

 
Chiripaha:

То, что описывается для мкл5, возможно использовать в мкл4?

Функции и работа с библиотеками совместимы? или это только для мкл5?

Родная поддержка SQLite только в MetaTrader 5 & MQL5.

Это не библиотека, а штатный функционал MQL5 с глубокой интеграцией во всю систему, включая агентов тестирования стратегий.

Причина обращения: