Избранное трейдера Андрей из Сибири
Сегодня:
Работа с биржевым стаканом через getQuoteLevel2
Особенность нумерации в стакане заявок терминала квик
Работа через функцию обратного вызова OnQuote
Примеры работы со стаканом из скрипта
Сравнение реализации одного алгоритма через разные функции
Из таблицы текущих торгов мы можем получать большой перечень данных, в т.ч. по лучшим ценам спроса и предложения, из которых желающие получат спрэд по выбранному инструменту. Однако иногда нужно заглянуть именно в биржевой стакан. Это, например, пригодится нам далее при выставлении заявок.
Работать с биржевым стаканом можно через getQuoteLevel2 и функцию обратного вызова OnQuote.
Функция getQuoteLevel2 возвращает 2 массива котировок (bid и offer) и 2 значения: количество бидов в стакане (bid_count) и количество офферов (offer_count). Чтобы нам не было скучно разработчики терминала решили последних 2 параметра передавать в виде строки, поэтому при работе их нужно перевести в числа (через tonumber).
Массивы bid и offer содержат цены (price) и количество (quantity) по каждому уровню заявок стакана. Их также нужно будет предварительно перевести в число.
Поскольку я — дивидендный инвестор и инвестирую только в те компании, которые стабильно платят дивиденды, то решил проанализировать акции на нашей бирже и сделать выборку по самым длинным «безаварийным» промежуткам выплат.
Основной критерий отбора:
компания стабильно платит дивиденды не менее 10 лет без отмены!
В итоге, получилась следующая таблица. В столбце «не было отмен с начала выплат» отмечены те компании, которые вообще никогда не отменяли дивиденды с момента размещения на бирже или с самого начала их выплат:
Лидерами «безаварийной» выплаты являются:
✅ЛУКОЙЛ
✅Сургутнефтегаз
✅Транснефть
✅Ростелеком
✅НОВАТЭК
✅Татнефть
✅МТС
Данные компании стабильно выплачивают дивиденды на протяжении 19-23 лет!
Отдельно надо сказать про СБЕР — банк платит дивиденды с 2000 года, но в 2022 отменил выплату😔 первый раз в истории за 22 года!
В заключении скажу, что все эти компании из списка «лидеров безаварийной выплаты» есть в моём инвестиционном портфеле:
Сегодня рассмотрим:
Что такое таблица обезличенных сделок.
Настройка таблицы в терминале.
Что делать, если таблица открылась, но она пустая.
Вывод данных с таблицы по DDE.
Работа с таблицей обезличенных сделок через скрипт qlua с примерами.
Пишем советника, показывающего на графике крупных игроков.
Лента всех сделок (она же таблица обезличенных сделок, она же таблица всех сделок) — это тиковый массив сделок с одним или несколькими инструментами, в котором отражается информация по каждой сделке, в т.ч.: цена, объём и направление транзакции (покупка/продажа). Обычно для работы выбирается один инструмент, который отслеживается, реже 2 (например базовый актив и ближайший фьючерс на него). Встречал варианты, когда грузят сразу большой список, но в этом случае может сильно подвисать терминал.
Зачем нужна лента сделок: многие, пытаясь торговать внутри дня, проводят часы за медитативным наблюдением за биржевым стаканом. Однако стакан заявок это только намерение, далеко не все выставленные заявки перейдут в сделки. Более того иногда по некоторым акциям (2го и 3го эшелона) заявки в стакане могут активно «двигаться», создавая видимость, что в бумаге идет активная торговля, при этом, если открыть таблицу всех сделок, то будет видно, что реальных сделок практически нет.
Продолжаем следить за тем, что происходит с рынком жилой недвижимости. Прекрасное исследование подготовил ЦБ по проектному финансированию строительства жилых домов. Выписал самое главное. Спойлер: нераспроданного жилья становится всё больше. Рост зарплат отстаёт от роста цен на квадратные метры. Пузырь надувается, пружина сжимается. В обратную сторону.
1. 99% жилья строится на средства дольщиков (94% — эксроу-счета), лишь 1% — на свои средства. Меньше строить не стали, а лишь увеличили темпы.
Конвейер запущен, останавливать его нельзя.
www.cbr.ru/Collection/Collection/File/46282/pf_2023_Q2.pdf2. За последние 12 месяцев начали строить 45,6 млн метров жилья. Всего на данный момент 101 млн незавершённых метров. Продано на данный момент 73% в готовых объектах и 29% в незавершённых. Год назад продано было 80% готовых и 35% незавершённых.
То есть, доля непроданного жилья увеличивается. Льготные программы работают, конечно, но люди не могут осилить объёмы строительства.
Продолжаем погружение в основы qlua.
Идентификатор инструмента
Получаем количество свечей через getNumCandles
Получаем свечные данных через getCandlesByIndex
Читаем данные с индикатора SMA
Данные с верхней и нижней линии Price Channel
Графики с таблицы текущих торгов
Сравнение получение данных через CreateDataSource и через getCandlesByIndex
Торговый терминал позволяет получать данные по биржевым свечкам непосредственно из открытых графиков. Причем можно получать данные не только с котировок цены, но и с объемов, с индикаторов, а также, как мы увидим позже, с любых графических данных выведенных, например, с таблицы текущих торгов.
Получение данных котировок с графика цены.
Для начала на самом графике цены необходимо установить идентификатор.
Создаем график в торговом терминале, нажимаем правую клавишу мышки, выбираем «Редактировать», выбираем график цен:
Проваливаемся во вкладку «Дополнительно», и присваиваем id, например: SBER_ID:
Я проанализировал все взлеты и падения индекса МосБиржи на 10% и более за последние 20 лет.
Что получилось?
🔘С 2003 года рынок корректировался 82 раза.
🔘Средний % коррекции составляет 18,3%, а среднее время – 30 дней.
🔘Средний % роста рынка составляет 28,2%, а среднее время – 62 дня.
Что сейчас?
🔘С момента последней коррекции индекс вырос на 80% за 298 дней.
Подобный рост в % соотношении был лишь однажды в 2005 – 2006 году, тогда рынок акций за 129 дней вырос на 84,2%.
Если учитывать в расчетах дивиденды, то можно сказать, что текущая волна роста самая продолжительная за всю историю рынка!
🔘За 20 лет было всего 9 эпизодов роста нашего рынка на 50% и выше.
Пока не ушли далеко от темы получения данных из таблицы текущих торгов решил сделать в качестве примера еще и простой скринер акций. Это вполне доступно по тем материалам, которые мы уже прошли. Будем отслеживать динамику изменения цены относительно цены закрытия предыдущего дня.
Нам понадобятся:
1. Таблица для вывода данных (строить уже умеем).
2. Получение данных из таблицы текущих торгов через getParamEx (проходили там же).
3. Тикеры бумаг. Можно взять конкретный список бумаг и работать с ним, но приятнее и правильнее, чтобы скрипт мог автоматом выгружать все торгуемые тикеры из терминала и далее уже отслеживать их динамику. Попробуем это реализовать.
Через sec_list = getClassSecurities(«TQBR») можно получить строку с тикерами акций на Московской бирже, которые будут разделены запятыми. Чтобы пройтись по всем элементам и записать их в массив используем цикл:
for TIKER in string.gmatch(sec_list, "[^,]+") do tikers[#tikers + 1]=TIKER end
Отслеживать будем параметр LASTCHANGE – процент изменения цены от цены закрытия:
Сегодня дополним наш алгоритм советника следующими пунктами:
1. Пропуск «поздних» сигналов на старте.
2. Обработка советником обрыва связи.
3. Сохранение сигналов и логов в файл.
Еще один пункт, связанный со временем, который был выбран для апгрейда советника – это пропуск сигналов на старте, если запуск скрипта состоялся не в начале торговой сессии (например любой старт после 10:30). Это может быть полезным, если выбрана активная внутридневная стратегия и сигналы полученные на старте скрипта, например в середине дня, могут быть уже не актуальными (с низким потенциалом прибыли) и лучше дождаться новых. Т.е. необходимо разделить сигналы на те, которые сгенерировались на старте и остальные сигналы, которые будем далее брать в работу. Сигнал на старте может закрыться (по обратному/сигналу выхода) и если переоткроется снова, то его уже можно брать в работу как новый.
В нашем скрипте сигналы по каждому инструменту (массив signal) ранее могли принимать значение:
0 – вне позиции по инструменту
Продолжаем изучение qlua, cегодня:
Интегрируем таблицы в структуру скрипта qlua.
Удаляем таблицы через DestroyTable.
Останавливаем скрипт через IsWindowClosed.
Обработка события закрытия таблицы через коллбэк.
Работа с цветом SetColor, Highlight, SetSelectedRow.
Пишем простого советника.
В прошлый раз мы рассмотрели как с помощью qlua создать таблицу в торговом терминале и заполнить её информацией из таблицы текущих торгов. Но это была статичная табличка, чтобы её «оживить» нужно разместить операции с нашей таблицей внутри структуры скрипта в функции main.
Саму таблицу мы можем создать до цикла while и внести неизменяемые данные (в нашем случае тикер и наименование бумаги), а уже заполнить цифрами и обновлять внутри цикла. Пока будет работать скрипт таблица будет обновляться.
function OnInit() tikers = {"GAZP", "SBER", "VKCO"} progname = "mytable :" timeout = 5000 end function OnStop() do_it = false message(progname.." Финиш.") end function main() message(progname.
Я очень надеюсь, что в этом году этот список пополнится новыми героями. Многие из этих компаний я незаслуженно оставил за пределами своего портфеля. Но что же, все еще впереди:)
Кстати, этот список компаний точно не полный, пишите в комментарии, какие вы знаете еще компании, которые платят дивиденды не менее 10 лет, включая 2023 год.
Хотите читать действительно полезные статьи по финансовой тематике? Ставьте лайк и подписывайтесь!
Я так же стараюсь писать статьи для как можно большего количества людей, потому создал свой канал на дзен.
Все написанное в статье не является инвестиционной / индивидуальной инвестиционной рекомендацией или призывом покупать / продавать какие-либо ценные бумаги. Покупка ценных бумаг связана с риском частичной и полной утраты вложенных средств. Все инвестиционные решения вы принимаете самостоятельно.