Скачать MetaTrader 5

Скрипты: s_wininet

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
188185
MetaQuotes Software Corp.  

s_wininet:

Пример использования wininet.dll для загрузки веб-страницы.

Author: Dmitry Fedoseev

Nefedov Kirill
430
Nefedov Kirill  

А про запись на удаленный FTP с помощью этой-же библиотеки поподробней не расскажите?

Dmitry Fedoseev
46933
Dmitry Fedoseev  
HIDDEN:

А про запись на удаленный FTP с помощью этой-же библиотеки поподробней не расскажите?

Пока не приходилось делать. Может быть в вашем случае лучше сделать php или cgi скрипт, из советника вызвать ссылку и передать в ней параметры, затем скрипт  разложит сигналы по каталогам пользователей.
Mykola Bilak
625
Mykola Bilak  
А про запись на удаленный FTP с помощью этой-же библиотеки поподробней не расскажите?

если фтп один, то достаточно встроенной функции SendFTP()
Sergey Gustaytis
503
Sergey Gustaytis  
Не подскажите, для чего Вы писали этот скрипт?

Вот пример, что было бы полезно, и лучше конечно, в качестве индикатора.
Например, это считывание в файл уровней поддержки-сопротивления от Акслеля http://4-x.by.ru/dj.shtml, которые можно бы было потом записать в файл с последующем считыванием уровней (Levels_RS_gbpusd.csv) и т.п и использовать в индикаторе от KimIV, к сожалению, ссылку не помню ( давно это было), но код примерно такой ( я добавил только еще одну строку - "Точка разворота. ...! и за сколько дней выводить информацию и сделал это в виде индикатора, но необходимые фалы корректирую каждый день, что конечно весьма неудобно...):

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 DarkViolet
#property indicator_color2 RoyalBlue
#property indicator_color3 SkyBlue
#property indicator_color4 White
#property indicator_color5 Orange
#property indicator_color6 Red
#property indicator_color7 MediumVioletRed
 
//------- input parameters
extern int  NumberOfDay = 2;     // Количество дней
extern bool StrongOnly  = false;  // Показывать только сильные уровни
//------- Глобальные переменные --------------------------------------
datetime Data[];
double   R3[], PR3[];
double   R2[], PR2[];
double   R1[], PR1[];
double   P[],  PP[]; 
double   S1[], PS1[];
double   S2[], PS2[];
double   S3[], PS3[];
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init()
{
  // Установка размерности массивов
  ArrayResize(Data, NumberOfDay);
  ArrayResize(R3, NumberOfDay); ArrayResize(PR3, NumberOfDay);
  ArrayResize(R2, NumberOfDay); ArrayResize(PR2, NumberOfDay);
  ArrayResize(R1, NumberOfDay); ArrayResize(PR1, NumberOfDay);
  ArrayResize(P, NumberOfDay);  ArrayResize(PP, NumberOfDay);
  ArrayResize(S1, NumberOfDay); ArrayResize(PS1, NumberOfDay);
  ArrayResize(S2, NumberOfDay); ArrayResize(PS2, NumberOfDay);
  ArrayResize(S3, NumberOfDay); ArrayResize(PS3, NumberOfDay);
  
  // Загрузка уровней из файла в массивы
  int fh = FileOpen("Levels_RS_"+Symbol()+".csv", FILE_CSV|FILE_READ, ";");
  if (fh > 0)
  {
    for (int i = 0; i < NumberOfDay; i++)
    {
      Data[i] = StrToTime(FileReadString(fh));
 
      R3 [i] = StrToDouble(FileReadString(fh));
      PR3[i] = StrToInteger(FileReadString(fh));
      
      R2 [i] = StrToDouble(FileReadString(fh));
      PR2[i] = StrToInteger(FileReadString(fh));
      
      R1 [i] = StrToDouble(FileReadString(fh));
      PR1[i] = StrToInteger(FileReadString(fh));
      
      P [i] = StrToDouble(FileReadString(fh));
      PP[i] = StrToInteger(FileReadString(fh));
      
      S1 [i] = StrToDouble(FileReadString(fh));
      PS1[i] = StrToInteger(FileReadString(fh));
      
      S2 [i] = StrToDouble(FileReadString(fh));
      PS2[i] = StrToInteger(FileReadString(fh));
      
      S3 [i] = StrToDouble(FileReadString(fh));
      PS3[i] = StrToInteger(FileReadString(fh));
      
      
    }
    FileClose(fh);
  }
  Comment("");
}
 
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit()
{
  // Удаление объектов
  for (int i = 0; i < NumberOfDay; i++)
  {
    ObjectDelete("R3"+i);
    ObjectDelete("R2"+i);
    ObjectDelete("R1"+i);
    ObjectDelete("Piv"+i);
    ObjectDelete("S1"+i);
    ObjectDelete("S2"+i);
    ObjectDelete("S3"+i);
  }
  Comment("");
}
 
