MT4 - Mysql соединение через PHP
Мне нужно получить / отправить данные с MT4 из / в базу данных Mysql. Я использовал "libmysql.dll" или mysql_wrapper (также основанный на libmysql.dll), но, похоже, он не стабилен.
Я думаю, может быть, я могу использовать PHP в качестве сервера (создание сокета TCP/IP на указанном порту) и MT4 EA/ скрипт в качестве клиента. Или, возможно, используя Apache в качестве сервера (создавая PHP-скрипты для работы с Mysql-соединением) и MT4 EA/scrip в качестве клиента.
Итак, PHP - это мост между MT4 и Mysql. PHP получает запрос от MT4, подключается к Mysql (и при необходимости выполняет вычисления), а затем отправляет результат обратно в MT4. Не могли бы вы дать мне подсказку, как это сделать в Windows XP (у меня на Windows XP установлены Apache, PHP, Mysql)?
Спасибо джек
3 ответа
Во-первых, я предполагаю, что вы пытаетесь подключить клиентский терминал MT4 (не сервер) к базе данных MySQL. В противном случае нет причин для проблем со стабильностью. Если вы используете советник для подключения к базе данных, просто обрабатывайте соединения осторожно, советник не является стандартным исполняемым файлом, код внутри советника запускается на каждом "тике", так что учитывайте это. Поверьте мне, поместить PhP в середину просто усложняет вещи, когда они настолько просты (и значительно снижают производительность!). Если мы можем помочь, дайте нам знать: www.mt4software.com
Я получил этот скрипт PHP, который открывает определенный порт и ждет подключения. Я могу использовать Telnet для подключения к нему. Кто-нибудь знает, как подключиться к этому порту с помощью MQL4?
Спасибо
// usage example in command prompt: telnet 192.168.7.21 168168
// To quit, type: quit
// To shutdown PHP server, type: shutdown // //
// **************************************************************
<?php error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */ set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting * as it comes in. */ ob_implicit_flush();
$address = '192.168.7.21'; $port = 168168;
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; }
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; }
if (socket_listen($sock, 5) === false) {
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; }
do {
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}
/* Send instructions. */
$msg = "\nWelcome to the PHP Test Server. \n" .
"To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
socket_write($msgsock, $msg, strlen($msg));
do {
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
$talkback = "PHP server: You said '$buf'.\n";
socket_write($msgsock, $talkback, strlen($talkback));
echo "$buf\n";
} while (true);
socket_close($msgsock); } while (true);
socket_close($sock); ?>
Если я, где ты, я не пойду таким образом...
Может быть, вам стоит взглянуть на очереди сообщений (AMQP - RabbitMQ - ZeroMQ)...
Смотрите этот пост http://worldwide-invest.org/threads/34585-Messaging-queue-AMQP-%28RabbitMQ-ZeroMQ%29-and-MT4
Вы увидите, что я могу собирать тиковые данные, используя любой язык, и сохранять их в любой базе данных, поддерживаемой языком, который поддерживает RabbitMQ (много от Python до Java через C, C++, C# ...) .
Существует также мост между Metatrader и ZeroMQ (ZMQ) https://github.com/AustenConrad/mql4zmq