Избранное трейдера UnusSedLeo
Чтобы рассчитать сумму инвестиций, необходимую для получения определенного размера дохода, нужно желаемую сумму годового дохода разделить на дивидендную доходность акций. Таким образом инвестор будет получать дивиденды и не тратить основной капитал, чтобы его хватило на долгий срок.
Рассчитаем какую сумму нужно сейчас вложить в акции, чтобы жить на дивиденды. Допустим, потенциальному рантье нужно ₽70 тыс. в месяц, что примерно сопоставимо со средним размером зарплаты в России, которая в октябре 2023 года по данным Росстата составила ₽74 тыс.
В этом посте я расскажу, как я придумал себе инвестиционную стратегию, которая очень эффективно работает вот уже шестой год. Я также попытаюсь разобраться, с чем связан «феномен таблички»: почему сделанный на коленке инструмент вдруг начали использовать тысячи человек, а я (как автор) вдруг стал популярным в узких кругах. Начнём по порядку...
На дворе было лето 2018 года. Я всерьез задумался над вопросом: что делать с деньгами, которые лежат на вкладе под довольно скромные проценты? Это сейчас вклады под 15-16% норма, а тогда ключевая ставка была низкой, и вклады у меня были под 6-7% годовых. Валюта тоже была, но положить её под адекватный процент — задача и тогда была не из простых (а сейчас и подавно).
Ретроспективно (заглядывая в будущее, т.е. в сегодняшний день) можно было советовать к покупке однушки у метро, но а) я не настолько богат; и б) тогда это было не так очевидно. В любом случае, несмотря на обрушение российского рынка ценных бумаг в 2022, сейчас с доходностью всё в порядке. Но пост не об этом.
Каждый уважающий себя котлетер и туземунщик обязан стать «квалом». Вот и осенило меня на выходных, что хватит лениться, надо взять и получить статус квалифицированного инвестора, ведь ничего сложного в этом нет, нужно лишь оборот на 6 млн показать. Других способов квалифицироваться пока нет (👨⚕️ справка из дурки не подходит, 6 млн на счетах пока нет).
Квалифицированным инвесторам открываются закрытые двери следующих залов казино: pre-IPO, внебиржевой рынок, больше ВДО и больше ЗПИФов недвижимости. Также это разнообразные зарубежные ценные бумаги, структурные продукты и вот это вот всё — предстоит узнать. Лично мне на данный момент интересны ЗПИФы и ВДО. А что ещё заинтересует — посмотрим.Квалы, пишите в комментариях, что там ещё есть из любопытного.
Поскольку нужна торговая история за 4 квартала, у меня для этого подходит только Альфа. Поэтому докрутил необходимый оборот на фонде «Ликвидность», потратил на комиссии в районе 3000 рублей и полчаса времени. К слову, статус в Альфе можно только получить, перенести от другого брокера нельзя. Потом буду смотреть, можно ли будет его перенести из Альфы в БКС или куда-то ещё, чтобы покупать зарубежные бумаги.
Сегодня:
Работа с биржевым стаканом через getQuoteLevel2
Особенность нумерации в стакане заявок терминала квик
Работа через функцию обратного вызова OnQuote
Примеры работы со стаканом из скрипта
Сравнение реализации одного алгоритма через разные функции
Из таблицы текущих торгов мы можем получать большой перечень данных, в т.ч. по лучшим ценам спроса и предложения, из которых желающие получат спрэд по выбранному инструменту. Однако иногда нужно заглянуть именно в биржевой стакан. Это, например, пригодится нам далее при выставлении заявок.
Работать с биржевым стаканом можно через getQuoteLevel2 и функцию обратного вызова OnQuote.
Функция getQuoteLevel2 возвращает 2 массива котировок (bid и offer) и 2 значения: количество бидов в стакане (bid_count) и количество офферов (offer_count). Чтобы нам не было скучно разработчики терминала решили последних 2 параметра передавать в виде строки, поэтому при работе их нужно перевести в числа (через tonumber).
Массивы bid и offer содержат цены (price) и количество (quantity) по каждому уровню заявок стакана. Их также нужно будет предварительно перевести в число.
Продолжаем изучение 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.
Сегодня начинаем уже писать полноценные скрипты для терминала, а не отдельные блоки кода на lua.
Пройдем:
Структура скрипта
В торговом терминале можно запускать небольшие примеры на lua, как мы это делали ранее, но если говорить о постоянно работающем алгоритме, а не о компактной программе, которая должна выполнить только несколько коротких действий, то минимальная структура скрипта для квика будет содержать следующие функции:
function OnInit – инициализирует глобальные переменные и константы (например, торгуемые бумаги, размеры тейка и стопа, торговый счет и пр.), имена таблиц, необходимых файлов.
function OnStop – функция остановки скрипта, активируется при нажатии клавиши «Остановить» в панели скриптов терминала.
function main – основная функция, создает отдельный поток для выполнения скрипта. Обычно внутри main создается цикл для непрерывной работы, т.к. без него функция выполнит один раз весь код, который в ней прописан и скрипт остановится.
Продолжаем погружаться в основы языка. Сегодня рассмотрим:
Циклы for … do… end
while do … end
repeat … until
sleep
Как пройти весь массив циклом
Как пройти таблицу по ключам и значением
break
goto
Локальные и глобальные переменные
Функции
Получение даты и времени
Получение данных через getInfoParam
Цикл for … end
for index = start, end, step do -- start – начало отсчета, -- end – конец отсчета, step - шаг -- тело цикла end
Пример:
for i = 1, 10 do -- пройтись от 1 до 10 c шагом 1 (по умолчанию)<br /> message("i="..i) -- вывод i<br /> end
Можно задать шаг:
for i = 1, 10, 2 do -- пройтись с 1 до 10 с шагом 2 message("i="..i) end
Цикл while do...end
while (условие) do -- тело цикла end
Выполняет тело цикла, пока соблюдается условие. Если условие на старте не соблюдается, то цикл не запустится.
Пример:
a = 1 while a < 9 do a = a + 1 message(tostring(a)) end
Цикл repeat … until
Для людей уже торгующих через Quik можно перейти сразу к настройкам редактора кода, а тем, кто хорошо знаком с Notepad++, то сразу к запуску скрипта.
В прошлой статье я привел статистику ЦБ, что клиентов, работающих через мобильные приложения брокеров сейчас в разы больше тех, кто работает через торговые терминалы. По этой причине я решил кратко затронуть и установку квика, и поделиться полезными настройками на старте (хотя, полагаю, что среди аудитории смартлаба, доминирующая часть именно тех, кто с терминалом «на ты», продвинутые пользователи сами могут в комментариях указать свои лайфхаки по настройкам и работе).
Подробную инструкцию по работе в квике и всем возможным настройкам я не планирую делать – желающие могут найти всё это в виде различных статей, полезных обзоров, в т.ч. соответствующего мануала по терминалу от разработчиков. Здесь я лишь хочу коснуться основных моментов, которые сделают работу в квике более комфортной для глаз, удобной и быстрой в части работы со скриптами.