Всем привет!
Не так давно в уроке про открытые позиции трейдеров мы брали данные с сайта, находящегося в сети. То, что мы делали тогда на уроке, можно сделать еще одним способом, не используя dll, следовательно, без зависимости от операционной системы.
Все, что вам понадобится, – это терминал Metatrader 4 и mql редактор кода. А также знания о стандартном mql4 методе WebRequest, с которым мы с вами сегодня и будем знакомиться.
Метод WebRequest
Метод WebRequest может быть вызван двумя способами. Первый подойдет для отправки простых запросов на сервер со стандартными http заголовками. Выглядит он так:
const string method, // метод HTTP
const string url, // url-адрес
const string cookie, // cookie
const string referer, // referer
int timeout, // таймаут
const char &data[], // массив тела HTTP-сообщения
int data_size, // размер массива data[] в байтах
char &result[], // массив с данными ответа сервера
string &result_headers // заголовки ответа сервера
);
Второй вариант позволяет самому заполнять массив headers. Это пригодится в различных сложных ситуациях, когда, например, вам нужно отправить на сервер файлы.
const string method, // метод HTTP
const string url, // url-адрес
const string headers, // заголовки
int timeout, // таймаут
const char &data[], // массив тела HTTP-сообщения
char &result[], // массив с данными ответа сервера
string &result_headers // заголовки ответа сервера
);
method может быть любым методом HTTP. В видео-уроке мы рассмотрим использование метода GET;
url – адрес сервера, к которому вы обращаетесь;
cookie – соответственно, куки, например, для авторизации на сервере;
referer – значение заголовка Referer HTTP-запроса;
timeout – таймаут в миллисекундах, то есть время ожидания ответа от сервера;
headers – ваши кастомные заголовки. При использовании первого варианта вызова метода автоматически по умолчанию запрос будет отправлен с заголовком: Content-Type: application/x-www-form-urlencoded.
В случае браузера заголовок может выглядеть вот так, например:
Host: tlap.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache
В нашем случае для отправки файла нужен такой заголовок:
Content-Disposition: form-data; name=”uploadedfile”; filename=”hello.tlap” Content-Type: application/x-object
Но отправка файлов довольно редкая задача, гораздо чаще нам из mql4 программы нужно просто получить какие-либо данные.
Сам же метод WebRequest возвращает int, то есть число. Это число – не что иное, как код ответа от сервера, либо же -1 в случае ошибки выполнения метода. Код ответа – это трехзначное число. В настоящее время есть пять классов кодов:
1xx: Informational – запрос получен и понят, а обработка продолжается;
2xx: Success – запрос был успешно получен, понят и обработан;
3xx: Redirection – для выполнения запроса должны быть предприняты дальнейшие действия;
4xx: Client Error – запрос имеет плохой синтаксис или не может быть выполнен;
5xx: Server Error – сервер не в состоянии выполнить допустимый запрос.
Вот пара самых распространенных примеров:
200 OK – Успешный запрос. Если клиентом были запрошены какие-либо данные, то они находятся в заголовке или теле сообщения. Такой код приходит в случае успеха;
301 Moved Permanently. Запрошенный документ был окончательно перенесен на новый URL, указанный в поле Location заголовка. Этот код означает, что страница была перенесена и теперь доступна по другому адресу;
400 Bad Request. Запрос не понят сервером из-за наличия синтаксической ошибки. Этот код означает, что во время запроса произошла опечатка;
401 Unauthorized. Запрос требует идентификации пользователя. Этот код означает, что сначала нужно авторизоваться – ввести логин и пароль от сайта;
403 Forbidden. Сервер понял запрос, но он отказывается его выполнять из-за каких-то ограничений в доступе;
404 Not Found. Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URL. Чаще всего этот код указывает на то, что страница была просто удалена;
500 Internal Server Error. Любая внутренняя ошибка сервера, которая не входит в рамки остальных ошибок класса 5xx.
На самом деле, конечно, кодов намного больше. В каждом классе их обычно от десятка до нескольких десятков, но все приводить тут нет смысла, тем более, что эту информацию можно самостоятельно найти в сети. Я привел лишь самые распространенные коды ответа.
Не забудьте добавить используемый адрес сайта в список разрешенных url в терминале, иначе ничего работать не будет. Для этого нажмите Ctrl+O или перейдите сервис->настройки->вкладка советники.
Настройки должны быть примерно такими, как изображено на рисунке сверху.
В своей работе стоит учитывать, что метод WebRequest дожидается ответа от сервера, и пока ответ не пришел, дальнейшее выполнение скрипта невозможно. Поэтому в индикаторе этот метод использовать нельзя. Кроме того, учитывайте то, что для выполнения метода нужно время, и в течение этого времени скрипт или советник ничего делать больше не будет. Особенно эту специфику стоит учитывать, если вы отправляете тяжелые запросы или получаете тяжелые ответы, например, объемные файлы с какими-либо данными.
Заключение
Сегодня мы разобрали метод WebRequest, предоставляющий достаточно простой способ взаимодействия ваших советников и скриптов с внешним миром. При помощи этого метода вы можете получать web-страницы, скачивать и отправлять файлы, производить на сайте манипуляции в автоматическом режиме и многое другое.
Возможности данного метода действительно безграничны, особенно если вы не знаете других языков программирования. С его помощью можно решать и вполне не трейдерские задачи, например, смастерить автокликер или эмулировать любую другую полезную работу в сети, приносящую деньги. Забавная идея, но если поднапрячься, вы можете написать свой автосерфер, который будет за вас зарабатывать на кликах в то время, пока ваши основные боты сливают депозит, – мелочь, а приятно.
Скачать исходник скрипта из урока
С уважением, Дмитрий аkа Silentspec
Tlap.com
Топ Брокеров 2025 по версии TLAP
Центовые счета
Быстрый ввод и вывод
Платформа CopyFx для копирования сигналов
Отличное исполнение
На рынке с 1998 года
Низкие спреды
Быстрый ввод и вывод
Хорошее исполнение
Множество способов пополнения
С 2007 года на рынке
Счета Zero с нулевыми спредами
Система Копи-трейдинга
Хорошее исполнение
Более 500 торговых инструментов
Комиссия на пополнение 0%
Лицензия ЦБ РФ
Удобный ввод и вывод средств
Подходит для крупных трейдеров
Крупнейший форекс дилер в России
Компания – налоговый агент, выплата налогов без участия клиента
Торговля через MetaTrader 5
Форекс, фондовые индексы и нефть
Низкие спреды
Хорошее исполнение
Подходит для торговли советниками
Торговля криптовалютами
Центовые счета со стартовым лотом 0.01
Система копирования сделок Share4You
Низкие спреды
Подходит для новичков
Лучшие на рынке условия для работы с сеточниками и мартингейлом
Исполнение без вмешательства дилинга
Низкие спреды
Трейдинг Forex, CFD и Crypto
Полная прозрачность работы
Множество представительств компании, в том числе в Великобритании
На рынке с 2006 года
| ||
| ||
| ||
| ||
| ||
| ||
|