Советник

 

Добрый вечер .Помогите пожалуйста нужен пример  советника ,в котором заложено получение set  параметров через DLL .

Советник на компьютере у одного человека .а данные  параметров у другого человека на другом компе .Как сделать так чтобы советник получал эти данные ?

 
Darirunu:

Добрый вечер .Помогите пожалуйста нужен пример  советника ,в котором заложено получение set  параметров через DLL .

Советник на компьютере у одного человека .а данные  параметров у другого человека на другом компе .Как сделать так чтобы советник получал эти данные ?

Я бы это делал через связь с фтп, без каких либо dll

Webrequest в помощь

Документация по MQL5: Общие функции / WebRequest
Документация по MQL5: Общие функции / WebRequest
  • www.mql5.com
Для использования функции WebRequest() следует добавить адреса серверов в список разрешенных URL во вкладке "Советники" окна "Настройки". Порт сервера выбирается автоматически на основе указанного протокола - 80 для "http://" и 443 для "https://". Функция WebRequest() является синхронной, это означает, что она приостанавливает выполнение...
 
Vitaly Muzichenko:

Я бы это делал через связь с фтп, без каких либо dll

Webrequest в помощь


Спасибо за столь оперативный ответ ,но меня интересует MT4 и с примером советника с такими возможностями ..

 
Darirunu:

Спасибо за столь оперативный ответ ,но меня интересует MT4 и с примером советника с такими возможностями ..

Вот мт4

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

WebRequest - Общие функции - Справочник MQL4
WebRequest - Общие функции - Справочник MQL4
  • docs.mql4.com
Для использования функции WebRequest() следует добавить адреса серверов в список разрешенных URL во вкладке "Советники" окна "Настройки". Порт сервера выбирается автоматически на основе указанного протокола - 80 для "http://" и 443 для "https://". Функция WebRequest() является синхронной, это означает, что она приостанавливает выполнение...
 
Vitaly Muzichenko:

Вот мт4

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


Уже неделю копаюсь нет примеров я не нашел с открытми кодами ..Пожалуйста если у вас есть что-то  предоставьте пожалуйста 

 
Darirunu:

Уже неделю копаюсь нет примеров я не нашел с открытми кодами ..Пожалуйста если у вас есть что-то  предоставьте пожалуйста 

Наверное колёсико у крыски сломалось. Никак не прокрутить страничку...

Пример использования 1-го варианта функции WebRequest():

