Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 2817
- Рейтинг:
- Опубликован:
- 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](https://c.mql5.com/i/code/library.png)
Простой способ контроля за ордерами.
![Flag and Pennant patterns](https://c.mql5.com/i/code/indicator.png)
Индикатор отображает паттерны Флаг и Вымпел.
![Histogram Blanket](https://c.mql5.com/i/code/indicator.png)
Инструмент, помогающий оценивать графики в новом отображении.
![ATR 3 LWMA](https://c.mql5.com/i/code/indicator.png)
Индикатор показывает 3 периода ATR LWMA.