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

 

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

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

 
Vladimir Pastushak:

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

Wininet api в помощь, примеров предостаточно. Но это очень плохая практика, поэтому и вебреквест нельзя.
 
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. Понять не могу в чем трабла....

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

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

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

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

 
Vladimir Pastushak:

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

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

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

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

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

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...
 
Комбинатор:

INTERNET_FLAG_NO_CACHE_WRITE

INTERNET_FLAG_RELOAD


да да спасибо !Я разобрался!