Проект: Инструмент-помощник для инвестора  Публичный пост
2 июля 2021  2817
Инструмент-помощник для инвестора
https://t.me/portfolio_helper_bot

Всем привет.

Так получилось, что мне повезло лет 5 назад познакомиться с практикующими трейдерами, которые зарабатывают деньги на управлении капиталом клиентов и делают это успешно. Управляют капиталом по договору, всё честно. Для работы трейдеры используют некоторые инструменты, которые мы написали по их заказу. Эти инструменты облегчают жизнь трейдерам. Одной из фичей этого инструмента (десктоп приложение, плагин к 🇺🇸 InteractiveBrokers или 🇷🇺 quik в зависимости от рынка) является ребалансировка. О ребалансировке написано тут, и тут, например. Если кратенько, то это подход к управлению активами, когда продаем что подоражало для того, чтобы купить что подешевело. Считается, что в долгосроке это даёт дополнительные процентные пункты к общей доходности. Это работает не всегда, некоторые инвесторы не делают ребалансировку, но такой подход приветствуется.

💡 Идея: Бот для ребалансировки и не только

А почему бы не поделиться профессиональным подходом со всеми частными инвесторами на бирже? Например, с помощью телеграм бота, который в нужное время подскажет, что пришла пора ребалансировки - это редкое событие, но важное. Сказано - сделано.

Встречайте, бот-помощник по портфелю 🎉🎊🥳 : https://t.me/portfolio_helper_bot

⚠️ Бот написан небольшой командой на досуге, это надо учитывать и понимать скорость добавления новых фич, но ведем переговоры/поиск инвесторов, чтобы превратиться в стартап.

🏗 Как это всё работает

  1. Присылаем боту портфель (можно текстом, можно excel-файликом. В будущем, будем читать отчет брокеров). В колонке ticker может быть как собственно тикер бумаги, так и название эмитента бумаги. Пример содержания excel файла:

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


    Если в какой-то момент доля YNDX станет равна 30% от портфеля и мы выставили алерт о необходимости ребалансировки - бот любезно сообщит нам об этом и порекомендует продать часть RU000A0JXN21, чтобы купить YNDX до уровня 40% от портфеля.

    🍽️ Лайфхак: Если вы сформировали свое видение портфеля, но лень считать объемы в текущих ценах - боту можно сказать, что текущий объем бумаг равен 0, а желаемый процент X%. Указать денежные средства с желаемым процентом 0%. И сделать ручной вызов ребаланса (такая функция тоже есть) - бот подскажет в каком объёме и по какой цене создать заявки.

    Пример:

    Проверяем

      77*5171.6 + 594*101.0*10 = 998153.2
    

    ⚠️ цена облигаций указывается в процентах, а номинальная стоимость для указанной бумаги 1000 рублей, поэтому пришлось добавить множитель на 10 (101.0/100*1000). Но для пользователя прозрачно - он в любимом приложении/терминале набирает для данной бумаги объём - 594 и цену 101.

    В дальнейшем добавим напоминание по интервалам.

  3. В нужный момент времени бот сообщит о необходимости ребалансировки и подскажет, что купить, а что продать, в каких объёмах и по какой цене.

  4. 📈 Повышаем итоговую доходность портфеля

🍰 Что ещё есть?

Так как бот мониторит текущую цену на рынке, то дополнительно нотифицирует пользователя:

  • О текущей стоимости портфеля, чтобы не лезть каждый раз к брокеру на сайт, а получать один раз вечером сумму портфеля и радоваться. Пример:

  • Об изменении общей стоимости портфеля. Например, поставить себе алерт на просадку портфеля на 15%, чтобы принимать решения

  • Об изменении стоимости позиции в портфеле. Например, для отслеживания рискованной позиции, чтобы зафиксировать прибыль. В убыток же никто не работает, правда? 😉

✨ А что ещё будет?

Roadmap такой

  • Добавление западных бирж NYSE/NASDAQ/etc и крипта. Сейчас только MOEX, в ближайшем будущем SPB
  • Ребалансировка по отраслям в дополнение к ребалансировке по бумаге
  • Бенчмарк текущего портфеля. Может быть, проще купить индекс или фонд? Бот сравнит доходности
  • Подбор портфеля по риск-профилю. Ну это не рокет сайнс, фича популярная, но удобнее, когда всё в едином окошке
  • Еще есть идеи на отслеживание новостного фона и отчётностей компаний для нотификации, если что-то идет не так, но это больше спекулятивные истории, в первую очередь хотим сосредоточиться на пассивных инвестициях

О нововведениях сообщит сам бот, лайк, подписка)

🏦 А что с моделью монетизации и пользователями ?

Бот пока бесплатен, но в дальнейшем предполагается подписка. Когда начинали разрабатывать бота, сперва казалось, что фиксированная цена за удобство - хорошее решение. Но затем внезапно нас озарило, и мы придумали удачную модель монетизации, смысл которой в следующем. Итог работы бота - потенциал в увеличении итоговой доходности портфеля, а значит естественной моделью будет стоимость, которая зависит от общей стоимости портфеля. Если кто-то управляет портфелем в пару миллионов долларов, то, вероятно, это более платежеспособный клиент, чем айтишник, который после двух бэх со своих 300 какосеков отложил с барского плеча на фондовый рынок треть своей зарплаты.

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

🌬 Инсайты при разработке

Некоторые планируемые фишки бота вполне способны жить самостоятельно в виде API. Например, приведение отчётов брокеров к единому формату, чтобы можно было делать больше сервисов и создавать рынок инструментов для фондовой биржи. Загружаем в API отчёт брокера, на выходе получаем строгую схему - удобно и много кому может потребоваться. Еще пару инсайтов ниже

🚲 Технологический стек

  • Язык - python. Для новых фичей планируем golang. Python заюзали по причине имеющихся наработок по меню и хорошей библиотекой. В ней в коробке идет сохранение стейта по чату, юзеру.
  • База данных - PostgreSQL. Сперва был SQLite, но как только вынесли получение информации с фондового рынка в отдельный процесс, напоролись на лочку. Благо не так много было написано кода, переход был быстрый. Если планируете несколько процессов, сразу берите что-то отличное от SQLite.
  • Данные для торгов берём из публичного API MOEX. Съели кактус 🌵 пока пробирались сквозь дебри уже неторгуемых бумаг. Но теперь все отличают TQBR от EQDB и прочих наборов букв для классов инструментов MOEX.
  • Для сбора данных с биржи используем celery, работает в отдельном процессе (ещё точнее - отдельный docker контейнер)
  • Хостим бота на VPS, в 🇳🇱 NL - поближе к серверам телеграмм. Ping 3-6 ms
  • 🚀 Деплой в прод по кнопке в gitlab 😍
  • Поиск бумаг с использованием нечеткой логики. Если не нашли тикер - пытаемся искать по полному названию фирмы. То есть, можно вместо SBER, написать "сбер", бот сам найдёт нужный тикер. А так как чукче-продуктологу неймется, этот функционал планируем тоже вынести в отдельное API. Кроме того, у нас есть небольшой список псевдонимов или жаргонных названий фирм. Например, "гамак" - это норникель, "лук" - лукойл, а "яша" попробуйте угадать.

🤝 Как нам поможет клуб

  • Фидбэк о проекте
  • Фидбэк по видению - мы хотим делать инструменты для удобного и грамотного управления активами. Ребаланс - это первый шажок
  • Советы по продвижению. Недавно появился клуб, который собирает людей, знающих толк в инвестициях. Где ещё посоветуете продвигать? Hackernews? Producthunt? Или лучше сарафанное радио?
  • Контакты в фондах, куда мы можем прислать презентацию о продукте и формировании экосистемы вокруг него (не ограничиваться же только одним ботом?!)

Да пребудет с нами сложный процент!


UPD:

💗 Как нам уже помог клуб

  • @mixbez показал, что в любом продукте можно придумать очень гибкую систему монетизации
  • Спасибо @vikeyer и его комментарию. Совет по запуску проектов: запланируйте время на документацию и справку. Если неделю пишите, 6 дней потратьте на документацию. Надо любить пользователя и помогать ему понимать возможности продукта
  • Спасибо @MjH-AO за активное использование и подробную обратную связь! вастрик клуб, ты торт!
Связанные посты
33 комментария 👇
Миша Безверхий управляющий изделием 2 июля 2021
  1. Офигенно, что можно отправить боту таблицу
  2. При вводе поштучно хотелось бы не нажимать каждый раз кнопку ADD / EDIT ASSETS
  3. Пока вы работаете только с московской биржей, но язык бота английский, немножко диссонанс :)
  4. Сама идея бота под ребаланс - это удобно и хорошо

Но ещё у меня есть вопрос:

