В рамках разных MQL5 экспертов, запущенных в одном терминале, можно совместно использовать одну и ту же базу данных.
Проверил работу двух экспертов с одной базой данных в одном терминале. Работает без ошибок - оба эксперта пишут данные в один файл по таймеру в 2 секунды.
Файлы приложены, они отличаются только именем советника.
2020.02.1917:56:14.624 SecondExpertDataBase (GBPUSD,H1) 16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:16.627 SecondExpertDataBase (GBPUSD,H1) 16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:18.616 SecondExpertDataBase (GBPUSD,H1) 16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:20.630 SecondExpertDataBase (GBPUSD,H1) 16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:22.078 FirstExpertDataBase (USDCHF,H1) 16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:22.629 SecondExpertDataBase (GBPUSD,H1) 16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:24.071 FirstExpertDataBase (USDCHF,H1) 16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:24.619 SecondExpertDataBase (GBPUSD,H1) 16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:26.070 FirstExpertDataBase (USDCHF,H1) 16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:26.619 SecondExpertDataBase (GBPUSD,H1) 16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:28.079 FirstExpertDataBase (USDCHF,H1) 16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:28.625 SecondExpertDataBase (GBPUSD,H1) 16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:30.079 FirstExpertDataBase (USDCHF,H1) 16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:30.617 SecondExpertDataBase (GBPUSD,H1) 16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:32.069 FirstExpertDataBase (USDCHF,H1) 16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:32.627 SecondExpertDataBase (GBPUSD,H1) 16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:34.073 FirstExpertDataBase (USDCHF,H1) 16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:34.627 SecondExpertDataBase (GBPUSD,H1) 16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:36.616 SecondExpertDataBase (GBPUSD,H1) 16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:38.079 FirstExpertDataBase (USDCHF,H1) 16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:38.615 SecondExpertDataBase (GBPUSD,H1) 16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:40.072 FirstExpertDataBase (USDCHF,H1) 16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:40.618 SecondExpertDataBase (GBPUSD,H1) 16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:42.630 SecondExpertDataBase (GBPUSD,H1) 16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:44.617 SecondExpertDataBase (GBPUSD,H1) 16:56:44: added 1 record on GBPUSD to timer.sqlite
Database file is by default stored to . If you specify a full path as database filename, it's used. Terminal data path TERMINAL_DATA_PATH can be known by the following instruction. Open MT4 Open [File] menu Click "Open Data Folder" Sample Many sample scripts in under . Precautions Argument mess MT4 build 610 has a weird bug when dll function...
Кто разобрался, прошу показать реализацию такой задачи.
Есть два Терминала.
Нужно котиры одного символа с Терминала1 перекидывать реал-тайм в соответствующий кастомный символ Терминала2.
Есть другой нюанс - сохранение в БД последовательных данных с растущим значением, а не идущим вразброс, таких как котировки (с растущей датой) - ОЧЕНЬ дорогая операция. Дерево не сбалансировано, одна ветка растёт бесконечно, и движок регулярно ребалансирует дерево (это похуже, чем сборка мусора). Возможно, это касается только индексированной таблицы, я уже не помню. А может, за несколько лет, пока я не пользовался, это уже решили. Надо пробовать. Возможно, даже разработчики проанализируют, должно же это им быть интересно.
voidOnStart()
{
string filename="DOMdb.db";
int database=DatabaseOpen(filename, DATABASE_OPEN_READWRITE );
DatabaseImport(database, // хендл базы данных, полученный в DatabaseOpen"DOMtb", // имя таблицы для вставки данных"AllDOM.csv", // имя файла для импорта данных0, // комбинация флагов";", // разделитель данных 0, // сколько первых строк пропустить "//"// строка символов, которые определяют комментарии
);
}
2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5' has newer unsupported version, please update your client terminal
версия 5 билд 2323 последняя метаэдитор тот же и отладка не идет
В пятницу 21 февраля 2020 года будет выпущена обновленная версия платформы MetaTrader 5. Обновление содержит следующие изменения:
MetaEditor: Добавлена возможность удобной работы с SQLite базами данных.
В предыдущем обновлении платформы мы добавили поддержку работы с базами данных SQLite прямо из MQL5. Теперь основные функции стали доступны и через пользовательский интерфейс MetaEditor:
Создание и подключение к базам данных
Просмотр таблиц и быстрый запрос данных
Составление и выполнение SQL-запросов, откат изменений
Как это работает Для быстрого создания баз данных воспользуйтесь "Мастером MQL5". Здесь вы можете сразу создать первую таблицу и определить список ее полей.
Создав базу, вы перейдете в новый раздел "Навигатора". Из него происходит вся работа с данными.
В левой части отображаются таблицы базы данных. Для быстрого запроса первой 1 000 записей дважды нажмите на имя таблицы. Здесь же вы можете создавать и открывать другие базы, а также работать с таблицами.
В основной части редактора происходит работа с базой: заполняйте таблицу данными, делайте поиск и выборки, вводите SQL-запросы и т.д.
MetaEditor: Продолжается работа по добавлению поддержки мультиязычных проектов. В этой версии мы расширили функции для работы со скриптами на Python:
Теперь их можно удобно создавать через "Мастер MQL5", сразу включая в код зависимости от необходимых библиотек.
В навигаторе для них добавлены специальные иконки, в редакторе — подсветка синтаксиса.
При запуске скрипта через MetaEditor сообщения из консоли Python (stdout, stderr) выводятся в раздел "Ошибки".
Для запуска скрипта в редакторе нажмите "Компилировать":
Для работы с Python не забудьте указать путь к нему в разделе "Настройки / Компиляторы" в MetaEditor. А для работы с библиотекой MetaTrader 5 установите ее командой:
pip install MetaTrader 5
Подробнее об интеграции с Python читайте в документации.
MQL5: Полностью переработана интеграция с Python. Добавлено множество новых функций и изменено именование команд.
Новые команды Список поддерживаемых команд значительно расширен. Добавлены функции торговли и работы с торговой историей, получения информации о финансовых инструментах и текущем счете.
Запуск скриптов Python на графиках Теперь скрипты на Python можно запускать прямо на графиках в платформе, аналогично обычным MQL5-программам. В "Навигаторе" они будут отображаться специальными иконками.
Сообщения скрипта будут выводиться в раздел "Инструменты / Эксперты". Если в скрипте используется библиотека MetaTrader 5, то он сможет получать информацию об инструменте, счете и торговать.
Python-скрипты можно запускать на одном и том же графике параллельно с другими MQL5-скриптами и советниками. Для остановки скрипта, если его исполнение зациклено, просто удалите его с графика.
Дополнительная защита Чтобы дополнительно защитить ваши счета при использовании сторонних библиотек Python, в настройки терминала добавлена опция "Отключить автоматическую торговлю через внешний Python API".
Скриптам на Python будут разрешены торговые операции только при явном отключении этой опции.
MQL5: Значительно ускорен повторный запуск MQL5-программ и повторное создание пользовательских индикаторов из MQL5-программ. В некоторых случаях скорость повысилась в сотни раз.
MQL5: Добавлены функции для работы с базами данных:
long DatabaseImport(
int database, // хендл базы данных, полученный в DatabaseOpenconststring table, // имя таблицы для вставки данныхconststring filename, // имя файла для импорта данныхuint flags, // комбинация флаговconststring separator, // разделитель данных ulong skip_rows, // сколько первых строк пропустить conststring skip_comments // строка символов, которые определяют комментарии
);
DatabaseExport Экспортирует таблицу или результат выполнения SQL-запроса в CSV-файл. Файл создается в кодировке UTF-8.
long DatabaseExport(
int database, // хендл базы данных, полученный в DatabaseOpen conststring table_or_sql, // имя таблицы или SQL-запрос conststring filename, // имя CSV-файла для экспорта данных uint flags, // комбинация флагов conststring separator // разделитель данных в CSV-файле
);
DatabasePrint Печатает таблицу или результат выполнения SQL-запроса в журнал экспертов.
long DatabasePrint(
int database, // хендл базы данных, полученный в DatabaseOpenconststring table_or_sql, // таблица или SQL-запросuint flags // комбинация флагов
);
MQL5: Добавлена функция FileSelectDialog, которая вызывает системный диалог создания/открытия файла или папки.
int FileSelectDialog(
string caption, // заголовок окнаstring initial_dir, // начальная папкаstring filter, // фильтр расширенийuint flags, // комбинация флаговstring& filenames[], // массив с именами файловstring default_filename // имя файла по умолчанию
);
Новая функция позволит реализовать удобное взаимодействие пользователя с MQL5-программой.
MQL5: В перечисление ENUM_DEAL_PROPERTY_DOUBLE добавлено значение DEAL_FEE — оплата за проведение сделки. Фактически, это отдельный вид комиссии, которая может взиматься брокером.
Tester: Добавлена возможность задавать собственные настройки торгового счета при тестировании стратегий — торговые ограничения, настройки маржи и комиссии. Таким образом, вы получаете еще больше возможностей для моделирования различных торговых условий у брокеров.
Общие настройки В этом разделе вы можете задать максимальное количество открытых ордеров и позиций, которое можно одновременно иметь на счете. Также здесь можно настроить сессии, когда тестируемой программе будет запрещено торговать.
Маржа Здесь вы можете полностью контролировать, как будет резервироваться маржа и какая система учета позиций будет использована при тестировании:
Управление рисками — модель управления рисками: внебиржевые и биржевые, с неттингом и хеджингом. Подробная информация о них доступна в справке.
Уровень "Margin call" — уровень средств на счете, при достижении которого он переходит в состояние Margin call.
Уровень "Stop out" — уровень средств, при достижении которого на счете принудительно снимаются ордера и закрываются торговые позиции. Оба уровня можно указывать в процентах и в деньгах. В первом случае уровни определяются как значение показателя "Средства" на счету. При выборе опции "В процентах" уровни определяются как значение показателя "Уровень маржи" на счету (Средства/Маржа*100).
Нереализованная — в данном поле указывается, каким образом будет учитываться текущая незафиксированная прибыль/убыток в свободной марже:
Не использовать нереализованную прибыль/убыток — не учитывать открытые позиции при расчете.
Использовать нереализованную прибыль/убыток — использовать при расчете убыток и прибыль по открытым позициям.
Использовать нереализованную прибыль — использовать только прибыль.
Использовать нереализованный убыток — использовать только убыток.
Дневная фиксированная — в данном поле указывается, каким образом будет учитываться прибыль/убыток, зафиксированный трейдером в течение торгового дня, в свободной марже:
Использовать дневную фиксированную прибыль/убыток — учитывать прибыль и убыток, зафиксированные в течение торгового дня, в свободной марже.
Использовать дневной фиксированный убыток — учитывать только убыток, зафиксированный в течение торгового дня, в свободной марже. В течение дня накопленная прибыль фиксируется в отдельном поле счета ("Заблокировано"). По окончании торгового дня накопленная прибыль освобождается (обнуляется) и отражается на балансе счета (учитывается в свободной марже).
Освобождать накопленную прибыль в конце дня — данная опция доступна только при включении опции "Использовать дневной фиксированный убыток". Если она включена, то в конце торгового дня прибыль, накопленная в течение дня, будет освобождаться и записываться на баланс (а соответственно учитываться в свободной марже). В ином случае — не будет.
Комиссия В этом разделе вы полностью контролируете, как взимается комиссия со всех торговых операций.
Комиссии могут быть одноуровневыми и многоуровневыми, т.е. взиматься в одинаковом размере независимо от объема сделки/оборота или разниться в зависимости от их величины. Соответствующая информация выводится в спецификации.
Комиссии могут взиматься сразу при совершении сделки или в конце торгового дня/месяца.
Комиссии могут взиматься в зависимости от направления сделки: за вход, за выход или за оба типа операций.
Комиссии могут взиматься за каждый лот или за каждую сделку.
Комиссии могут взиматься в разных величинах: в деньгах, процентах или пунктах.
Tester: Оптимизирована и значительно ускорена работа в режиме "Сканирование рынка", когда производится несколько проходов тестирования по всем символам из "Обзора рынка".
Tester: При расчете прибыли в пипсах теперь учитывается размер сделки или позиции. Ранее расчет велся без учета объема — как для одного лота.
Tester: Улучшено управление графиком результатов оптимизации. При увеличении масштаба обычного графика оптимизации появилась возможность его прокручивать. Двойной клик на точке графика теперь выделяет соответствующий результат в таблице проходов.
MetaEditor: Добавлен показ файлов баз данных SQLite (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) в "Навигаторе".
MetaEditor: Исправлены ошибки при сохранении свойств проекта.
Обновлена документация.
Обновление будет доступно через систему LiveUpdate.
Renat Fatkhullin:
В рамках разных MQL5 экспертов, запущенных в одном терминале, можно совместно использовать одну и ту же базу данных.
Проверил работу двух экспертов с одной базой данных в одном терминале. Работает без ошибок - оба эксперта пишут данные в один файл по таймеру в 2 секунды.
Файлы приложены, они отличаются только именем советника.
Вот как выглядит база в MetaEditor
То, что описывается для мкл5, возможно использовать в мкл4?
В MQL4 можно работать с родной Sqlite3_32.dll через обёртку для MQL
Это обёртка именно для MQL, не путайте с SQLite3Wrapper.dll
Но сохранился ли он в сети, я не знаю, раньше пользовался.
UPD: https://github.com/Shmuma/sqlite3-mt4-wrapperКто разобрался, прошу показать реализацию такой задачи.
Есть другой нюанс - сохранение в БД последовательных данных с растущим значением, а не идущим вразброс, таких как котировки (с растущей датой) - ОЧЕНЬ дорогая операция. Дерево не сбалансировано, одна ветка растёт бесконечно, и движок регулярно ребалансирует дерево (это похуже, чем сборка мусора). Возможно, это касается только индексированной таблицы, я уже не помню. А может, за несколько лет, пока я не пользовался, это уже решили. Надо пробовать. Возможно, даже разработчики проанализируют, должно же это им быть интересно.
DatabaseImport()
простой скрипт
2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5' has newer unsupported version, please update your client terminal
версия 5 билд 2323 последняя метаэдитор тот же и отладка не идет
что-то не доделано?
Функция DatabaseImport еще не выпущена на публику.
Подождите релиза, пожалуйста.
Функция DatabaseImport еще не выпущена на публику.
Подождите релиза, пожалуйста.
версия 5 билд 2326 то же самое то есть ждать стабильной версии а когда?
версия 5 билд 2326 то же самое то есть ждать стабильной версии а когда?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 2340: Управление настройками счета в тестере и расширение интеграции с Python
MetaQuotes, 2020.02.20 14:55
В пятницу 21 февраля 2020 года будет выпущена обновленная версия платформы MetaTrader 5. Обновление содержит следующие изменения:
В предыдущем обновлении платформы мы добавили поддержку работы с базами данных SQLite прямо из MQL5. Теперь основные функции стали доступны и через пользовательский интерфейс MetaEditor:
Как это работает
Для быстрого создания баз данных воспользуйтесь "Мастером MQL5". Здесь вы можете сразу создать первую таблицу и определить список ее полей.
Создав базу, вы перейдете в новый раздел "Навигатора". Из него происходит вся работа с данными.
В левой части отображаются таблицы базы данных. Для быстрого запроса первой 1 000 записей дважды нажмите на имя таблицы. Здесь же вы можете создавать и открывать другие базы, а также работать с таблицами.
В основной части редактора происходит работа с базой: заполняйте таблицу данными, делайте поиск и выборки, вводите SQL-запросы и т.д.

