Возможно ли из индикатора обратиться к внешнему сайту ?

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

Возможно ли из индикатора обратиться к внешнему сайту ?

Веб реквест оказывается из индикатора не работает...

TheXpert
18307
TheXpert  
Vladimir Pastushak:

Возможно ли из индикатора обратиться к внешнему сайту ?

Wininet api в помощь, примеров предостаточно. Но это очень плохая практика, поэтому и вебреквест нельзя.
Yury Kirillov
5298
Yury Kirillov  
Vladimir Pastushak:

Возможно ли из индикатора обратиться к внешнему сайту ?

Веб реквест оказывается из индикатора не работает...


Там проблемы с поточностью, когда индикатор на запросе встаёт в ожидание, то весь терминал отдыхает...
Vladimir Pastushak
98910
Vladimir Pastushak  

Нашел решение 

//+------------------------------------------------------------------+
//|                                                          Tet.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#import "wininet.dll"
int InternetAttemptConnect(int x);
int InternetOpenW(string sAgent,int lAccessType,string sProxyName="",string sProxyBypass="",int lFlags=0);
int InternetOpenUrlW(int hInternetSession,string sUrl,string sHeaders="",int lHeadersLength=0,int lFlags=0,int lContext=0);
int InternetReadFile(int hFile,int &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead[]);
int InternetCloseHandle(int hInet);
#import
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {

   if(InternetAttemptConnect(0)!=0) // Проверка наличия интернет соединения !
      Print("Нет интернета");
   else
      Print("Подключение есть");

   int hInternetSession=InternetOpenW("Microsoft Internet Explorer",0,"","",0);
   if(hInternetSession<=0)
      Print("Не смогли выйти в сеть");
   else
      Print("Вышли в сеть");

   string aNumber=IntegerToString(AccountNumber());
   int hURL = InternetOpenUrlW(hInternetSession, "http: нет рекламе", "", 0, 0, 0);
   if(hURL <= 0)
     {
      Alert("Ошибка при вызове InternetOpenUrlA()");
      InternetCloseHandle(hInternetSession);
      //  return 0;
     }
   else
      Print("Скачали файл "+hURL);

   int cBuffer[256];
   int dwBytesRead[1];
   string TXT="";
  while(!IsStopped())
     {
      bool bResult=InternetReadFile(hURL,cBuffer,1024,dwBytesRead);
      Print("bResult "+bResult);
      if(dwBytesRead[0]==0)
         break;
      string text = "";
      string text0= "";
      for(int i=0; i<256; i++)
        {
         text0=CharToStr((char)(cBuffer[i] &0x000000FF));
         if(text0!="\r") text=text+text0;
         else dwBytesRead[0]--;
         if(StringLen(text)==dwBytesRead[0]) break;

         text0=CharToStr((char)(cBuffer[i]>>(8  &0x000000FF)));
         if(text0!="\r") text=text+text0;
         else dwBytesRead[0]--;
         if(StringLen(text)==dwBytesRead[0]) break;

         text0=CharToStr((char)(cBuffer[i]>>(16  &0x000000FF)));
         if(text0!="\r") text=text+text0;
         else dwBytesRead[0]--;
         if(StringLen(text)==dwBytesRead[0]) break;

         text0=CharToStr((char)(cBuffer[i]>>(24  &0x000000FF)));
         if(text0!="\r") text=text+text0;
         else dwBytesRead[0]--;
         if(StringLen(text)==dwBytesRead[0]) break;

        }
      TXT=TXT+text;
      Sleep(1);
     }
   InternetCloseHandle(hInternetSession);
   Print(TXT);
   Comment(TXT);
// return(TXT);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   return(rates_total);
  }
//+------------------------------------------------------------------+


Беда в том что если даже изменить страницу к которой обращаюсь то данный код возвращает первую страницу.

Понять не могу откуда код берет первую страницу ...

Сложилось ощущение что при повторном обращении на тотже самый адрес код не читает страницу из интернета а берет её из кеша.

Тоесть если на странице при первом запуске было 10000 то если мы изменим на  блофкыплфоырвапгывкшдплфдылгарп то всеравно код будет возвращать 10000. Понять не могу в чем трабла....

TheXpert
18307
TheXpert  
Возможно стоит покурить флаги.
Vladimir Pastushak
98910
Vladimir Pastushak  
Комбинатор:
Возможно стоит покурить флаги.

да как то тут с флагами не очень bool bResult=InternetReadFile(hURL,cBuffer,1024,dwBytesRead);
Vladimir Pastushak
98910
Vladimir Pastushak  

да , действительно, при повторном обращении к интернет адресу не зависимо от контента берется страница из кеша браузера.

Как вычислил, сделал поиск по всему пка имени страницы и нашел её в кеше ИЕ. Удалил и следующий запуск уже правильны, следующий уже нет..

Renat Akhtyamov
16177
Renat Akhtyamov  
Vladimir Pastushak:

Возможно ли из индикатора обратиться к внешнему сайту ?

Веб реквест оказывается из индикатора не работает...

тоже надо, иначе только советник стряпать и заставлять торговать, если в маркет....
TheXpert
18307
TheXpert  
Vladimir Pastushak:

да как то тут с флагами не очень bool bResult=InternetReadFile(hURL,cBuffer,1024,dwBytesRead);

Флаги есть до этого в open и openurl, среди них есть управление кэшем и много другого.
TheXpert
18307
TheXpert  

INTERNET_FLAG_NO_CACHE_WRITE

INTERNET_FLAG_RELOAD

InternetOpenUrl function (Windows)
  • msdn.microsoft.com
Opens a resource specified by a complete FTP or HTTP URL. Syntax Parameters hInternet [in] The handle to the current Internet session. The handle must have been returned by a previous call to InternetOpen. lpszUrl [in] A pointer to a null-terminated string variable that specifies the URL to begin reading. Only URLs beginning with ftp:, http...
Vladimir Pastushak
98910
Vladimir Pastushak  
Комбинатор:

INTERNET_FLAG_NO_CACHE_WRITE

INTERNET_FLAG_RELOAD


да да спасибо !Я разобрался!
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий