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

EAX_Mysql - MySQL library - библиотека для MetaTrader 5

Опубликовал:
Michael Schoen
Просмотров:
4992
Рейтинг:
(40)
Опубликован:
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

ant-GUBreakout ant-GUBreakout

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

QQEA QQEA

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

Phoenix5 Phoenix5

Phoenix5 – сигнальный индикатор Форекс, который традиционно представляет собой набор розовых и синих точек

LSMA LSMA

Типичный мувинг