Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

Работа с Базами Данных - MySQL


Рекомендуемые сообщения

Добрый день, в выше начатой теме "Работа с Базами Данных" освещается работа с сервером Баз Данных - FireBird, поэтому предлагаю выделить

в отдельную тему вопросы связанные с работой сервера Баз Данных MySQL, он так же бесплатен как и FireBird и если не использовать сложные

структуры взаимосвязей - достаточно быстр в обработке данных.

В дальнейшем будут рассмотрены следущте темы.

1) Сервер Баз данных MySQL

2) Инструменты для работы с сервром и управлением базами. - EMS MySQL

3) Компоненты Delphi для работы с MySQL

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

1) Установка сервера MySQL

1.1 Берем версию соответствующую вашей операционной системе здесь: Загрузить сервер

прикреплен файл установки сервера для Windows (x86, 32-bit) - наиболее используемая.

 

1.2 Для установки мы должны обладать правами администратора. Запускаем файл установки и следуем по шагам.

Установка и настройка (Linux) - Богомолов

Установка MySQL под Win9x/NT/2000

1.3 Читаем документацию MySQL Docs

1.4 Важные моменты настройки:Установка и администрирование сервера MySQL

1.4.1 Настройка привилегий и безопасности.

1.4.2 Создание собственной Базы Данных.

 

FAQ Ответы на часто задаваемые вопросы

 

 

mysql-essential-5.1.53-win32.rar

Изменено пользователем Aleks_Simple
Ссылка на комментарий
Поделиться на другие сайты

2) EMS Manager 2005 for MySQL - это удобная графическая утилита для работы с Базами данным на сервере.

 

 

Инструкции по работе взяты с сайта: ссылка там же есть интересные статьи по MySQL

Работа с EMS SQL Manager - введение.rar

Работа с EMS SQL Manager - таблицы.rar

Изменено пользователем Aleks_Simple
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Добрый день, некотрое время назад узнал, что Оракл приобретя права на MySQL в погоне за прибылью понемногу придушивает самые интересные вещи в этой СУБД.

Благо есть конкуренция и достойным продолжение бесплатной ветки MySQL стала СУБД MariaDB - основанная на коде MySQL и полностью совместимая на клиентском уровне и уровне файлов Базы Данных. Вот ссылка на страницу для скачивания http://askmonty.org/wiki/MariaDB:Download

Я использовал MariaDB для Win32.

Главным приемуществом является развитие двигателя(engine) InnoDB для таблиц - этот двигатель поддерживает транзакции и блокировку на уровне записи,

является быстрым и надежным в отношении данных.

В следующей заметке расскажу об использовании эксперта - позволяющего сохранять тиковые данные по паре в БД MySQL используя библиотеку клиента MySQL.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Хочу предложить вашему вниманию способ сохранения тиковых данных, поступающих в Ваш торговый терминал на платформе МТ4, в СУБД MySQL.

Для этого нам понадобится

1. установленная СУБД MySQL.

2. Созданная БазаДанных, в которой будет сохраняться информация.

3. Эксперт на языке MQL4, который будет выполнять сохранение данных, с использованием Клиентской библиотеки libmysql.dll

 

Надеюсь с установкой проблем у вас не возникнет, рекомендую использовать MariaDB для Win32.

На создании Базы Данных остановлюсь подробнее ниже.

А про Эксперт расскажу пока вкратце, он найден мной на форуме http://codebase.mql4.com/ru/491 и написан неким

Автор: Collector (20.07.2006 12:14)

Заинтерисовал меня своей простотой и тем, что взаимодействие ведется через DLL.

Первый вопрос, который у меня возник почему это именно эксперт - ведъ это не совсем удобно, можно повесить только лишь один эксперт на график.

Как выяснил позже сохранять тики может только эксперт т.к. только эксперт запускается при поcтуплении каждого нового тика и этот тик можно получить

через переменные Ask и Bid. В отличие от эксперта - Индикатор запускается с каждым новым тиком, но из него не доступны тиковые переменные.

Для работы эксперта необходимо разрешить Импорт DLL в настройках Советников и разместить библиотеку(libmysql.dll) в папаке experts\libraries , которая идет в составе СУБД обычно в папке bin (C:\Program Files\MariaDB 5.2.4\bin>)

