В марте 2017 года в поддержку Тинькофф Банка позвонил клиент. Он только что продал со смартфона акции Apple, стоял в магазине и хотел расплатиться вырученными деньгами. Но вывод денег на карту занимает 20 минут. Тут мы поняли — чтобы обходить продуктовые ограничения, нужна собственная платформа.
Разработчики и продуктологи Тинькофф Банка рассказывают, как создавали своего брокера.
Разработчики и продуктологи Тинькофф Банка рассказывают, как создавали своего брокера.
Начали с малого
Мы решили делать Тинькофф Инвестиции летом 2015 года. Идея была простая — создать инструмент инвестиций для обычного человека. Для России это в новинку: у нас принято нести сбережения под процент в банк, а не покупать акции. Ставки по депозитам высокие, у государства есть программа страхования вкладов — стабильно и удобно. На Западе же история другая: ставки редко бывают выше 1-2%, поэтому даже домохозяйки заводят себе брокерские счета как источник дополнительного дохода. Мы не хотели упустить момент, когда наш рынок приблизится к западной модели.
Минимальный бюджет, чтобы зарегистрировать собственного брокера, — 20 млн рублей. Это без учета расходов на разработку и маркетинг. Чтобы сделать всё по уму, нужно еще больше денег. Мы не были готовы тратить столько на старте, поэтому стали искать партнера. И нашли — компанию БКС.
Наш партнер брал на себя техническую часть — исполнение биржевых сделок, уплата налогов, отчетность перед Центральным банком. Тинькофф привлекал и обслуживал клиентов, разрабатывал платежную часть и фронт. Многие процессы мы старались оптимизировать. В БКС всё выстроено для определенной группы людей. Они привыкли, что брокер — сложный и не очень отзывчивый механизм, но готовы разбираться самостоятельно, потому что у них есть компетенция. Мы же хотели, чтобы продуктом пользовались обычные люди, которые не начинают утро с аналитических отчетов и не знают особенности биржи. Например, после продажи ценной бумаги перевод денег с биржи идет от двух дней, а клиенты хотели моментально вывести деньги — ни один брокер не предлагает такого. С партнёром мы смогли сделать так, чтобы в часы работы биржи клиент мог вывести до 75% суммы сделки сразу после продажи.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/5346422/tild3264-3862-4561-a266-316562316635__4.jpg)
Кроме того, уровень обслуживания должен быть таким, к какому привыкли клиенты Тинькофф. Например, мы не могли позволить себе привозить клиентам на подпись толстую папку с документами, в то время как договор на дебетовые карты умещался на одной странице. Смогли сделать так, чтобы заявка на открытие счета занимала всего два листа.
После запуска мы получили такое количество заявок, что еле успевали их обрабатывать. Через полгода вышли на окупаемость и открывали каждый 4-й счет на бирже. Вскоре мы поняли, что работа через посредника сковывает потенциал продукта. Нам пора было создавать собственного брокера.
Собрали свою команду
Изначально команда Тинькофф Инвестиций состояла из трех человек — руководителя бизнес-линии, продуктового менеджера и одного разработчика. Мы были стартапом внутри большой компании. Кроме нашего проекта в банке делали сервис для покупки жилья в ипотеку и развивали услуги для малого и среднего бизнеса. Приходилось конкурировать за сотрудников банка с другими проектами — ресурсы-то общие.
Когда стали делать собственную брокерскую платформу, стали расширяться. Нам нужно было найти кандидатов без аллергии к экспериментам — а таких на консервативном рынке брокерских услуг мало. Кроме того, есть свои особенности: законодательство регламентирует, сколько человек должно работать в разных отделах и какой у них должен быть опыт. Например, руководитель брокера должен:
- иметь высшее образование;
- хотя бы два года до этого работать минимум руководителем отдела в финансовой организации и заниматься там ценными бумагами;
- не работать в последние три года в компании, которую лишали лицензии.
Мы собирали команду со всего рынка. На собеседование к нам приходили люди в костюмах, а в первый рабочий день переобувались в кроссовки и засучивали рукава — мы сильно отличались от других брокеров и финансовых организаций, в которых у них был опыт. Много людей привлекли из IT-компаний — это и сейчас наш основной источник найма.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/5346422/tild3966-6630-4632-b032-343464393738__1.jpg)
Разработали решения, которых не было на рынке
Перед началом разработки провели декомпозицию функционала, который за нас делал БКС. Определили, что нужно доработать, а что придется делать с нуля. У нас было две приоритетных задачи:
- Разработка микросервисной архитектуры, которая уменьшила бы зависимость от конкретных языков программирования и технологий. Дело в том, что каждую часть брокера мы написали на разных языках — Scala, Golang, Java и другие. Нужно было решение, которое позволило бы собирать из этих частей целый продукт и дорабатывать его при желании.
- Обработка данных онлайн. Чтобы моментально рассчитывать налоги, обновлять графики онлайн и оповещать клиента о достижении порога цены, мы должны быстро получать данные.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/5346422/tild3539-3338-4166-a637-383965366665__2.jpg)
Микросервисную архитектуру мы выстраиваем до сих пор и развивать ее будем еще долго. Когда работали с БКС, у нас было монолитное решение на Scala, поддерживать его могла только одна команда. Больше нам и не нужно было — ведь фактически мы были фасадом для партнера: занимались отображением данных, которое собирало API. Когда стали делать свою платформу, пришлось с нуля выстраивать множество сервисов, и ресурсов небольшой команды на Scala нам бы точно не хватило. Мы начали привлекать всех свободных разработчиков внутри Тинькофф, и чтобы не тормозить, стали формировать команды разработчиков без привязки к ЯП. В результате получилось лоскутное одеяло, написанное на разных языках.
Например, лента новостей изначально была в общем монолите нашего «фасада» и написана на Scala, потом мы добавили к ней кусок на Java, а затем решили переписать полностью и выделить в отдельный модуль на Golang.
Для корректной передачи данных нужно было настроить прямую интеграцию с фондовыми биржами — это крупный проект для получения рыночных данных, их обработки, использования в различных внутренних процессах и трансляции пользователю. Все наши графики строятся благодаря этой интеграции.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/5346422/tild3832-6463-4230-a430-306635616439___2.jpg)
Написанное нами решение получает рыночные данные напрямую с бирж: по протоколу FAST от Московской биржи и по протоколу Binary от Санкт-Петербургской биржи. Эти данные мы используем для отображения графиков для клиентов, а также во многих наших процессах и сервисах.
Получаем данные по разным протоколам — FAST у Московской биржи и собственный бинарный протокол у Санкт-Петербургской биржи. Данные от бирж транслируются разными потоками по транспортному протоколу UDP, который не гарантирует доставку всех пакетов. Из-за этого возможны потери данных. Чтобы решить эту проблему, выстроили целую систему: например, если мы что-то не получили по первому потоку данных, запрашиваем пропуски во втором и кэшируем данные, чтобы была возможность обратиться к пакету в любое время.
![](https://habrastorage.org/getpro/tmtm/articles/tld/images/5346422/tild6335-3434-4236-b366-383437633931___.jpg)
Сетевое подключение к биржам осуществляется по протоколу UPD, который имеет свои особенности (например данные могут прийти не по порядку, могут дублироваться или вообще не прийти). И может произойти так, что по двум потокам мы получим одни и те же данные, количество пакетов совпадет, но результат будет различаться.
Взяли проблемы пользователя на себя
Главный вопрос пользователей в поддержку брокера: через сколько минут деньги с брокерского счета переведут на карточку. Но дело в том, что ценные бумаги на американских биржах и Мосбирже торгуются в режиме Т+. Это значит, что пользователь покупает или продает бумагу, а расчет происходит через два рабочих дня или больше в зависимости от режима торгов. Продаешь акции сегодня — получаешь деньги на счет не раньше, чем послезавтра. Как вывести деньги со счета, если их там еще нет?
Сложности закона и работы биржи — не проблема клиента. Решение на поверхности: банк дает бесплатный займ клиенту на сумму вывода. Как только биржевые расчеты по сделке проходят, беспроцентный заем гасится пришедшими с биржи деньгами. Для клиента эти процессы спрятаны «под капотом». Он просто мгновенно получает деньги на карту и может их снять в банкомате или оплатить покупки.
Отказались от стороннего ПО
Главная наша боль — расчет налога по сделкам. Когда клиент хочет вывести деньги со счета, брокер рассчитывает и удерживает налог. Здесь возникают проблемы. Например, если клиент продал акции в долларах и хочет их вывести, на счету обязательно должны быть рубли — потому что налог удерживается в рублях. Но сколько рублей должно быть на счету, клиент не узнает, пока не начнет выводить деньги. И главный нюанс в том же режиме Т+: фактически расчет произойдет через два дня, а значит, налог тоже должен быть посчитан не по текущему курсу, а по будущему.
Пока работали с партнером, эту проблему решали за нас. Для собственного брокера купили готовое решение у «Инверсии».
Купленное решение не подошло по SLA — пришлось разработать собственный модуль с нуля за три месяца. Модуль должен рассчитывать налог в реальном времени, чтобы клиент мог сразу вывести деньги с брокерского счета. Так как моментальный вывод никто на рынке не предлагает, подсмотреть было не у кого.
В процессе разработки пришлось нанять консультанта — мы не разбирались как работают налоги для фондового рынка. Консультант сделала методичку на 200 страниц — как рассчитываются налоги под дивиденды, на купоны по облигациям, какие есть вычеты для инвесторов. Получилось готовое техническое задание.
В результате для расчета налога по операциям с иностранными акциями мы прогнозируем курс валюты, учитывая данные ЦБ. Налог списываем сразу при выводе денег. Если не угадали с прогнозом, пересчитываем на следующий день по новой.
Пример
Клиент купил акцию за $510 по курсу 60 ₽ за доллар. Потратил на это 30 600 ₽.
Когда цена достигла $720, он продал акцию и решил вывести деньги. Наш прогноз по курсу составил 63 ₽ за доллар, сумма сделки — 45 360 ₽.
Считаем доход клиента: 45 360 ₽ - 30 600 ₽ = 14 760 ₽. 13% от этой суммы — 1919 ₽.
Через 2 дня курс доллара оказался 62 ₽. Значит, мы не угадали с прогнозом, и реальный доход клиента равен (720 * 62) - 30 600 = 14 040 ₽. 13% от этой суммы — 1825 ₽. Получается, мы списали с клиента на 94 ₽ больше, чем нужно. Возвращаем разницу на счет.
![]() |
Основные преимущества Тинькофф Брокера, который у нас получился
- Заявку на открытие счёта можно подать онлайн. Если у вас есть дебетовая карта Тинькофф, договор с брокером можно подписать онлайн одной СМС. Если нет, документы вместе с картой Tinkoff Black привезёт представитель в удобное для вас место и время.
- Никаких скрытых комиссий. У брокера есть тариф «Инвестор», по которому вы платите только одну комиссию — 0,3% от каждой сделки. Есть еще тарифы «Трейдер» и «Премиум», они для тех, кто совершает много сделок на крупные суммы.
- Платить за обслуживание нужно только в те месяцы, когда вы совершаете сделки. На «Инвесторе» — 99 ₽.
- Моментальный вывод денег. Даже ночью и в выходные.
- Индивидуальный инвестиционный счет — сможете вернуть до 52 000 ₽ в год или 13% с дохода от инвестиций с помощью налогового вычета.
В рамках акции по промокоду HABRFREE Тинькофф-брокер не берет комиссии в течение месяца. Можете проверить, как работает моментальный вывод денег и налоговый модуль.
Брокерские услуги оказывает АО «Тинькофф Банк», лицензия №045-14050-100000.
Помните, что инвестиции на фондовом рынке связаны с риском, то есть никто не может гарантировать доход. Вы сами выбираете во что, сколько и когда вкладываться.