Блог им. morefinances

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

Сегодня:

Добавляем статистику по акциям роста и падения.
Составляем TOP лидеров роста и падения.
Быстрый поиск акций по тикеру в терминале.

Пока не перешли к следующей теме решил показать, как можно улучшить скринер акций, который делали ранее. Кто еще не знаком или уже забыл о чем был скрипт лучше вернуться и хотя бы бегло ознакомиться с логикой и пошаговым построением, чтобы было легче вникнуть в текущие изменения.

Напомню, что скринер выводил по тикерам акции, которые торгуются на Московской Бирже (за минусом бумаг с нулевыми объемами), и по ним через каждые 10 секунд проверял значение LASTCHANGE (% роста/снижения к закрытию прошлого дня) через getParamEx.

В первичной итерации скринер выглядел следующим образом:

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

Логично продолжить изменения скрипта и сделать расчеты, которые напрашивались, глядя на сам скринер: подсчитаем сколько бумаг торгуется в плюсе, сколько в «красной зоне». Также можно рассчитать средний процент роста/снижения всего по списку, плюс отдельно по растущим бумагам, отдельно по падающим.

Для этого для расчета средних введем переменные UpAver и DownAver, а для подсчета количества растущих и падающих бумаг SumUp и SumDown. Общую динамику по всем бумагам будем считать в TotalDelta. Также можно будет добавить еще % долю растущих и падающих бумаг.

Добавим в цикл for, который проходит по всем тикерам бумаг, следующие условия:

 Qlua: дополняем скринер акций статистикой, лидерами роста и падения.
Добавим вывод заголовков (только один раз, при построении таблицы,  когда индекс первой итерации index_two == 0)

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.
В целях оптимизации скорости работы скрипта будем фиксировать предыдущие значения по каждой переменной и только если они поменялись обновлять их в таблице:

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.
Функция mprint – это округлением до 2 знака через форматирование строки:

function mprint(numb)
  return string.format("%.2f", numb)
end


В блоке построения таблицы увеличим границу цикла до 28, чтобы у нас добавилось еще 3 строки:

for i=1, 28 do
  InsertRow(m_t,-1)	 
end


Запускаем скрипт, получаем:

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

Здесь:

242 – бумаги по которым сейчас работает скринер (исключены тикеры с нулевыми объемами «ACKO», «GAZC», «GAZS», «GAZT», «MGNZ» – они прописываются в самом коде, Polymetal пока не удаляю из мониторинга, т.к. надеюсь, что они всё же вернутся на нашу биржу).

Ср.всего – средняя динамика роста/снижения по всем бумагам, в %. Т.к. скринер преимущественно красного цвета, то и средняя общая динамика отрицательная.

Ср.рост – средняя динамика роста только по бумагам, которые торгуются в плюсе, в %. Таковых на момент скрина 57 бумаг, что составляет 23,6% от всего рассматриваемого массива компаний.

Аналогично Ср.сниж – средний % снижения по бумагам, которые в «красной зоне». Таких 177 или 73,1%.

23,6% + 73,1% = 96,7% куда делись еще 3,3%?

Это погрешность расчета? Нет, это доля в общем массиве тех компаний, по которым в моменте цена равна цене закрытия предыдущего дня (с учетом округления до второго знака): 8 компаний (включая POLY), это и есть 8/242=3,3%.

 

Составляем TOP лидеров роста и падения.

Добавим еще столбцы, в которых будем делать пересчет лучших и худших по динамике бумаг.

AddColumn(m_t, 21, " ", true, QTABLE_STRING_TYPE, 3)            -- столбец нумерации
AddColumn(m_t, 22, "TOPLIST", true, QTABLE_STRING_TYPE, 9) -- тикеры лучших
AddColumn(m_t, 23, " ", true, QTABLE_DOUBLE_TYPE, 7)            -- столбец значений
AddColumn(m_t, 24, "ANTI TOP", true, QTABLE_STRING_TYPE, 9) -- тикеры худших
AddColumn(m_t, 25, " ", true, QTABLE_DOUBLE_TYPE, 7)             -- столбец значений

Логично рейтинг сделать после того как уже будет сформирован массив DELTA со всеми текущими значениями роста/падения по бумагам, чтобы один раз пройтись по нему циклом и определить лидеров.

Нам понадобятся 2 массива TOPPLUS = {} и TOPMINUS = {}, которые мы определим в первой итерации цикла for и первыми значениями разместим {tikers[x], DELTA[tikers[x]]} первый тикер и его значение. Далее мы будем сравнивать и если новое значение больше минимального в списке лидеров или меньше максимального значения в списке худших, то в соответствующем массиве дополнять новым элементом. Как только любой из массивов превысит по этой логике 25 элементов будем удалять наихудший элемент.

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.


Аналогично с топом худших:
Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

Осталось полученные массивы TOPPLUS и TOPMINUS отдельными циклами вывести в новые столбцы таблицы:

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.
Здесь если в рейтинге лучших появляется ноль или отрицательные значения (может быть, когда весь рынок «красный»), то не выводим такое значение. Аналогично в худших: если появляется положительно число или ноль, то не выводим. При этом в обоих случаях стираем предыдущее значение и тикер.

