alfacentavra
alfacentavra личный блог
03 августа 2023, 16:35

Qlua: пишем скринер акций Московской биржи

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

Нам понадобятся:

1. Таблица для вывода данных (строить уже умеем).

2. Получение данных из таблицы текущих торгов через getParamEx (проходили там же).

3. Тикеры бумаг. Можно взять конкретный список бумаг и работать с ним, но приятнее и правильнее, чтобы скрипт мог автоматом выгружать все торгуемые тикеры из терминала и далее уже отслеживать их динамику. Попробуем это реализовать.

Через sec_list = getClassSecurities(«TQBR») можно получить строку с тикерами акций на Московской бирже, которые будут разделены запятыми. Чтобы пройтись по всем элементам и записать их в массив используем цикл:

for TIKER in string.gmatch(sec_list, "[^,]+") do
  tikers[#tikers + 1]=TIKER
end


Отслеживать будем параметр LASTCHANGE – процент изменения цены от цены закрытия:

local delta = getParamEx(«TQBR», tikers[i], «LASTCHANGE»)

В настоящий момент на фондовой секции Мосбиржи торгуются 248 бумаги (некоторые показываются только индикативно, реальных торгов по ним не ведутся). Создадим таблицу 25 х 10 в которой будем отражать тикер и полученный с таблицы торгов данные, если бумага торгуется в плюсе закрасим её зеленым, если в минусе красным цветом, если без изменений, то без цвета.

Qlua: пишем скринер акций Московской биржи
 

Файл: https://github.com/morefinances/qlua/blob/main/stockscreener_v1_0.lua

Вроде бы всё работает, но не очень удобно искать по тикеру конкретную бумагу: логичнее расположить вывод из массива не горизонтально, а вертикально, переделаем.

Здесь также можно улучшить алгоритм: после получения значений в первой итерации сложим их по тикерам в массив DELTA и если в следующем цикле цифра не будет отличаться, то мы и не будем обновлять её в таблице, что существенно сэкономит нам время на обновление данных. По этой же причине локальная переменная delta теперь стала глобальной, т.к. используется далее вне цикла for.

Результат:

Qlua: пишем скринер акций Московской биржи
Файл: https://github.com/morefinances/qlua/blob/main/stockscreener_v1_1_vertical.lua

Уже лучшее, всё работает более быстро, чем в первой версии, но напрашиваются отдельные столбцы для чисел, чтобы они выглядели более форматно, а не плясали по строке то в одну, то в другую сторону.

Дополним скрипт, получим:

Qlua: пишем скринер акций Московской биржи
Файл: https://github.com/morefinances/qlua/blob/main/stockscreener_v1_2_columns.lua

И последнее: исключим те тикеры, торговля по которым сейчас не проходит, чтобы данные были максимально по рынку, а не «для коллекции». Для этого добавим функцию, которая будет исключать тикеры, по которым сейчас не проходят торги:

function exc_tik(stock)  
  t = {
    "ACKO",
    "GAZC",
    "GAZS",
    "GAZT",
    "MGNZ"
  }

  for i, v in ipairs(t) do
   if v == stock then return 1 end
  end

  return 0

end

 

И отфильтруем с помощью этой функции массив тикеров, полученных с биржи.

Из нулевых по объему оставил только POLY, надеюсь, что они оперативно вернуться на торги. Остальные белым выделены бумаги, которые в моменте торгуются по цене закрытия вчерашнего дня.

Результат:

Qlua: пишем скринер акций Московской биржи
Файл: https://github.com/morefinances/qlua/blob/main/stockscreener_v1_3.lua

Скрипт можно еще улучшать (будем возвращаться к этому позже), но главное – даже с таким минимальным багажом знаний по qlua можно делать уже вполне себе полезные вещи.

Для удобства изучения решил не перегружать текст кодом, который минимально отличается от версии к версии, а просто приложить соответствующий файл к каждой таблице. Последний вариант (файл v.1.3.) включает все озвученные изменения.
Желающие смогут залезть в код каждой версии и посмотреть изменения, либо потестировать/улучшить итоговый вариант.

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

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

33 Комментария
  • Ухо спекулянта
    03 августа 2023, 18:11
    Респект кодерам QLUA 
  • Ухо спекулянта
    03 августа 2023, 18:13
     А слабо скинуть код сеточника бесплатно? 
  • ЛешаКурочкин
    03 августа 2023, 18:40
    Подскажите а есть варианты кроме как через квик это провернуть?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн