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

MySQL оболочка-wrapper MT4 - библиотека для MetaTrader 4

Просмотров:
8680
Рейтинг:
(12)
Опубликован:
2012.03.12 07:02
Обновлен:
2016.11.22 07:33
mysqlMT4Solution.zip (1085.68 KB)
\MQL4\Include\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Автор:

Автор идеи Russell. Но он похоже уже давно не поддерживает свое "детище".

Поимев кучу трудностей при наладке связки MT4 - MySQL по библиотеке Russell, cпасибо, огромное тем кто нашел и подсказал workaround: CONCAT(";", CONCAT_WS(";", id, name, value)). Но при развитии моего проекта до 2 селектов из вьюх по 20 и 25 колонок (некоторые из данных NULL), и при запросах 13 в секунду - этот workaround уже не спасает. Кое-где и "иногда" смещение указателя интерпретируется как '\0' (признак конца строки), что фатально для string.

Пришлось искать C++ Senior, чтобы разобраться с этой библиотекой. Почему же она фигово собиралась и не хотела запускаться - оказалось автор хотел внутрь перезаписать все функции libmysql.dll, из-за этого создал там беспорядок. Идея эта совсем не благородная, так как MySQL сервер меняется и libmysql.dll вместе с ним, а также и файл линковки libmysql.lib, а без второго файла нельзя правильно собрать mysql_wrapper.dll (правильно это чтобы при старте в МТ4 оно падало). Вот и получается, что старые mysql_wrapper.dll не работали с новыми серверами.

Если у вас dll-ка не заработает (или перестанет работать), файл mysql_wrapper_v1.0.4 также можно скачать с dropbox проект Visual Studio 2010.

  1. открываете этот проект VS2010
  2. внутри папки своего MySQL сервер ищите libmysql.lib, и подкладываете его в папку проекта
  3. пересобираете mysql_wrapper.dll

Ну и там же "внутри папки своего MySQL" забираете libmysql.dll. Эти 2 dll-ки надо будет заменить - это на случай если перестанет работать.

Ну а пока что я собрал все под MySQL 5.5.18: вот ссылка

//+------------------------------------------------------------------+
//|                                                    mysqlTest.mq4 |
//|                                        Copyright © 2012, vedroid |
//|                                                begpoug@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, vedroid"
#property link      "mailto: begpoug@gmail.com"

#include <mysql_v2.0.5.mqh>

string  host     = "127.0.0.1";
string  user     = "root";
string  pass     = "rootpass";
string  dbName   = "information_schema"; // эта таблица есть в любом MySQL сервере
                                         // this table is in any MySQL server
int     port     = 3306;
int     socket   = 0;
int     client   = 0;

int     dbConnectId = 0;
bool    goodConnect = false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start () {
    goodConnect = mysqlInit(dbConnectId, host, user, pass, dbName, port, socket, client);
    
    if ( !goodConnect ) {
        return (1); // bad connect
    }
    // эти колонки есть в любом MySQL сервере
    // this fields are in any MySQL server
    string query = StringConcatenate(
        "SELECT `TABLE_NAME`, `TABLE_ROWS`, `CREATE_TIME`, `CHECK_TIME` ",
            "FROM `TABLES` ",
            "WHERE `TABLE_SCHEMA` = \'mysql\'");
    string data[][4];   // важно: вторая размерность как количество полей в запросе
                        // important: second dimension must be like amount of fields in your query
    int result = mysqlFetchArray(dbConnectId, query, data);
    
    if ( result == 0 ) {
        Print("0 rows selected");
    } else if ( result == -1 ) {
        Print("some error occured");
    } else {
        int rows = ArrayRange(data, 0);
        int cols = ArrayRange(data, 1);
        
        for ( int i = 0; i < rows; i++) {
            string line = "";
            
            for ( int j = 0; j < cols; j++ ) {
                line = StringConcatenate(line, data[i][j], ";");
            }
            Print(line);
        }
    }
    //+-------------------------------------------------------------------
    //| Это просто пример, никто не может вставлять в information_schema.
    //| It's just an example, nobody can insert into information_schema.
    //+-------------------------------------------------------------------
    /*string insertQuery  = StringConcatenate(
        "INSERT INTO `CHARACTER_SETS` VALUES (", "sometext"
                                        , "," , "oneMoreText"
                                        , "," , "andVarialbe"
                                        , "," , "nextWillBeNumber"
                                        , "," , 2
                                        , ")"
        );
    if ( mysqlQuery(dbConnectId, insertQuery) ) {
        Print("insert good");
    }*/
    //+-------------------------------------------------------------------
    mysqlDeinit(dbConnectId);
    return (0);
}
//+------------------------------------------------------------------+

Этот скрипт должен запуститься на любом MySQL и выдать в консоль МТ4 список таблиц и их свойств (их будет штук 20), главное указать правильные параметры подключения к базе. Код инсерта просто для ознакомления. Апдейты и делиты делаются точно так же. Опять же вдруг уже не найдете VS2010, тогда просто скачайте MySQL 5.5.18 и его родная libmysql.dll

OrderPercent OrderPercent

Показывает прибыль по ордерам в процентах от баланса.

Быстрая LRMA Быстрая LRMA

Написан под впечатлением от статьи "3 метода ускорения индикаторов на примере линейной регрессии". Считает очень быстро.

Набор скриптов для быстрой торговли с помощью мыши. Набор скриптов для быстрой торговли с помощью мыши.

Скрипты выставления отложенных, рыночных ордеров, выставления и удаления стопов.

e-PSI@SAR v.20.09.2012 e-PSI@SAR v.20.09.2012

Советник: Parabolic и его модернизированный аналог (на выбор), фильтруемые модернизированной ATR, да ещё умеющий строить "сетку". Шаблон для конструирования советников, основанных на сетевых стратегиях.