Более подробно о работе с базами данных в MetaTrader 5 читайте в статье "SQLite: нативная работа с базами данных на SQL в MQL5".Для запуска скрипта в редакторе нажмите "Компилировать":
Для работы с Python не забудьте указать путь к нему в разделе "Настройки / Компиляторы" в MetaEditor. А для работы с библиотекой MetaTrader 5 установите ее командой:
Новое именование команд
Имеющиеся команды были переименованы:
MT5Shutdown -> shutdown
MT5TerminalInfo -> terminal_info
MT5Version -> version
MT5CopyRatesFrom -> copy_rates_from
MT5CopyRatesFromPos -> copy_rates_from_pos
MT5CopyRatesRange -> copy_rates_range
MT5CopyTicksFrom -> copy_ticks_from
MT5CopyTicksRange -> copy_tick_range
Новые команды
Список поддерживаемых команд значительно расширен. Добавлены функции торговли и работы с торговой историей, получения информации о финансовых инструментах и текущем счете.
Запуск скриптов Python на графиках
Теперь скрипты на Python можно запускать прямо на графиках в платформе, аналогично обычным MQL5-программам. В "Навигаторе" они будут отображаться специальными иконками.
Сообщения скрипта будут выводиться в раздел "Инструменты / Эксперты". Если в скрипте используется библиотека MetaTrader 5, то он сможет получать информацию об инструменте, счете и торговать.
Python-скрипты можно запускать на одном и том же графике параллельно с другими MQL5-скриптами и советниками. Для остановки скрипта, если его исполнение зациклено, просто удалите его с графика.
Дополнительная защита
Чтобы дополнительно защитить ваши счета при использовании сторонних библиотек Python, в настройки терминала добавлена опция "Отключить автоматическую торговлю через внешний Python API".
Скриптам на Python будут разрешены торговые операции только при явном отключении этой опции.
DatabaseImport
Импортирует в таблицу данные из файла.
DatabaseExport
Экспортирует таблицу или результат выполнения SQL-запроса в CSV-файл. Файл создается в кодировке UTF-8.
DatabasePrint
Печатает таблицу или результат выполнения SQL-запроса в журнал экспертов.
Новая функция позволит реализовать удобное взаимодействие пользователя с MQL5-программой.
Общие настройки
В этом разделе вы можете задать максимальное количество открытых ордеров и позиций, которое можно одновременно иметь на счете. Также здесь можно настроить сессии, когда тестируемой программе будет запрещено торговать.
Маржа
Здесь вы можете полностью контролировать, как будет резервироваться маржа и какая система учета позиций будет использована при тестировании:
Комиссия
В этом разделе вы полностью контролируете, как взимается комиссия со всех торговых операций.
Обновление будет доступно через систему LiveUpdate.
стабильная версия 5 билд 2340 то же самое DatabaseImport на выполнение выдает
2020.02.22 14:01:42.338 MQL5 'DOMcopy.ex5' has newer unsupported version, please update your client terminal
Здравствуйте!
Я пытался создать подключение к базе данных в индикаторе, у меня почему то не получилось этого.
Почему нигде не написано, в каких программах можно использовать базы данных?