Запускаем скрипт, получаем такой вариант скринера с расчетами и рейтингами:

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

Удобно видеть в онлайне (с обновлением через каждые 10 секунд) лидеров и антилидеров на фоне общей картины рынка.
Файл скринера на github. Цветовые настройки можно поменять в самом скрипте (задаются в OnInit)

Быстрый поиск акций по тикеру в терминале.

Так как в таблице присутствует в т.ч. акции 2 и 3 эшелона, которые не на слуху и которых не удобно по тикеру постоянно подглядывать в таблицу текущих торгов, то полезно использовать в терминале поиск по бумаге:

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

Если не находите на панели терминала, нажимаем правую клавишу мыши на панели квика, выбираем Поиск инструмента:

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

Вбив в форму поиска тикер бумаги и нажав enter получаем таблицу результата поиска:

Qlua: дополняем скринер акций статистикой, лидерами роста и падения.

Нас интересуют акции (код класса TQBR). Здесь можно как провалиться в биржевой стакан (двойной клик мышкой), получить информацию по инструменту (ALT +  I, либо: правая клавиша мышки,  Информация об инструменте) или построить график цены и объема (правая клавиша мышки, График цены и объема).

 

Желающие могут сократить массив тикеров и, например, оставить только ТОП100 компаний, либо только бумаги, которых входят в индекс Мосбиржи IMOEX (ТОП лидеров в этом случае вполне достаточно делать по 10 компаниям). Можете попробовать реализовать это в качестве самостоятельной работы. Но лично мне интереснее наблюдать динамику всего рынка, поэтому я смотрю в широком формате.

В качестве дополнительного упражнения желающие могут попробовать по аналогии с массивом предыдущих значений таблицы сделать соответствующие массивы предыдущих значений по полученным рейтингам (TOPLIST/ ANTI TOP) и обновлять эти данные таблицы только когда они в новой итерации поменялись.

Позднее мы еще вернемся к небольшим улучшениям данного скрипта, но уже после прохождения всех базовых тем для начинающих.

А в следующей статье мы рассмотрим тему работы через скрипт с биржевыми стаканами в терминале.

Теги: qlua для начинающих, кружок авиамоделизма.

Ранее:

Qlua: введение
Доля клиентов, использующих алгоритмическую торговлю
«Кружок авиамоделизма»
Разные торговые терминалы, почему Quik
Основной функционал qlua
https://smart-lab.ru/blog/917696.php

Настраиваем торговый терминал и редактор кода
Установка торгового терминала
Подготовка терминала
Вкладки в терминале
Сохранение и загрузка настроек
Таблица системных сообщений
Отключение окна сообщений
Редактор Notepad++
Настройка русского языка в редакторе
Выбор синтаксиса языка и кодировки
Цветовые настройки
Дублирующий просмотр
Запуск первого скрипта
https://smart-lab.ru/blog/918869.php

Основы qlua, часть 1:
message, конкатенация
фильтрация по сообщениям в терминале
PrintDbgStr, комментарии
типы данных, type
операции с числами
операции со строками
операции с таблицами
условные операторы
https://smart-lab.ru/blog/920031.php

Основы qlua, часть 2:
Циклы for … do … end, while do … end, repeat … until.
sleep, break, goto.
как пройти весь массив циклом, как пройти таблицу по ключам
локальные и глобальные переменные, функции
получение даты и времени
получение данных через getInfoParam
https://smart-lab.ru/blog/921366.php

Qlua: структура скрипта.
Структура типового скрипта qlua с примерами.
Обработка скриптом «обрыва связи» с сервером и возобновления работы.
Работа с файлами: запись, перезапись и чтение файла.
getScriptPath, getWorkingFolder
https://smart-lab.ru/blog/922044.php

Qlua: получение данных из таблицы текущих торгов, создание таблиц в торговом терминале.
Получение биржевых данных через функцию getParamEx
Выгрузка списка параметров функции getParamEx через DDE из торгового терминала
Создание пользовательских таблиц в торговом терминале
https://smart-lab.ru/blog/923365.php

Qlua: работа с таблицами (продолжение). Пишем своего советника (начало).
Интегрируем таблицы в структуру скрипта qlua.
Удаляем таблицы через DestroyTable.
Останавливаем скрипт через IsWindowClosed.
Обработка события закрытия таблицы через коллбэк.
Работа с цветом SetColor, Highlight, SetSelectedRow.
Пишем простого советника.
https://smart-lab.ru/blog/924710.php

Qlua: дополняем скрипт советника таймингом:
Устанавливаем время старта работы скрипта,
Ставим тайминг на получение сигналов на вход,
Устанавливаем таймер на приостановку скрипта.
https://smart-lab.ru/blog/925421.php

Qlua советник: дополняем сигналами на закрытие позиции, таблицей для вывода данных и расчетом финансового результата по позициям.
Дополняем сигналами на закрытие позиции.
Создаем дополнительную таблицу для вывода данных.
Делаем расчет финансового результата.
https://smart-lab.ru/blog/926972.php

