Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Библиотека MySQL для MQL4 с исправленным управлением памятью - библиотека для MetaTrader 4

Просмотров:
2758
Рейтинг:
(22)
Опубликован:
2015.12.21 15:49
Обновлен:
2016.11.22 07:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Оригинальный файл библиотеки mql4-mysql.mqh находится здесь: https://www.mql5.com/en/code/11114 . Выражаю благодарность соавторам за совместную работу (продукт разработан Russell, в дальнейшем доработан vedroid and lukins / Sergey).

Оригинальная библиотека mql4-mysql.mqh library имела серьезные проблемы с управлением памятью. О них рассказывали отдельные пользователи (вы можете прочитать об этом здесь: https://www.mql5.com/en/forum/28941).

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

Тестирование доработанной библиотеки показало, что потребление памяти остается стабильным. Тесты заняли многие часы и включали тысячи подключений/чтения данных с минимальным увеличением использованной памяти (менее 10 MB). При предыдущих тестах оригинальная библиотека не справлялась с более чем несколькими прочтениями из базы данных и работала всего несколько минут, прежде чем "вылететь". Тест был проведен с советником, который запрашивает данные по каждому тику.

ВАЖНО: прочитайте оригинальное описание библиотеки!

int     dbConnectId = 0;

Задается как локальная переменная, а не как глобальная. Если вы используете библиотеку с советником или индикатором, локальное определение обязательно. Это сделано для того, чтобы при каждой итерации переменная адреса памяти была различной (автоматически заменяется в MetaTrader4) и высвобождалась после завершения цикла.

Вы должны открывать отдельное соединение для каждой специфической задачи. Сохранение открытого соединения для нескольких различных задач не рекомендуется. Пример: я хочу прочитать несколько строк из базы данных и сохранить их в таблицу. Эта процедура прописывается в функции. Когда функция вызвана, соединение устанавливается. Когда данные прочитаны, соединение закрывается, и после этого функция возвращается к данным. Соединение устанавливается на небольшой отрезок времени.

Не забывайте закрывать соединение функцией deinit_MySQL. Если этого не делать, количество соединений растет, и со временем дойдет до максимального значения, рекомендуемого для серверного запуска вашей базы данных. Сервер "упадет".

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

Веб-сервер с базой MySQL (бесплатное ПО) находится здесь:

Если вам необходима простая база данных, сервер и инструменты управления (бесплатные и удобные для пользователей):https://www.apachefriends.org/index.html

Как установить защиту базы данных, можно прочитать здесь: http://robsnotebook.com/xampp-builtin-security

Протестируйте продукт и по возможности дайте пожалуйста обратную связь. Это единственный способ устранить проблемы.

Информация:

Я мог бы написать пост на форуме с детальными примерами того, как пользоваться библиотекой и что для этого необходимо.

Это действительно очень обширная тема, так что я напишу об этом, только если в этом действительно есть необходимость. Напишите ответ, если вы хотите, чтобы я написал пользовательскую инструкцию.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/13712

COrdersManager class COrdersManager class

Простой способ контроля за ордерами.

Flag and Pennant patterns Flag and Pennant patterns

Индикатор отображает паттерны Флаг и Вымпел.

Histogram Blanket Histogram Blanket

Инструмент, помогающий оценивать графики в новом отображении.

ATR 3 LWMA ATR 3 LWMA

Индикатор показывает 3 периода ATR LWMA.