Изменено пользователем Aleks_Simple
Ссылка на комментарий
Поделиться на другие сайты

Создание Базы Данных. Запускаем командную строку и

Переходим в папку

cd C:\Program Files\MariaDB 5.2.4\bin

 

вводим команду(которая запускает SQL клиента по работе с СУБД):

mysql -u root -p

далее вводим пароль для пользователя root, который мы указывали ранее при установке

или ничего не вводим в качестве пароля, если он не был задан. И получаем приглашения для ввода команд SQL.

MariaDB [(none)]>

После успешного подключения вводим команду, которая создает Базу Данных.

 

create database whc_ticks character set = latin1;

 

получаем:

Query OK, 1 row affected (0.02 sec)

 

Далее задействуем созданную Базу:

use whc_ticks;

 

получаем:

Database changed

MariaDB [whc_ticks]>

 

Теперь создаем таблицу в которой и будут храниться Тики.

 

CREATE TABLE `ticks` (

`dt` datetime DEFAULT NULL,

`ask` float(8,5) DEFAULT NULL,

`bid` float(8,5) DEFAULT NULL,

`symbol` varchar(10) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

Получаем:

Query OK, 0 rows affected (0.22 sec)

Ссылка на комментарий
Поделиться на другие сайты

Разберем код эксперта.

 

#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#import "libmysql.dll"
int mysql_init(int db);
int mysql_errno(int TMYSQL);
int mysql_real_connect(int TMYSQL, string host, string user, string password, 
                      string DB,int port,int socket,int clientflag);
int mysql_real_query(int TMSQL, string query, int length);
void mysql_close(int TMSQL);
#import

Секция импорта указывает, что из файла библиотеки libmySQL.dll мы импортируем нужные нам функции.

 

int mysql;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
 {
  mysql = mysql_init(mysql);
  if(mysql != 0) 
      Print("allocated");
  string host = "localhost";
  string user = "root";
  string password = "";
  string DB = "WHC_tics";
  int clientflag = 0;
  int port = 3306;
  string socket = "";
  int res = mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);
  int err = GetLastError();
  if(res == mysql) 
      Print("connected");
  else 
      Print("error=", mysql, " ", mysql_errno(mysql), " ");
  return(0);
 }

Секция инициализации выполняется единожды при загрузке Эксперта.

Здесь мы инициализируем работу с СУБД

- mysql_init(mysql);

и устанавливаем подключение используя заданные параметры

- mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);

 

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
 {
  mysql_close(mysql);
//----
  return(0);
 }

Эта секция выполняется при выгрузке Эксперта, здесь мы закрываем соединение с СУБД.

 

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
 {
  string query = "";
  int length = 0;
                        
  query = StringConcatenate("insert into ticks(dt,ask,bid,symbol) values( \"", 
                            TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS), "\",", 
                            NormalizeDouble(Ask, 5), ",", NormalizeDouble(Bid, 5),
                            ",\"", Symbol(), "\");");
  length = StringLen(query);
  mysql_real_query(mysql, query, length);
  int myerr = mysql_errno(mysql);
  if(myerr > 0)
      Print("error=",myerr);
 }

Эта секция выполняется при получении нового тика:

Подготавливаем строку запроса:

query = StringConcatenate("insert into ticks(dt,ask,bid,symbol) values( \"",

TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS), "\",",

NormalizeDouble(Ask, 5), ",", NormalizeDouble(Bid, 5),

",\"", Symbol(), "\");");

length = StringLen(query);

 

и выполняем запрос:

mysql_real_query(mysql, query, length);

анализируем полученный результат:

int myerr = mysql_errno(mysql);

if(myerr > 0)

Print("error=",myerr);

Изменено пользователем Aleks_Simple
Ссылка на комментарий
Поделиться на другие сайты

Заключение:

Полученная сиситема успешно справляется с поставленной задачей!

Если рассматривать данный пример в более широком смысле как технологию взаимодействия МТ4 и СУБД MySQL, то мы сталкиваеся с ограничением

связанным с отсутствием в MQL4 поддержки структур данных при работе с библиотеками. Пэтому мы вынуждены формировать SQL команду в виде текста

и передавать её на выполнение. Процесс получения каких либо данных из MySQL более труден и может быть решен созданием промежуточной библиотеки на одном

из языков программирования, напрмер Delphi, C++

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...