Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Оцени его работу в терминале MetaTrader 5
- Опубликовал:
- Michael Schoen
- Просмотров:
- 5193
- Рейтинг:
- Опубликован:
- 2013.01.29 04:57
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Я случайно столкнулся с языком программирования MQL5 и был вынужден использовать в нем базу данных MySQL. Как и для любой библиотеки, я надеюсь, что примеры продемонстрируют как можно ее использовать. Самым важным и актуальным для любой библиотеки являются примеры ее использования ;)
Примеры:
Чтение данных:
#include <EAX\EAX_Mysql.mqh> EAX_mysql *db = new EAX_Mysql(); db.connect("myhost.mydomain.com", "myusername", "mypassword", "mydatabase", "mytable") int iResults = db.read_rows("SELECT password, COUNT(*) as Hits FROM users GROUP BY password"); for (int i=0; i < iResults; i++) { string password = (string) db.get("password",i); int hits = (int) db.get("Hits", i); }
Добавление данных:
#include <EAX\EAX_Mysql.mqh> // глобальная переменная EAX_mysql *db = new EAX_Mysql(); void OnInit() { db.connect("myhost.mydomain.com", "myusername", "mypassword", "metatrader", "Ticks"; } void OnTick() { MqlTick tick; SymbolInfoTick(_Symbol,tick); // Добавление новых данных для таблицы Ticks db.AddNew("Ticks"); // заполняем ее значениями.. db.set("symbol", _Symbol); // Вы можете отправлять цифры для цифровых полей БД если MySQL может конвертировать их db.set("ask", tick.ask); db.set("bid", tick.bid); db.set("last", tick.last); db.set("time", TimeToString(tick.time,TIME_DATE) + " " + TimeToString(tick.time,TIME_SECONDS)); db.set("volume", tick.volume); db.write(); } void OnDeinit() { // очистка памяти delete db; }
Взаимодействие с данными:
EAX_mysql *db = new EAX_Mysql(); db.connect("myhost.mydomain.com", "myusername", "mypassword", "metatrader", "mytable") // Выбор таблицы AgentsOnline (required to identify the correct Primary Key) db.select("AgentsOnline"); // Читаем данные с первичным ключом 5 db.read("5"); // изменяем любой столбец, db.set("lastupdate", (string) TimeLocal()); // перезаписываем db.write();
Установка:
- Откройте MQL5 директорию, в которой хранятся данные.
- Загрузите Connector/C (libmysql) нужной разрядности (32 или 64 бит) и поместите файл libymsql.dll в папку "MQL5\Libraries".
- Создайте папку EAX внутри папки Include.
- Поместите EAX_Mysql.mqh в папку "MQL5\Include\EAX".
Проблемы:
- Так как внутри кода используется общий указатель соединения, то библиотека не может обрабатывать более одного подключения к БД одновременно (у меня не было необходимости в добавлении/перемещении пулов соединения).
- Нет реальной обработки ошибок (MySQL), сбрасывание соединения с БД.
- Нет обработки ошибок, переподключения к БД.
- Нет поддержки использования нескольких столбцов первичных ключей.
- Это бета-версия - пожалуйста напишите мне по электронной почте если вы хотите протестировать ее.
- Не обрабатываются типы данных (внутри только строки). Решение можно поискать в CodeBase.
- Соединение базы данных осуществляется при помощи стандарта ISO - слишком ленив чтобы настроить арифметику указателей/строк для UTF-8.
Ссылки:
- http://mqlmagazine.com/mql-programming/mql5-connecting-to-mysql/
- https://www.mql5.com/en/articles/364
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/855

Индикатор отображения временных диапазонов.

QQEA – осциллятор Форрекс с ничем не примечательным названием, строится на основе скользящих средних и технического индикатора RSI.