Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
MySQL оболочка-wrapper MT4 - библиотека для MetaTrader 4
- Просмотров:
- 8764
- Рейтинг:
- Опубликован:
- 2012.03.12 07:02
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Автор:
Автор идеи 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.
- открываете этот проект VS2010
- внутри папки своего MySQL сервер ищите libmysql.lib, и подкладываете его в папку проекта
- пересобираете 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
Показывает прибыль по ордерам в процентах от баланса.
Быстрая LRMAНаписан под впечатлением от статьи "3 метода ускорения индикаторов на примере линейной регрессии". Считает очень быстро.
Скрипты выставления отложенных, рыночных ордеров, выставления и удаления стопов.
e-PSI@SAR v.20.09.2012Советник: Parabolic и его модернизированный аналог (на выбор), фильтруемые модернизированной ATR, да ещё умеющий строить "сетку". Шаблон для конструирования советников, основанных на сетевых стратегиях.