Скачать MetaTrader 5

Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

2015.12.21 15:49
Библиотеки

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

| Russian English Español Português Deutsch 日本語

Просмотров:
631
Рейтинг:
голосов: 15

Оригинальный файл библиотеки 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 Software Corp.
Оригинальная публикация: https://www.mql5.com/en/code/13712

YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя

Скрипт рисует уровни Рудолфа Акселя

YURAZ_CLOSEPRC_V1 YURAZ_CLOSEPRC_V1

Закрытие всех открытых позиций одним кликом либо закрытие всех позиций при достижении указанного профита в процентах от депозита

Мультипериодный индикатор MK_LaguerreMultiPeriodV2 Мультипериодный индикатор MK_LaguerreMultiPeriodV2

Обычный Laguerre на нескольких таймфреймах одновременно.

AskBid Line AskBid Line

AskBid Line — простейший индикатор, отображающий цену Ask или Bid в виде пунктирной линии на истории.