Qlua: завершаем апгрейд советника:
Пропуск «поздних» сигналов на старте.
Обработка советником обрыва связи.
Сохранение сигналов и логов в файл.
https://smart-lab.ru/blog/927748.php

Qlua: пишем скринер акций Московской биржи
https://smart-lab.ru/blog/928152.php

Qlua: получение данных биржевых свечей с сервера брокера, обработка данных, пишем скрипт выгрузки котировок
Функция CreateDataSource
Получение количества свечек данных
Пауза для подгрузки данных
Получение по инструменту OPEN, HIGH, LOW, CLOSE, VOLUME
Обработка времени и даты
Закрытие источника данных
Примеры: получение данных последних 10 свечей, выгрузка новой минутной свечки после её закрытия, текущее значение простой средней SMA10 по минуткам
Простой скрипт выгрузки котировок
https://smart-lab.ru/blog/929905.php

Qlua: получение данных с графиков терминала.
Идентификатор инструмента
Получаем количество свечей через getNumCandles
Получаем свечные данных через getCandlesByIndex
Читаем данные с индикатора SMA
Данные с верхней и нижней линии Price Channel
Графики с таблицы текущих торгов.
Сравнение получение данных через CreateDataSource и через getCandlesByIndex
https://smart-lab.ru/blog/931408.php

Qlua: работа с метками, пишем торгового советника на индикаторах.
Вывод текста на график
Вывод графических сигналов
Удаление меток с графика
Торговый советник на индикаторах
Удаление данных вечерней/утренней сессии с графика.
https://smart-lab.ru/blog/933582.php

Qlua: работа с лентой всех сделок.
Что такое таблица обезличенных сделок.
Настройка таблицы в терминале.
Что делать, если таблица открылась, но она пустая.
Вывод данных с таблицы по DDE.
Работа с таблицей обезличенных сделок через скрипт qlua с примерами.
Пишем советника, показывающего на графике крупных игроков.
https://smart-lab.ru/blog/935919.php

Qlua: работа с лентой всех сделок (часть 2).
Различия данных ленты всех сделок и биржевого стакана.
Большие покупки и продажи в ленте сделок и динамика цены.
Альтернативные варианты поиск крупных игроков по ленте сделок.
https://smart-lab.ru/blog/938053.php

 

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
  • обсудить на форуме:
  • Quik Lua
3.5К | ★9
7 комментариев
Большое спасибо, за проделанную работу.
avatar
Можно написать пример, типа «Сервиса Оповещений», по индикатором, по цене, по уровню, что бы сигнал приходил, в Телеграмм, на мейл или смс и системное звуковое оповещение. При наступлении соответствующего запрограммированного события, как простого, так и сложного. По разным тайм-фреймам и инструментам. Заранее спасибо.
avatar
serg1209, конечно можно, попробуйте ;)
avatar
Большое спасибо
avatar
Актуальный релиз скрипта в этой версии:
github.com/morefinances/qlua/blob/main/stockscreener_v2_1_medium_final.lua 

Подправил в части стирания предыдущих значений рейтинга, если TOPLIST или ANTITOP меньше 25 бумаг:

if #TOPPLUS < 25 then
  for _ = #TOPPLUS, 25 do
    SetCell(m_t, _, 22, " ")
    SetCell(m_t, _, 23, " ")
  end
end

Аналогично и для #TOPMINUS.

Сегодня рынок выглядит так:



avatar
Добрый вечер! Для терминала QUIK хочу подключить скринер акций на базе индикатора CCI, с отображением текущего показания индикатора на заданном таймфрейме каждые 5 минут например. Все акции в одной табличке. Не могу найти как прикрутить индикатор к тикерам с отображением показаний. Можете чем нибудь помочь. Заранее спасибо если есть какой никакой исходник.
avatar
Kolivan2000, если это еще актуально: проще всего реализовать самостоятельный расчет индикатора по каждой бумаге (по нужному диапазону) и выводить в таблицу. 
avatar

Читайте на SMART-LAB:
Фото
ООО "Сергиевское" возвращается с новым выпуском облигаций (ВВ-.ru, 50 млн руб., YTM 25,07%)
🌾 Растениеводческая компания ООО «Сергиевское» возвращается с новым выпуском облигаций! 🌾 Основные предварительные параметры выпуска...
Рыночная ипотека восстанавливается на фоне снижения ставок
По данным ДОМ. РФ, число выданных ипотечных кредитов в России за май увеличилось на 24% г/г, до 79 тыс., а их объем вырос на 15% г/г, до 332 млрд...
Инвестиции без спешки: торгуем в выходные
Алексей Девятов Рынок часто движется импульсами, и тем важнее оценивать активы без спешки, не отвлекаясь на инфошум. Для этого отлично...
Фото
ЦИАН. Отчет МСФО Q1 26г. Такой рентабельности никогда не было
Вышли финансовые результаты по МСФО за Q1 2026г. от компании ЦИАН: 👉Выручка — 3,90 млрд руб. (+17,9% г/г) 👉Операционные расходы — 2,72...

теги блога alfacentavra

....все тэги



UPDONW
Новый дизайн