void OnStart()
  {
   string cookie=NULL,headers;
   char post[],result[];
   int res;
//--- для работы с сервером необходимо добавить URL "https://www.google.com/finance" 
//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):
   string google_url="https://www.google.com/finance";
//--- обнуляем код последней ошибки
   ResetLastError();
//--- загрузка html-страницы с Google Finance
   int timeout=5000; //--- timeout менее 1000 (1 сек.) недостаточен при низкой скорости Интернета
   res=WebRequest("GET",google_url,cookie,NULL,timeout,post,0,result,headers);
//--- проверка ошибок
   if(res==-1)
     {
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления
      MessageBox("Необходимо добавить адрес '"+google_url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      //--- успешная загрузка
      PrintFormat("Файл успешно загружен, Размер файла =%d байт.",ArraySize(result));
      //--- сохраняем данные в файл
      int filehandle=FileOpen("GoogleFinance.htm",FILE_WRITE|FILE_BIN);
      //--- проверка ошибки
      if(filehandle!=INVALID_HANDLE)
        {
         //--- сохраняем содержимое массива result[] в файл
         FileWriteArray(filehandle,result,0,ArraySize(result));
         //--- закрываем файл
         FileClose(filehandle);
        }
      else Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
     }
  }


Пример использования 2-го варианта функции WebRequest():

#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property script_show_inputs
#property description "Пример скрипта, который публикует сообщение "
#property description "пользователя в ленте на mql5.com"
 
input string InpLogin   ="";             //Ваш аккаунт в MQL5.com
input string InpPassword="";             //Пароль для вашего аккаунта
input string InpFileName="EURUSDM5.png"; //Картинка в папке MQL5/Files/
input string InpFileType="image/png";    //Правильный mime type картинки
//+------------------------------------------------------------------+
//| Публикация сообщения с картинкой в ленте mql5.com                |
//+------------------------------------------------------------------+
bool PostToNewsFeed(string login,string password,string text,string filename,string filetype)
  {
   int    res;     // для помещения результата выполнения операций
   char   data[];  // массив с данными для отправки POST-запросов
   char   file[];  // сюда прочитаем картинку
   string str="Login="+login+"&Password="+password;
   string auth,sep="-------Jyecslin9mp8RdKV"; // разделитель данных формата multipart
//--- имеется файл - пробуем прочитать его
   if(filename!=NULL && filename!="")
     {
      res=FileOpen(filename,FILE_READ|FILE_BIN);
      if(res<0)
        {
         Print("Ошибка открытия файла \""+filename+"\"");
         return(false);
        }
      //--- читаем данные файла
      if(FileReadArray(res,file)!=FileSize(res))
        {
         FileClose(res);
         Print("Ошибка чтения файла \""+filename+"\"");
         return(false);
        }
      //---
      FileClose(res);
     }
//--- сформируем тело POST запроса на авторизацию
   ArrayResize(data,StringToCharArray(str,data,0,WHOLE_ARRAY,CP_UTF8)-1);
//--- сбросим код ошибки
   ResetLastError();
//--- выполняем запрос на авторизацию
   res=WebRequest("POST","https://www.mql5.com/ru/auth_login",NULL,0,data,data,str);
//--- если авторизация не удалась
   if(res!=200)
     {
      Print("Ошибка авторизации #"+(string)res+", LastError="+(string)GetLastError());
      return(false);
     }
//--- вычитаем из заголовка ответа сервера cookie авторизации
   res=StringFind(str,"Set-Cookie: auth=");
//--- если cookie не найден, сообщим об ошибке
   if(res<0)
     {
      Print("Ошибка, данные авторизации не найдены в ответе сервера (проверте логин/пароль)");
      return(false);
     }
//--- запомним авторизационные данные и сформируем заголовок для последующих запросов
   auth=StringSubstr(str,res+12);
   auth="Cookie: "+StringSubstr(auth,0,StringFind(auth,";")+1)+"\r\n";
//--- если имеется файл данных, отправляем его на сервер
   if(ArraySize(file)!=0)
     {
      //--- сформируем тело запроса
      str="--"+sep+"\r\n";
      str+="Content-Disposition: form-data; name=\"attachedFile_imagesLoader\"; filename=\""+filename+"\"\r\n";
      str+="Content-Type: "+filetype+"\r\n\r\n";
      res =StringToCharArray(str,data);
      res+=ArrayCopy(data,file,res-1,0);
      res+=StringToCharArray("\r\n--"+sep+"--\r\n",data,res-1);
      ArrayResize(data,ArraySize(data)-1);
      //--- сформируем заголовок запроса
      str=auth+"Content-Type: multipart/form-data; boundary="+sep+"\r\n";
      //--- сбросим код ошибки
      ResetLastError();
      //--- выполняем запрос на передачу файла изображения на сервер
      res=WebRequest("POST","https://mql5.com/upload_file",str,0,data,data,str);
      //--- проверим результат запроса
      if(res!=200)
        {
         Print("Ошибка передачи файла на сервер #"+(string)res+", LastError="+(string)GetLastError());
         return(false);
        }
      //--- получим ссылку на картинку, которую загрузили на сервер
      str=CharArrayToString(data);
      if(StringFind(str,"{\"Url\":\"")==0)
        {
         res     =StringFind(str,"\"",8);
         filename=StringSubstr(str,8,res-8);
         //--- при ошибке закачки файла, вернётся пустая ссылка
         if(filename=="")
           {
            Print("Передача файла на сервер не удалась");
            return(false);
           }
        }
     }
//--- сформируем тело запроса публикации сообщения на сервере
   str ="--"+sep+"\r\n";
   str+="Content-Disposition: form-data; name=\"content\"\r\n\r\n";
   str+=text+"\r\n";
//--- на каких языках сайта mql5.com будет доступна публикация 
   str+="--"+sep+"\r\n";
   str+="Content-Disposition: form-data; name=\"AllLanguages\"\r\n\r\n";
   str+="on\r\n";
//--- если картинка была загружена на сервер - передадим ссылку на неё
   if(ArraySize(file)!=0)
     {
      str+="--"+sep+"\r\n";
      str+="Content-Disposition: form-data; name=\"attachedImage_0\"\r\n\r\n";
      str+=filename+"\r\n";
     }
//--- завершающая строка multipart-запроса
   str+="--"+sep+"--\r\n";
//--- собираем тело POST-запроса в одну строку 
   StringToCharArray(str,data,0,WHOLE_ARRAY,CP_UTF8);
   ArrayResize(data,ArraySize(data)-1);
//--- подготовим заголовок запроса   
   str=auth+"Content-Type: multipart/form-data; boundary="+sep+"\r\n";
//--- выполняем запрос на публикацию сообщение в ленте пользователя mql5.com
   res=WebRequest("POST","https://www.mql5.com/ru/users/"+login+"/wall",str,0,data,data,str);
//--- в случае успешной публикации вернем true
   return(res==200);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- опубликуем пост на mql5.com c картинкой, путь к которой возьмем из параметра InpFileName
   PostToNewsFeed(InpLogin,InpPassword,"Проверка расширенной версии функции WebRequest\r\n"
                  "(Данное сообщение размещено скриптом WebRequest.mq5)",InpFileName,InpFileType);
  }
//+------------------------------------------------------------------+
 
Alexey Viktorov:

Наверное колёсико у крыски сломалось. Никак не прокрутить страничку...

Пример использования 1-го варианта функции WebRequest():


Пример использования 2-го варианта функции WebRequest():


Это же не советник ..Это просто пример кода ..Я спрашивал о советнике с встроенным WebRequest()

 
Alexey Viktorov:

Пример использования 2-го варианта функции WebRequest():

Данный пример, в том виде как он написан не работает.   https://www.mql5.com/ru/forum/95688
функция WebRequest возвращает ошибку.
функция WebRequest возвращает ошибку.
  • 2016.09.18
  • www.mql5.com
Приветствую всех...
 
Sergey Kolemanov:
Данный пример, в том виде как он написан не работает.   https://www.mql5.com/ru/forum/95688

Ну вот .Сказал я это взяли бы в штыки((Спасибо за поддержку ..

 
Sergey Kolemanov:
Данный пример, в том виде как он написан не работает.   https://www.mql5.com/ru/forum/95688

Данный пример уже не авторизует на сайте, но это и незачем. Достаточно подставить адрес своего сайта, или любой другой, и всё заработает.

Не вводите народ в заблуждение, там вполне самодостаточный пример! 

 
Darirunu:

Это же не советник ..Это просто пример кода ..Я спрашивал о советнике с встроенным WebRequest()


Вы правы - это просто пример (первый вариант использования WebRequest() ) , но он вполне рабочий. Готового решения под Вашу задачу вы вряд ли найдёте т.к. она нестандартна...