Возможно ли из индикатора обратиться к внешнему сайту ?
Возможно ли из индикатора обратиться к внешнему сайту ?
Веб реквест оказывается из индикатора не работает...
Там проблемы с поточностью, когда индикатор на запросе встаёт в ожидание, то весь терминал отдыхает...
Нашел решение
//+------------------------------------------------------------------+ //| 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);
да , действительно, при повторном обращении к интернет адресу не зависимо от контента берется страница из кеша браузера.
Как вычислил, сделал поиск по всему пка имени страницы и нашел её в кеше ИЕ. Удалил и следующий запуск уже правильны, следующий уже нет..
Возможно ли из индикатора обратиться к внешнему сайту ?
Веб реквест оказывается из индикатора не работает...
да как то тут с флагами не очень bool bResult=InternetReadFile(hURL,cBuffer,1024,dwBytesRead);
Флаги есть до этого в open и openurl, среди них есть управление кэшем и много другого.
INTERNET_FLAG_NO_CACHE_WRITE
INTERNET_FLAG_RELOAD
- msdn.microsoft.com
INTERNET_FLAG_NO_CACHE_WRITE
INTERNET_FLAG_RELOAD
да да спасибо !Я разобрался!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Возможно ли из индикатора обратиться к внешнему сайту ?
Веб реквест оказывается из индикатора не работает...