Блог им. 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
★8
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

теги блога alfacentavra

....все тэги



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