Работа с базами данных

Функции для работы с базами данных используют популярный и простой в работе движок SQLite. Удобством данного движка является то, что вся база данных находится в единственном файле на жестком диске на компьютере пользователя.

С помощью этих функций легко создавать таблицы, добавлять в них данные, производить модификации и делать выборки простыми SQL-запросами:

  • получение торговой истории и котировок из любых форматов,
  • сохранение результатов оптимизации и тестирования,
  • подготовка и обмен данными с другими пакетами анализа,
  • хранение настроек и состояния MQL5-программ.

При этом в запросах можно использовать статистические и математические функции.

Функции для работы с базами позволяют заменить наиболее повторяющиеся операции по обработке больших массивов данных на SQL-запросы, что позволит во многих случаях вместо программирования сложных циклов и сравнений использовать вызовы DatabaseExecute/DatabasePrepare. Для удобного получения результатов запроса в готовую структуру используйте функцию DatabaseReadBind, которая позволит прочитать сразу все поля записи за один вызов.

Для ускорения операций чтения, записи и модификации базу данных можно открывать/создавать в оперативной памяти с флагом DATABASE_OPEN_MEMORY, но при этом такая база будет доступна только данной конкретной программе и ни с кем не разделяется. При работе с базами данных, которые находятся на жестком диске, необходимо обертывать массовые вставки/изменения данных в транзакции с помощью DatabaseTransactionBegin/DatabaseTransactionCommit/DatabaseTransactionRollback, что дает ускорение в сотни раз.

Для того чтобы начать работать с данными функциями, достаточно прочитать статью SQLite: нативная работа с базами данных на SQL в MQL5.

Функция

Действие

DatabaseOpen

Открывает или создаёт базу данных в указанном файле

DatabaseClose

Закрывает базу данных

DatabaseImport

Импортирует в таблицу данные из файла

DatabaseExport

Экспортирует таблицу или результат выполнения SQL-запроса в CSV-файл

DatabasePrint

Печатает таблицу или результат выполнения SQL-запроса в журнал экспертов

DatabaseTableExists

Проверяет наличие таблицы в базе данных

DatabaseExecute

Исполняет запрос к указанной базе данных

DatabasePrepare

Создает хендл запроса, который затем может быть исполнен с помощью DatabaseRead()

DatabaseReset

Сбрасывает запрос в начальное состояние, как после вызова DatabasePrepare()

DatabaseBind

Устанавливает значение параметра в запросе

DatabaseBindArray

Устанавливает массив в качестве значения параметра

DatabaseRead

Выполняет переход к следующей записи в результате запроса

DatabaseReadBind

Выполняет переход к следующей записи и читает из неё данные в структуру

DatabaseFinalize

Удаляет запрос, созданный в DatabasePrepare()

DatabaseTransactionBegin

Начинает выполнение транзакции

DatabaseTransactionCommit

Завершает выполнение транзакции

DatabaseTransactionRollback

Выполняет откат транзакций

DatabaseColumnsCount

Получает количество полей в запросе

DatabaseColumnName

Получает имя поля по номеру

DatabaseColumnType

Получает тип поля по номеру

DatabaseColumnSize

Получает размер поля в байтах

DatabaseColumnText

Получает из текущей записи значение поля в виде строки

DatabaseColumnInteger

Получает из текущей записи значение типа int

DatabaseColumnLong

Получает из текущей записи значение типа long

DatabaseColumnDouble

Получает из текущей записи значение типа double

DatabaseColumnBlob

Получает из текущей записи значение поля в виде массива

Статистические функции:

  • mode — мода
  • median — медиана (50-й перцентиль)
  • percentile_25 — 25-й перцентиль
  • percentile_75 — 75-й перцентиль
  • percentile_90 — 90-й перцентиль
  • percentile_95 — 95-й перцентиль
  • percentile_99 — 99-й перцентиль
  • stddev или stddev_samp — стандартное отклонение выборки
  • stddev_pop — стандартное отклонение популяции
  • variance or var_samp — дисперсия выборки
  • var_pop — дисперсия популяции

Математические функции

  • acos(X) – арккосинус в радианах
  • acosh(X) – арккосинус гиперболический
  • asin(X) – арксинус в радианах
  • asinh(X) – арксинус гиперболический
  • atan(X) – арктангенс в радианах
  • atan2(X,Y) – арктангенс в радианах отношения X/Y
  • atanh(X) – арктангенс гиперболический
  • ceil(X) – округление до целого числа вверх
  • ceiling(X) – округление до целого числа вверх
  • cos(X) – косинус угла в радианах
  • cosh(X) – косинус гиперболический
  • degrees(X) – конвертирует радианы в угол
  • exp(X) – экспонента
  • floor(X) – округление до целого числа вниз
  • ln(X) – натуральный логарифм
  • log(B,X) – логарифм по указанному основанию
  • log(X) – десятичный логарифм
  • log10(X) – десятичный логарифм
  • log2(X) – логарифм по основанию 2
  • mod(X,Y) – остаток от деления
  • pi() – приближенное число Pi
  • pow(X,Y) – степень по заданному основанию
  • power(X,Y) –  степень по заданному основанию
  • radians(X) –  конвертирует угол в радианы
  • sin(X) – синус угла в радианах
  • sinh(X) – синус гиперболический
  • sqrt(X) – квадратный корень
  • tan(X) – тангенс угла в радианах
  • tanh(X) – тангенс гиперболический
  • trunc(X) – усекает до целого числа, наиболее близкого к 0

Пример:

select
  count(*) as book_count,
  cast(avg(parentas integeras mean,
  cast(median(parentas integeras median,
  mode(parentas mode,
  percentile_90(parentas p90,
  percentile_95(parentas p95,
  percentile_99(parentas p99
from moz_bookmarks;