//+------------------------------------------------------------------+
//| Создание объектов ЛИНИЯ и их отрисовка на графике                |
//+------------------------------------------------------------------+
// nv - Наименование уровня
// nd - Номер дня от 0 (текущий) и дальше в глубь истории
// zl - Значение уровня
// sl - Сила уровня (0-слабый, 1-сильный)
// cl - Цвет линии
void DrawLine(string nv, int nd, double zl, bool sl, color cl)
{
  datetime dd1 = Data[nd];
  datetime dd2 = StrToTime(TimeToStr(dd1, TIME_DATE)+" 23:59");
 
  if (!StrongOnly || sl)
  {
    ObjectCreate(nv+nd, OBJ_TREND, 0, dd1, zl, dd2, zl);
 
    ObjectSet(nv+nd, OBJPROP_RAY  , False);
    ObjectSet(nv+nd, OBJPROP_COLOR, cl);
    ObjectSet(nv+nd, OBJPROP_STYLE, STYLE_SOLID);      
    ObjectSet(nv+nd, OBJPROP_WIDTH, 1);//(sl + 1) * 2);
  }
}
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start()
{
  if (Period() > 240) Comment("Индикатор Levels_RS ТФ больше Н4 не поддерживает!");
  else
  {
    // Отображение уровней на графике
    for (int i = 0; i < NumberOfDay; i++)
    {
      if (R3[i]>0) DrawLine("R3", i, R3[i], PR3[i], indicator_color1);
      if (R2[i]>0) DrawLine("R2", i, R2[i], PR2[i], indicator_color2);
      if (R1[i]>0) DrawLine("R1", i, R1[i], PR1[i], indicator_color3);
      if (P[i]>0) DrawLine("Piv", i, P[i],  PP[i], indicator_color4);
      if (S1[i]>0) DrawLine("S1", i, S1[i], PS1[i], indicator_color5);
      if (S2[i]>0) DrawLine("S2", i, S2[i], PS2[i], indicator_color6);
      if (S3[i]>0) DrawLine("S3", i, S3[i], PS3[i], indicator_color7);
    }
  }
}
//+------------------------------------------------------------------+
Dmitry Fedoseev
46933
Dmitry Fedoseev  
GSB:
Не подскажите, для чего Вы писали этот скрипт?
Ответ на ваш вопрос уже давно находится в описании этого срипта:

Пример использования wininet.dll для загрузки веб-страницы


В срипте демонстрируется использование функций библиотеки Windows wininet.dll


Будьте внимательней!
MQL4 Comments
16319
MQL4 Comments  
>>если фтп один, то достаточно встроенной функции SendFTP()
не достаточно
>>...лучше сделать php или cgi скрипт...
...не верно
>>А про запись на удаленный FTP с помощью этой-же библиотеки. ..
#import "wininet.dll"
int InternetOpenA(string sAgent, int lAccessType, string sProxyName = "", string sProxyBypass = "", int lFlags = 0);
int InternetConnectA(int hInternetSession, string FTPURL, int port, string login, string password, int FTPflag, int lFlags = 0, int lFlags = 0);
int FtpGetFileA(int hSession, string FileNameServer, string FileNameLocal, bool Boolean, int lFlags =0, int lFlags =1, int lFlags = 0);
int FtpPutFileA(int hSession, string FileNameLocal, string FileNameServer, int lFlags =1, int lFlags =0);
int FtpDeleteFileA(int hSession, string FileNameServer);
int InternetCloseHandle(int hInet);
#import
Kolian00001
28
Kolian00001  

