Избранное трейдера ezomm
По BSPB ознакомился со стратегией развития до 2026 года. Трансформирую свой bear взгляд (который образовался на 280 после закрытия позиции) to neutral. В последние месяцы они начали делать то, что давно от них ждали – перестали сидеть на капитале и пошёл хороший буст активов. В ноябре пробили знаковый уровень – триллион рублей. Конечно, это уже сказалось на нормативах достаточности капитала (н1.2 13.5 на начало ноября). Вероятность увеличения пэйаута до 50 % я оцениваю теперь ещё ниже. Имеем дело в том числе с нормализацией метрик рентабельности.
В среднесрочной стратегии менеджмент таргетирует рентабельность капитала на уровне 18+ %. Без 20+% ROE трудно расти на 10% гг по активам и при этом дистрибутировать 50 %. Банк прямо сейчас стоит почти 0.6x капитала. Если увидим 0.5x книжки, то я, вероятно, вновь начну покупать. На ближайшую перспективу половина капитала – это в районе 180-190 за акцию. Модель дисконтированных дивидендов при моих вводных тоже указывает на этот диапазон, как справедливый.
.
РЕМ: Чтиво выходного дня.
.
Сегодня завершаем работу с заявками:
Функция OnTransReply
Функция OnOrder
Получение остатка по заявке, контроль исполнения полного объема
Таблица транзакций
Общая логика выставления лимитной заявки в стакане
В предыдущих примерах мы закладывали на обработку заявки небольшой таймаут (в пределах от 300 мс до 1 секунды), но правильнее отслеживать результат по коллбэкам, т.к. это время может быть и менее 300 мс, а может затянуться (по разным причинам) на секунды. Поможет нам в этом отслеживании функции обратного вызова OnTransReply и OnOrder.
Если отправляя заявку через sendTransaction мы на старте могли получить ошибку на стороне терминала (неправильно указанный торговый код/инструмент/класс рынка), то через OnTransReply мы получаем результат обработки нашей транзакции на сервере брокера (например ошибка при выставлении заявки из-за отсутствия подключения, либо у клиента нет прав на отправку транзакции конкретного типа, либо заявка не проходит по лимитам и пр.).
Функция OnTransReply возвращает ответ на транзакцию, выставленную средствами qlua.
Сегодня:
Узнаем общее количество заявок
Функции getNumberOf и getItem
Как пройтись циклом по всем заявкам
Вывод активных заявок
Снять скриптом заявку
Снимаем все активные заявки скриптом
Снимаем только заявки, выставленные конкретным скриптом
В прошлый раз мы научились выставлять скриптом заявки в терминале, теперь можем поработать с ними.
Выставим скриптом 5 заявок на покупку и продажу от лучших цен BIDи OFFERстакана заявок с шагом в 0,01.
Напишем функцию, которая будет выдавать нам необходимые цены (лучшую цену спроса и предложения) со стакана:
И возвращать -1, если предложения или покупки в стакане не найдены (стакан закрыт, либо нет торгов).
Тогда основной алгоритм в main будет выглядеть:
Если вы самостоятельно анализируете историю котировок с нашей MOEX (загружая данные в формате .csv из QUIK или откуда-нибудь их скачивая), то наверняка сталкивались с ситуациями различных ошибок и пропусков в данных, на поиск и обработку которых тратится много времени.
Поэтому решил я написать себе пару простеньких python скриптов, которые бы автоматически проверяли данные на пропуски и ошибки. Дальше, как обычно, все пошло по классике:
— У нас было 2 пакета ..., 75 таблеток ..., 5 упаковок ..., пол-солонки… и целое множество… всех сортов и расцветок, а также текила, ром, ящик пива, пинта… и… Не то что бы это был необходимый запас для поездки. Но если начал собирать ..., становится трудно остановиться.
Что получилось в итоге:
cleaner.py
Сегодня:
Работа с биржевым стаканом через getQuoteLevel2
Особенность нумерации в стакане заявок терминала квик
Работа через функцию обратного вызова OnQuote
Примеры работы со стаканом из скрипта
Сравнение реализации одного алгоритма через разные функции
Из таблицы текущих торгов мы можем получать большой перечень данных, в т.ч. по лучшим ценам спроса и предложения, из которых желающие получат спрэд по выбранному инструменту. Однако иногда нужно заглянуть именно в биржевой стакан. Это, например, пригодится нам далее при выставлении заявок.
Работать с биржевым стаканом можно через getQuoteLevel2 и функцию обратного вызова OnQuote.
Функция getQuoteLevel2 возвращает 2 массива котировок (bid и offer) и 2 значения: количество бидов в стакане (bid_count) и количество офферов (offer_count). Чтобы нам не было скучно разработчики терминала решили последних 2 параметра передавать в виде строки, поэтому при работе их нужно перевести в числа (через tonumber).
Массивы bid и offer содержат цены (price) и количество (quantity) по каждому уровню заявок стакана. Их также нужно будет предварительно перевести в число.
Сегодня:
Добавляем статистику по акциям роста и падения.
Составляем TOP лидеров роста и падения.
Быстрый поиск акций по тикеру в терминале.
Пока не перешли к следующей теме решил показать, как можно улучшить скринер акций, который делали ранее. Кто еще не знаком или уже забыл о чем был скрипт лучше вернуться и хотя бы бегло ознакомиться с логикой и пошаговым построением, чтобы было легче вникнуть в текущие изменения.
Напомню, что скринер выводил по тикерам акции, которые торгуются на Московской Бирже (за минусом бумаг с нулевыми объемами), и по ним через каждые 10 секунд проверял значение LASTCHANGE (% роста/снижения к закрытию прошлого дня) через getParamEx.
В первичной итерации скринер выглядел следующим образом:
Логично продолжить изменения скрипта и сделать расчеты, которые напрашивались, глядя на сам скринер: подсчитаем сколько бумаг торгуется в плюсе, сколько в «красной зоне». Также можно рассчитать средний процент роста/снижения всего по списку, плюс отдельно по растущим бумагам, отдельно по падающим.