Итог работы бота - потенциал в увеличении итоговой доходности портфеля, а значит естественной моделью будет стоимость, которая зависит от общей стоимости портфеля. Если кто-то управляет портфелем в пару миллионов долларов, то, вероятно, это более платежеспособный клиент, чем айтишник, который после двух бэх со своих 300 какосеков отложил с барского плеча на фондовый рынок треть своей зарплаты.

О портфеле вы узнаёте только со слов самого пользователя, вы не видите портфель клиента в его брокерском аккаунте.
Кто мешает человеку, управляющему 2 миллионами долларов, прописать размеры своих позиций в 20 раз меньше?

  Развернуть 1 комментарий

@mixbez, спасибо 🙏

Ожидал вопрос про то, что при такой модели монетизации кто-то сможет указать портфель в 10 раз меньше, но тогда каждый раз придется помнить, что надо итоговую цифру по объему и по необходимым заявкам умножать на 10. В дальнейшем хотим еще сделать экспорт в формат терминала, чтобы нажать кнопку - скачать файлик и скормить терминалу, все автоматом. Тогда такой трюк не прокатит)

  Развернуть 1 комментарий

@yse, да, если экспорт будет более автоматизирован, обман будет куда более затратным по своим издержкам

При этом я бы все равно искал какую-то иную дифференциацию штанов.

Как варианты, что-то такое:

  • По количеству тикеров в портфеле (у новичка с совсем маленьким портфелем их не больше 10, у старичка с портфелем в миллионы - уже может быть больше; а если у него не больше, то ему за автоматизацию по 10 бумагам платить обидно)
  • По доступности бумаг. Самое простое - если в портфеле присутствуют бумаги, недоступные неквалифицированным инвесторам, то человек получает более дорогую подписку.
  Развернуть 1 комментарий

@mixbez, мы бы сразу прикрутили автоматизацию по созданию заявок, но там есть нюанс. Например, для quik'а надо указывать идентификатор клиента, которому выставляется заявка. Прикапывать эту информацию не хочется, так как персональная информация. Есть пара мыслей по генерации на стороне клиента, но это не очень user friendly. Кароче, пока думаем как лучше сделать.

Монетизация по количеству бумаг тоже думали, можем в итоге возьмем эту модель. Сейчас пока фокус на фичи и новые рынки. Когда бот задышит полной грудью - будем уже более массированную рекламу давать.

А вот идея насчет квалов - огонь 🔥 Спасибо!

Кстати, модель, зависящая от размера портфеля - наверное в B2B секторе взлетит. Так-то у нас математики написано много и ее как-то можно адаптировать для фирм по доверительному управлению, для хэдж фондов. А может быть бот будет бесплатен или с символической стоимостью, а монетизация в B2B секторе.

  Развернуть 1 комментарий
Виктор Воробьев шлепаю по кнопкам 2 июля 2021

Я кажется сломал вашего бота :(
Не отвечает на прикрепленный xlsx. Отсюда вопросы, ибо в доке кажется не очень понятно написано:

  1. Нужны ли заголовки ticker/volume/price?
  2. В какой валюте прописывать сумму покупки?
  3. Desired percent все таки optional или не optional?

Не уверен на чем оно еще могло сломаться.

  Развернуть 1 комментарий

@vikeyer, @yse к этому идея - можно давать ссылку на предзаполненный Google Spreadsheets с правами View - если такой скопировать себе, то сломать сложнее, чем заполнять по примеру скриншота

  Развернуть 1 комментарий

@vikeyer, записали себе фичу, что в случае ошибки хотя бы как-то пользователю сказать про это. Формат описан тут, обязательные параметры только тикер и объем. Если не указан процент, то посчитаем сами исходя из текущего объема.

Валюту покупки в валюте бумаги следует указать. Спасибо, неочевидно. Запишем.

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

  Развернуть 1 комментарий

@yse, я вроде по тому формату и сделал, но все равно что-то сломал) могу скинуть куда-нибудь, посмотрите, узнаете что не так пошло.

  Развернуть 1 комментарий

@vikeyer, Судя по логам, не хватает заголовков. На всякий случай вот пример, который можно расширять, добавлять.

Постараемся сделать информирование самим ботом, чего не хватает)

  Развернуть 1 комментарий

@yse, да, теперь вроде прошло. Рискну предположить что помимо заголовков я сломал валютой. По логике вещей в зависимости от того где ты живешь, у тебя валюта может иметь\не иметь price, и по большому счету всегда может иметь volume в виде float.

  Развернуть 1 комментарий

@vikeyer, спасибо за идею! уже прикрутили фичу - если какая-то проблема в файлике, бот сообщит в чем проблема (например, кинули вообще не эксель файл), ну или хедер битый. Не все случаи ловим, но основные. В случае проблемы админам бота присылается файлик для анализа. Кароче, спасибо и лучи добра в карму 🙏

  Развернуть 1 комментарий
Andrey Oskin Back-end, Analytic, LLM 2 июля 2021

Предлагаю кросс-постнуть у Комаровского Павла. Вижу что ты там же. Получишь более подробную обратную связь с фин стороны.

  Развернуть 1 комментарий

@MjH-AO, да, это было мощное совпадение. У меня был драфт статьи для вастрика, а тут Павел анонсирует свой клуб. Да, туда следующим шагом напишем, но уберем немного подробностей технических. Про SQL там мало кому интересно)

  Развернуть 1 комментарий

@yse, только дочитал до конца и увидел, что зающать "клуб" в планах 👍 очень круто, буду тестить.

  Развернуть 1 комментарий

@MjH-AO, спасибо 🙏

p.s. привет бауманцам) и вроде как мы даже шапочно знакомы, общие знакомые точно есть

  Развернуть 1 комментарий
Владимир Кулагин Квантовый аналитик, CFA, страх и ужас программистов (манагер то бишь) 2 июля 2021

У всех подобных менеджерилок есть проблема с realtime менеджментом портфеля. После каждой сделки приходится менять текущие веса.

В итоге приходим к старому DDE+QUIK или же самопалу на QLUA.

  Развернуть 1 комментарий

@Whispered, первым нашим продуктом было standalone-приложение, которое коннектится к TWS и QUIK. С TWS проблем нет, там ничего так API, а вот с QUIK'ом после долгих боёв настроили RPC вызовы из клиента, а в QUIK слушает lua-сервер. Но потом приехало обновление на 8 версию, либина для RPC тоже обновилась, до сих пор выуживаем новые баги. И вообще, нормальный терминал для РФ - это хорошая тема для бизнеса, но надо много денег, QUIK боль.

А насчет нотификации о необходимости ребаланса, даже без автоматизации - вполне рабочая схема. А если прикрутить отраслевую ребалансировку, то можно самим пилить аналоги ETF. Кстати, про ETF - подписан на твои каналы, фидбек от тебя ништяк.

  Развернуть 1 комментарий
Andrey Oskin Back-end, Analytic, LLM 2 июля 2021

Хочется иметь кнопку "сделал, как сказано" после рекомендации ребалансировки, чтобы бот обновил портфель.

Я понимаю, что видение, что человек зайдет в свою эксельку и поправит, но у меня скажем интерес запустить несколько текстовых виртуальных портфелей на 1 млн и наблюдать за ними внутри бота.

  Развернуть 1 комментарий

@MjH-AO, хорошая мысль 🔥 Видение как раз на максимальную автоматизацию.

  Развернуть 1 комментарий
Andrey Oskin Back-end, Analytic, LLM 2 июля 2021

Вот это странно выглядит:

✅ Alert created.
You will be notified when cost of any position in portfolio changed on ±5.0%

И тут же:

You have no alerts yet
More about alerts.

  Развернуть 1 комментарий

@MjH-AO, 😱 отдали в департамент тестирования (из целого одного человека! и тоже на общественных началах). Такие косячки могут всплывать, самое главное не забывать про них

  Развернуть 1 комментарий
Andrey Oskin Back-end, Analytic, LLM 2 июля 2021

Ещё на дурачка я сделал, что в сумме было 105%. Бот не сделал нормализацию и предложил мне купить акций на 100к, когда у меня всего 1кк.

  Развернуть 1 комментарий

@MjH-AO, да, сейчас валидации нет на сумму в 100%. Валидация немного усложняет UX, особенно для телеграм ботов. Наверное, стоит ограничиться что-то типа варнинга и пока дать на откуп пользователю, редактировать портфель можно.

  Развернуть 1 комментарий
Andrey Oskin Back-end, Analytic, LLM 2 июля 2021

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

  Развернуть 1 комментарий

@MjH-AO, а здесь немного не понял. Один из следующих пунктов - если дивиденды капнули, то они автоматом зачисляются на счет и предлагается ребалансировка в автоматическом режиме. Наши друзья-трейдеры-консультанты топят за эту фичу как за одну из приоритетных. Дивы часто капают и было бы неплохо иметь отслеживание с готовым результатом чего купить)

  Развернуть 1 комментарий