Здравствуйте. В описании этого скрипта есть одна неточность: в описании прописан адрес, начинающийся с https (https://www.mql4.com/ru/users/Intege), а в самом скрипте прописан адрес, начинающийся с http (https://www.mql4.com/ru/users/Integer). В действительности адрес соответствтует адресу, прописанному в описании (начинается  с https). При запуске скрипта в терминале МТ4 Build 1090 появляется ошибка: "Ошибка при вызове InternetOpenUrlW()". Если же в данном скрипте прописать адрес, который и в действительности, и в самом скрипте начинается с http (http://www.fxpro.ru/), то скрипт работает правильно, страницу скачивает в файл SavedFromInternet.htm.

Как же скачивать файлы по защищенному соединению https? Что нужно изменить в предлагаемом коде?

Dmitry Fedoseev
46933
Dmitry Fedoseev  
Kolian00001:

Здравствуйте. В описании этого скрипта есть одна неточность: в описании прописан адрес, начинающийся с https (https://www.mql4.com/ru/users/Intege), а в самом скрипте прописан адрес, начинающийся с http (https://www.mql4.com/ru/users/Integer). В действительности адрес соответствтует адресу, прописанному в описании (начинается  с https). При запуске скрипта в терминале МТ4 Build 1090 появляется ошибка: "Ошибка при вызове InternetOpenUrlW()". Если же в данном скрипте прописать адрес, который и в действительности, и в самом скрипте начинается с http (http://www.fxpro.ru/), то скрипт работает правильно, страницу скачивает в файл SavedFromInternet.htm.

Как же скачивать файлы по защищенному соединению https? Что нужно изменить в предлагаемом коде?


Все нормально с https работает, так же как с http (все точно так же). Просто страница с https находится на mql5.com, а не mql4.com, то есть вы пробуете с неправильным адресом.

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
Kolian00001
28
Kolian00001  
Dmitry Fedoseev:

Все нормально с https работает, так же как с http (все точно так же). Просто страница с https находится на mql5.com, а не mql4.com, то есть вы пробуете с неправильным адресом.

Этот адрес (https://www.mql4.com/ru/users/Integer/) указан в прикрепленном файле s_wininet.mq4 Однако если этот адрес в данном скрипте заменить на адрес https://www.mql5.com/ru/users/Integer/ и запустить в терминале МТ4 Build 1090, то появится ошибка "Ошибка при вызове InternetOpenUrlW()". Номер этой ошибки из библиотеки kernel32.dll - 12157 (ERROR_INTERNET_SECURITY_CHANNEL_ERROR - The application experienced an internal error loading the SSL libraries.) То же происходит при загрузке некоторых других страниц, начинающейся с https. Проверял следующие сайты: https://msdn.microsoft.com/en-us/ - загрузка есть, https://www.mql5.com/ru/articles/1391 - ошибка 12157, https://fortrader.org/ - ошибка 12038 (ERROR_INTERNET_SEC_CERT_CN_INVALID - SSL certificate common name (host name field) is incorrect—for example, if you entered www.server.com and the common name on the certificate says www.different.com), https://sgr-tradeinvest.ru/mql4-bonus/ - ошибка 12157.

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
Dmitry Fedoseev
46933
Dmitry Fedoseev  
Kolian00001:

...Однако если этот адрес в данном скрипте заменить на адрес https://www.mql5.com/ru/users/Integer/ и запустить в терминале МТ4 Build 1090, то появится ошибка "Ошибка при вызове InternetOpenUrlW()"


Неправда

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий