Скачать MetaTrader 5

Как из страницы интернета вытянуть данные в терминал ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как пользоваться виджетами на MQL5.community
Dmitry Luck'janenko
447
Dmitry Luck'janenko 2011.05.15 15:22 

Хочу написать индикатор который берет со страницы CBOE данные и высвечивает их в виде информера .

Адрес страницы http://www.cboe.com/data/IntraDayVol.aspx# .

У меня получилось загрузить страницу (точнее ее исходный код) в формате TXT. Но как работать с большим текстом чтобы найти нужные данные я не знаю .

Если кто может помогите разобратся чтобы получить эти цифры . Остальное я сам напишу .

Полученный мною файл прикрепляю .

Файлы:
o_o
Модератор
23725
o_o 2011.05.15 15:31  

вам надо "парсить" этот файл

ищите устойчивые уникальные словосочетания, для разделения кода.

для начала вижу уже с чего начать

<!-- BEGIN TOP SECTION -->

далее идет сразу ваша таблица.

распарсить её по тегам <TR> и <TR class="alt">

всё.

Dmitry Luck'janenko
447
Dmitry Luck'janenko 2011.05.15 15:55  
Хорошо . Как открыть и какую переменную или массив взять для обработки текста .
Dmitry Luck'janenko
447
Dmitry Luck'janenko 2011.05.15 15:57  
Я имею в виду вообще нужен массив или одна переменная . Если массив делать построчный, как узнать каким символом или кодом заканчивается строка .
o_o
Модератор
23725
o_o 2011.05.15 16:04  
lucka88:
Я имею в виду вообще нужен массив или одна переменная . Если массив делать построчный, как узнать каким символом или кодом заканчивается строка .

читайте файл посимвольно и ищите вхождение указанных строк.
Dmitry Luck'janenko
447
Dmitry Luck'janenko 2011.05.15 17:13  

Что сделал не правильно ?

string CboeTime["9:00 AM","9:30 AM","10:00 AM","10:30 AM","11:00 AM","11:30 AM","12:00 PM","12:30 PM","1:00 PM","1:30 PM","2:00 PM","2:30 PM","3:00 PM"];

Rustamzhan Salidzhanov
7684
Rustamzhan Salidzhanov 2011.05.15 17:39  
Найдите последний столбик в таблице и читайте из него данные
Dmitry Luck'janenko
447
Dmitry Luck'janenko 2011.05.15 21:46  

Спасибо за отзывы получилось . Но без сохранения в файл . Теперь посмотрим насколько это эффективно для торговли.

Еще доделать последнее изменение в верхнюю часть . Но это в торговое время .

Dmitry Luck'janenko
447
Dmitry Luck'janenko 2011.05.16 21:14  
Возникла еще одна проблемка !!! При чтении из интернета страница кешируется и последующие обращения берут страницу из кеша. Если терминал перезагрузить только тогда можно получить новое значение. Кто знает как исправить, откликнитесь пожалуйста .
//+------------------------------------------------------------------+
// Скачивает исходный код страницы CBOE  в текстовую переменную 
//                и возвращает как результат
//+------------------------------------------------------------------+
string ReadCBOE()
{
   if(!IsDllsAllowed())
     {
       Alert("Необходимо в настройках разрешить использование DLL");
       return(0);
     }
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
       Alert("Ошибка при вызове InternetAttemptConnect()");
       return(0);
     }
   int hInternetSession = InternetOpenA("Microsoft Internet Explorer", 
                                        0, "", "", 0);
   if(hInternetSession <= 0)
     {
       Alert("Ошибка при вызове InternetOpenA()");
       return(0);         
     }
   int hURL = InternetOpenUrlA(hInternetSession, 
              "http://www.cboe.com/data/IntraDayVol.aspx", "", 0, 0, 0);
   if(hURL <= 0)
     {
       Alert("Ошибка при вызове InternetOpenUrlA()");
       InternetCloseHandle(hInternetSession);
       return(0);         
     }      
   int cBuffer[256];
   int dwBytesRead[1]; 
   string TXT = "";
   while(!IsStopped())
     {
       bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
       if(dwBytesRead[0] == 0)
           break;
       string text = "";   
       string text0= "";   
       for(int i = 0; i < 256; i++)
         {
              text0= CharToStr(cBuffer[i] & 0x000000FF);
              if (text0!="\r") text = text + text0;
              else dwBytesRead[0]--;
              if(StringLen(text) == dwBytesRead[0]) break;
              
              text0= CharToStr(cBuffer[i] >> 8 & 0x000000FF);
              if (text0!="\r") text = text + text0;
              else dwBytesRead[0]--;
              if(StringLen(text) == dwBytesRead[0]) break;
              
              text0= CharToStr(cBuffer[i] >> 16 & 0x000000FF);
              if (text0!="\r") text = text + text0;
              else dwBytesRead[0]--;
              if(StringLen(text) == dwBytesRead[0]) break;

              text0= CharToStr(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);
   return(TXT);
} 
o_o
Модератор
23725
o_o 2011.05.16 21:36  
lucka88:
Возникла еще одна проблемка !!! При чтении из интернета страница кешируется и последующие обращения берут страницу из кеша. Если терминал перезагрузить только тогда можно получить новое значение. Кто знает как исправить, откликнитесь пожалуйста .

InternetOpenUrlA(Net.Session, URL, nill, 0, FLAG_RELOAD|FLAG_PRAGMA_NOCACHE, 0);
Dmitry Luck'janenko
447
Dmitry Luck'janenko 2011.05.17 05:35  
Спасибо ! получилось.
1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий