Примеры: Разбор HTML средствами MQL4

 

New article Разбор HTML средствами MQL4 has been published:

HTML является одним из распространенных видов документов на сегодняшний день. Терминал MetaTrader 4 позволяет сохранять стейтменты, отчеты тестирования и оптимизации в виде файлов с расширением htm. Иногда возникает необходимость получить информацию из таких файлов в программе на MQL4. В статье показан один из вариантов получения структуры тегов и содержимого из HTML.

С точки зрения проcтого описания, тег - это любое слово, окруженное двумя угловыми скобками. Например, вот это тег - <тег>. Хотя на самом деле в языке HTML тегами являются только определенные слова, набранные латиницей. Например, <html> - правильный тег, а тега <html2> не существует. Кроме того, многие теги могут иметь дополнительные атрибуты, которые уточняют форматирование, осуществляемой данным тегом. Например, <div align="center"> указывает на наличие тега <div>, в котором дополнительно задан атрибут выравнивания содержимого тега по центру.

Обычно теги идут парами, существуют открывающий и закрывающий тег. Отличаются они между собой только наличием слеша. Если <div> - это открывающий тег, то </div> - это закрывающий тег. Все то, что находится между открывающим и закрывающим тегами, называется содержимым тега (content). Вот это содержимое обычно и интересует при разборе HTML-кода.

Author: MetaQuotes Software Corp.

 
Насколько проще был бы код, если бы поддерживался RegEx...
 

Еще бывает, что теги не закрывают. Будет тогда работать?

<p>

<table>

<tr><td><td><td>

<tr><td><td><td>

<tr><td><td><td>

</table>

 
Алгоритм просто вытаскивает структуру тегов. Проверку на валидность он не производит, как и не делает никаких предположений относительно корректности HTML. Все стальное - в руках программиста. Как правило HTML-отчеты, сформированные программным путем, не содержат явных ошибок с закрытием или написанием тегов.
 
теги <tr> и <td> закрывать не обязательно
 
На самом деле, проще обрабатывать HTML специальными средствами. К примеру - PHP, который специально для этого заточен, код будет проще, как для PHP так и для самого MQL4.
 
Rosh:
Алгоритм просто вытаскивает структуру тегов.

Уважаемый Рашид, я в своё время просил на форуме Рената или Станислава рассмотреть возможность создания отчёта о тесте (StrategyTester) в формате XML, чтобы проще было автоматизированным способом получать из него данные. Или текущий отчёт преобразовать в XML + XSLT, или добавить второй отчёт к существующему. Просьба, наверное, потерялась в сутолоке форума..

Вам попроще изнутри компании обсудить этот вопрос, отделить в отчёте данные от их представления. Может, всё-таки в 5-й версии терминала такой отчёт появится? Это было бы удобнее, чем парсить HTML, и, как верно выше заметили, без регулярных выражений это весьма непродуктивно.

 
мега зачот, как раз мне понадобилась инфа для парсера !!
 

А это вобще для чего нужно то?

 
Andy_Kon:
На самом деле, проще обрабатывать HTML специальными средствами. К примеру - PHP, который специально для этого заточен, код будет проще, как для PHP так и для самого MQL4.
Кроме PHP есть еще и другие, еще более заточенные под разбор регулярных выражений. Для извлечения информации из html-отчетов функционала, предложенного в данной статье, хватает за глаза.
 
chv:
Rosh:
Алгоритм просто вытаскивает структуру тегов.

Уважаемый Рашид, я в своё время просил на форуме Рената или Станислава рассмотреть возможность создания отчёта о тесте (StrategyTester) в формате XML, чтобы проще было автоматизированным способом получать из него данные. Или текущий отчёт преобразовать в XML + XSLT, или добавить второй отчёт к существующему. Просьба, наверное, потерялась в сутолоке форума..

Вам попроще изнутри компании обсудить этот вопрос, отделить в отчёте данные от их представления. Может, всё-таки в 5-й версии терминала такой отчёт появится? Это было бы удобнее, чем парсить HTML, и, как верно выше заметили, без регулярных выражений это весьма непродуктивно.


Валерий, дело не в том, что конкретно Вы не были услышаны. Невозможно создать программынй продукт, который учитывал бы все пожелания пользователей, потому что в итоге получится такой монстр, который убъет сам себя и пользоваться им не захотят. Компания исходит из того, что нужно и достаточно "дать удочку, чтобы пользователь сам поймал рыбку". Нельзя объять необъятное. Мне кажется, что для извлечения информации из стандартных отчетов терминала средств MQL4 более чем достаточно. Я не стал приводить примеры конкретного применения данного скрипта для, например, нанесения на график всех сделок из отчета, так как это рядовая задача для программиста на MQL4.