Всем привет!
Ранее мы рассматривали варианты выдачи информации, которую формирует скрипт на QLUA. Был выпуск, в котором я показывал как из таблицы сообщений перенести информацию в Эксель. Также рассматривал как записать информацию в файл. И был выпуск, в котором я показывал как отражать информацию в своей таблице QUIK. За исключением, пожалуй, последнего варианта информация выдавалась в каком-то не очень красивом формате. Сегодня я хотел бы показать способ оформления отчета в том виде, в каком Вам было бы его комфортно читать – можно выделять информацию цветом, сводить в таблицы и прочее. Хотя, если сказать по правде, этот вариант больше является версией записи информации в файл. Только записывать мы будем не просто в текстовый файл, а в файл формата HTML. При этом сформируем файл в данном формате. Просматривать его можно будет любым браузером.
Безусловно, для такой реализации нам потребуется знание HTML верстки и правил стилизации элементов на страницах html. Но, мы не будем использовать слишком сложные вещи.
В качестве примера, я запрошу у QUIK все доступные фьючерсы и выведу по ним информацию в табличном виде. Для решения этой задачи потребуется изучить новые функции QLUA (которые ранее не рассматривали) и просто LUA.
Итак, для начала давайте рассмотрим функцию QLUA – getClassSecurities.
Эта функция выводит список всех инструментов определённого код класса. То есть, команда getClassSecurities("SPBFUT") выдаст нам список всех доступных фьючерсов. Но, перечислены они будут в одной строке через запятую. Что бы дальше с ними работать нам потребуется использовать команды LUA. Они позволят извлечь все коды инструментов из полученной строки. Для этого есть такие функции:
string.find
a, b = string.find(storka, ",");
Эта функция в переменную a поместит номер позиции символа «,» в строковой переменной stroka. А в переменную b поместит номер позиции, в которой эта подстрока (в нашем случае запятая) заканчивается. Для нас вторая переменная не нужна.
А вторая функция, которая нам понадобится – string.sub
element = string.sub(storka, 1, a-1);
Эта функция возвращает часть строки из переменной storka. Также нужно указать позицию начала искомой подстроки (в нашем случае это 1) и окончание искомой подстроки (у нас указано а-1). Если в качестве последнего аргумента указать -1, то мы укажем так на последний символ строки. Этот прием нам понадобится что бы вырезать остаток строки после вырезания первого инструмента.
Еще один прием, который нам потребуется для нашего скрипта (хотя можно обойтись и без этого) – работа с большими строками в LUA.
Вы помните, что строку можно положить в переменную так:
Perem = "тут текст строковой переменной. Может быть много текста. Но он не может переноситься на другую строку."
И этот текст не может переноситься в коде программы на другую строку. Иначе LUA воспримет этот перенос строки как окончание команды и выдаст ошибку из-за незакрытой кавычки.
Но, можно написать так:
local text_html = [[
<html>
<table>
<tr>
<th>№п/п</th>
<th>Код фьючерса</th>
<th>Базовый актив</th>
<th>ГО покупателя</th>
<th>ГО продавца</th>
<th>Дата экспирации</th>
<th>Ссылка</th>
</tr>
]];
При таком написании в переменную text_html поместиться описанный текст. Просто этот текст гораздо проще корректировать.
Итак, что сделает наш скрипт:
- Командой getClassSecurities("SPBFUT") получим список всех доступных фьючерсов;
- Командами string.find и string.sub обработаем строку, которую выдала команда getClassSecurities и все коды фьючерсов положим в отдельный массив.
- Сформируем переменную с html версткой начала файла. В ней будет верстка начала нашей таблицы.
- Пройдемся по массиву с кодами фьючерсов. По каждому фьючерсу получим информацию о ГО, дате экспирации. Также сформируем ссылку на страницу фьючерса на сайте мосбиржи.
- Из данных по каждому фьючерсу сформируем верстку для html файла для строки таблицы. Полученный код добавим в переменную с html версткой.
- После окончания прохода по всем фьючерсам добавим в переменную html верстки код, закрывающий таблицу и завершающий html файл.
- Запишем переменную с html версткой в файл.
Реализованный скрипт можно скачать тут.
Какие комментарии я хотел бы сделать по коду. Как и ранее максимально выделяем различные операции в отдельные функции. Это проще, понятнее, при необходимости функции можно использовать в других скриптах и все это гораздо проще редактировать.
Так отдельно реализованы следующие функции:
- функция, получает строку с перечнем фьючерсов, перечисленных через запятую и выдает первый элемент;
- функция получает перечень фьючерсов через запятую, и возвращает строку без первого элемента;
- функция формирующая начало html файла с версткой и стилизацией файла;
- функция формирует окончание html верстки с окончанием таблицы и завершением файла;
- функция, записывающая в файл данные из переменной с html версткой;
- функция получает код фьючерса и возвращает гарантийное обеспечение покупателя;
- функция получает код фьючерса и возвращает ГО покупателя;
- функция получает базовый актив;
- функция получает дату экспирации фьючерса.
Отдельно приведу код функции, которая формирует html разметку начала файла.
function init_text() -- функция формирует начало файла с шапкой таблицы
local text_html = [[
<html>
<style>
table{
font-family: Arial;
font-size: 12px;
width: 80%;
border-collapse: collapse;
border: 1px solid #000;
background-color: #F5F4F4;
}
th{
background-color: #DAD9D9;
}
td, th{
text-align:center;
border: 1px solid #000;
}
</style>
<table>
<tr>
<th>№п/п</th>
<th>Код фьючерса</th>
<th>Базовый актив</th>
<th>ГО покупателя</th>
<th>ГО продавца</th>
<th>Дата экспирации</th>
<th>Ссылка</th>
</tr>
]];
return text_html;
end
Между тегами <style></style> прописаны стили содержимого, в нашем случае таблицы. Прописан размер шрифта, цвет фона, цвет и размер границ между ячейками и пр. И именно тут можно менять стиль отображения выводимой информации.
После запуска данного скрипта сформируется файл result.html со следующим содержимым:
Посмотреть весь сформированный файл можно по ссылке.
Я использую брокера ВТБ и мне выдал в таблицу 362 доступных фьючерса. Пишите в комментариях сколько Вам выдал фьючерсов и кто у Вас брокер.
Если есть вопросы – то задавайте в комментариях.
Всем счастливо – всем пока!
=================================
Краткое содержание данного канала.
➖➖➖➖➖➖➖➖➖➖➖➖➖
Landingcentr.ru - разработка сайтов для малого и среднего бизнеса.
=================================