Andrey Oskin Back-end, Analytic, LLM 2 июля 2021

Фича: сделать алерт ребалансировки по времени, скажем, раз в пол года или год.

  Развернуть 1 комментарий

@MjH-AO, в статье я вскользь про это написал, видимо, надо чуть шире мысль раскрыть. Это в планах, верно. Есть разные стратегии ребаланса, кто-то просто в конце года балансит, кто-то раз в полгода. Обязательно такая фича должна быть.

  Развернуть 1 комментарий

Сам себе пишу такой же * функционал как CLI, поэтому просто напишу чего не хватает в вашем боте лично мне.

* без плагинов, чисто выдавать инфу, не доверяю ботам, предпочитаю руками совершать сделки

  1. Предположение что у тебя один брокерский счёт в среднем неверно для большого количества людей, процентов 15 точно наберётся легко. Простой пример: ИИС + квал инструменты.
  2. Оптимизация buy only для ЛДВ.

Могу только сказать как я решил у себя, если вы придумаете способ лучше, буду только рад его выслушать.

У каждого тикера есть три режима - продай\купи, только докупай, не трогай, это в другом брокере. По сути третий режим нужен только для многоуровнего режима (например, я хочу FXUS + AMVF = 57% портфеля, и внутри бакета хочу 80% FXUS 20% AMVF).

  Развернуть 1 комментарий

А есть код бота для так сказать общего пользования ? все хочу что то подобное для крипты just for fun сделать😂

  Развернуть 1 комментарий

Привет, хочется понять, как полет? Я, честно говоря, не пользуюсь и со сменой работы ребалансировку делал выводами 😅

  Развернуть 1 комментарий

@MjH-AO, привет!

Мы достаточно много времени убили вот на какую фичу - проверяли возможность слать новости по эмитентам тех бумаг, которые есть в портфеле пользователя. Ну то есть ничего лишнего, только инфа о твоих бумагах. Но так и не нашли адекватных поставщиков новостей. Везде либо какой-то мусор, либо сильные задержки. А блумберг дороговат, да и они не особо любят, когда их стрим куда-то еще перестримливают.

Недавно вот вновь вернулись к этому боту, прикручиваем автоматическое добавление дивидендов в портфель. Выплатили дивы - вжух - добавили кэш к портфелю, прислали нотификацию с предложением о докупке в рамках выбранной стратегии. Но и тут нет нормального источника понятного по дивидендам. Делаем в полуручном режиме.

Кароче, двигаемся по мере сил и свободного времени. Из метрик - сейчас чуть больше 40 пользователей, пару десятков портфелей заполненных. То есть по сути пока для себя и делаем/используем.

  Развернуть 1 комментарий

В целом сложно пользоваться такой штукой в отрыве от постоянного поддержания информации о состоянии портфеля. Поэтому балансировка - это просто часть функционала трек тулы портфеля.

Отдельно использовать фичу ребалансировки - нет смысла. Это значит, что я сам помню точную дату, когда мне надо ребалансировку сделать, выгружаю инфу по портфелю, преобразую в формат для бота, отправляю получаю результат, пользуюсь.

Второй сценарий - использовать бота для полноценного трекинга портфеля, но не понятно умеет ли он автоматически учитывать диведенды/купоны/комисии/сплит. Если не умеет, то слишком много заморочек, ради ребалансировки или нотификации о стоимости портефля (которая будет не правильная).

В целом смотрите на проект snowball-income.com - уже все сделано, нормально работает, удобно. Есть еще один схожий проект, но названия не помню, к сожалению. Иногда внутри интерфейса брокеров есть ребаланс тулы, ну и множество сайтов, которые ребалансировку сделаю, только введите инфу о портфеле.

Мне кажется, что проект чуток опоздал. Для больших компаний, такой бот не нужен - там специальный софт комплексный. Для частных инвесторов слишком сложно (возня с отчетами) и это функционал закрыт более user-friendly проектами, чем интерфейс бота. Это скорее для небольшого сегмента гиков, кто хочет в телеграме иметь все под рукой.

  Развернуть 1 комментарий

А что мешает пользователю при планируемой системе монетизации для уменьшения стоимости забивать в конфиг бота бюджеты с каким-нибудь понижающим коэффициентом?
Например есть миллион, а бота прошу расcчитать на 100000, и плачу вам меньше

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб