Голосовой помощник для операций на Московской бирже: «Алиса, купи акции Яндекс»

    — Алиса, купи одну акцию Яндекс.
    — Заявка на покупку Яндекс по рыночной цене, тикер: YNDX, количество акций: 1, для подтверждения скажите «подтверждаю», для отмены скажите «нет».
    — Подтверждаю.
    — Заявка исполнена.


    Я делаю голосовой интерфейс для совершения операций с ценными бумагами на Московской бирже с открытым исходным кодом. Идею вынашивал с детства. Помню, впервые увидел голосовой помощник в каком-то фильме около двадцати лет назад, в то время у меня даже проводного телефона не было в доме. А сейчас у меня безлимитное подключение к сети Интернет, брокерский счёт, которым я могу управлять через смартфон. За двадцать лет технологии стали доступнее.

    Как всё начиналось


    Полтора года назад у меня в доме появилась Яндекс.Станция. Я стал замечать, что иногда, лёжа в кровати, лень протянуть руку за смартфоном, чтобы почитать новости, и тогда я просил Алису рассказать, как изменился мир, пока я спал. С первых дней я оценил удобство голосовых помощников, и ожидал, что миллионы разработчиков накинуться на голосовые интерфейсы точно так же, как в своё время накинулись на разработку мобильных приложений на все случаи жизни.

    Время шло, в каталоге навыков Алисы появлялись бесполезные банковские голосовые помощники (не в обиду разработчикам). У Сбербанка, например, помощник озвучивал условия кредита и предлагал прийти в отделение, у Тинькофф тоже самое, только вместо отделения предлагал перейти на сайт, чтобы заполнить заявку. Ребята, кто разрабатывал это, пожалуйста, не обижайтесь на меня, но, правда, я не хочу никуда идти, ни в отделение, ни на сайт, я хочу иметь возможность перевести 100 рублей другу фразой: «Алиса, отправь 100 рублей Саше».

    Идея лежит на поверхности, но по какой-то причине, никто ещё это не реализовал. Почему? Может никто не пользуется голосовыми помощниками? Может есть законодательные ограничения? Может есть проблемы с безопасностью? Что-то ещё? Поделитесь, пожалуйста, в комментариях, если знаете.

    В какой-то момент, я просто встал с кровати и начал делать приватный навык для Алисы, чтобы голосом управлять своим брокерским счётом. Я перебрал своих брокеров и остановился на Тинькофф Инвестиции OpenAPI. Затем на месяц погрузился в изучение возможностей платформы Яндекс.Диалоги, и ещё через некоторое время купил первые ценные бумаги через голосовой помощник на Московской бирже — один лот «Банк ВТБ». Надеюсь, эта сделка войдёт в историю.

    С самого начала я решил, что не буду прятать исходный код, чтобы любой желающий мог настроить себе голосовой помощник: https://github.com/denismosolov/oliver

    Возьми с полки пирожок и расскажи наконец о проблемах


    Компаний много, а я один


    Когда я говорю Алисе: «Купи одну акцию Яндекс», то платформа Яндекс.Диалоги извлекает название ценной бумаги из фразы и преобразовывает в специальный идентификатор FIGI (Financial Instrument Global Identifier), необходимый для взаимодействия с торговой платформой через OpenAPI. Вот так выглядит FIGI для акций компании Яндекс, торгующихся на Московской бирже: BBG006L8G4H1.

    Преобразование в FIGI происходит только для тех названий компаний, которые я описал в разделе Сущности в Диалогах. Подробнее об этом, можно почитать в документации. Для примера, вот фрагмент кода сущности:

    entity EFigi:
        values:
            BBG005DXJS36:
                %exact
                TCS
                %lemma
                тиньков(банк)?
                тинькоф(банк)?
                тинькофф(банк)?
                ти си эс (груп)?
    

    У этой работы большая трудоёмкость, нужно описать все компании, торгующиеся на Московской и Санкт-Петербургской биржах, но результат может быть полезен трейдерам, инвесторам, разработчикам голосовых помощников и даже компаниям, чьи акции торгуются на биржах. Вот файл с описанием сущности EFigi на GitHub, я потихоньку его дополняю.

    Люди называют одни и те же компании по-разному, например, кто-то скажет «Сбер», а кто-то «Сбербанк». На бирже торгуются обычные акции Сбербанка и привилегированные (префы). Хочется учесть все популярные варианты.

    Компания торгуется на двух биржах в разной валюте


    Глобальные депозитарные расписки TCS Group можно купить на Московской бирже за рубли, а можно — на Санкт-Петербургской за доллары. По хорошему, голосовой помощник должен уточнять, в какой валюте покупать расписки, но иногда, это можно понять из контекста.

    Например, когда я говорю: «Продай одну акцию TCS Group», и у меня на счёте есть только акции в рублях, то нужно без уточнений продавать в рублях на Московской бирже. Если у меня на счёте акции TCS Group в рублях и долларах, то Алиса должна задать уточняющий вопрос: «У вас глобальные депозитарные расписки TCS Group в рублях и в долларах, в какой валюте вы хотите продать?».

    Я пока это не реализовал и TCS Group всегда покупается и продаётся за доллары. Но, надеюсь, скоро возьмусь за выставление заявок на покупку и продажу ценных бумаг по заданной цене (лимитные заявки), а там уже научу голосовой помощник разливать акции на разных биржах по валюте, которая будет в цене покупки или продажи.

    Ошибки распознавания


    Люди спрашивают, а что будет, если Алиса распознает что-то не так, например, купит не ту бумагу или не то количество? Для этого я предусмотрел подтверждение сделок. После того, как Алиса распознает команду на покупку или продажу, она проговаривает детали сделки и ожидает подтверждения. Если подтверждения не последует, то сделка не состоится.

    Сообщение при подтверждении сделки звучит так: «Заявка на <покупку | продажу> <$название_ценной_бумаги> по <$цена_за_одну_бумагу>, тикер: <$тикер>, количество акций: <$количество>, для подтверждения скажите подтверждаю, для отмены скажите нет».

    Такое подтверждение отлично воспринимается на слух, но есть одна недоработка. Алиса плохо читает название тикера, например, YNCX, звучит как «йинкс».

    Я хотел написать функцию, которая бы разбирала тикеры по буквам, и для каждой буквы проигрывала звук из озвучки английского алфавита. Код принимал бы на вход строку YNDX, а возвращал вот такую строку в формате tts:

    <speaker audio="sounds-y.opus"><speaker audio="sounds-n.opus"><speaker audio="sounds-d.opus"><speaker audio="sounds-x.opus">

    Алиса будет проигрывать звуки, и в теории всё будет звучать хорошо.

    Безопасность при совершении сделок



    Чтобы использовать OpenAPI, приходится отключать подтверждение сделок по СМС в Тинькофф Инвестиции, а это создаёт риски для безопасности. Например, инвестор ушёл на прогулку с собакой, а дети решили поиграться с Алисой и продали все акции.

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

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

    Если знаете способы подтверждения сделок в подобных приложениях за рубежом или просто хотите поделиться идеей, то, пожалуйста, напишите в комментариях.

    Вместо заключения


    Как говорит бывший коллега: «Всё будет хорошо, но чуть попозже». Я верю, что банки и брокеры рано или поздно всё это реализуют, но пока, это остаётся уделом энтузиастов и мейкеров вроде меня.

    До встречи в будущем!

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Пользуетесь голосовыми интерфейсами?

    • 4,6%часто3
    • 22,7%иногда15
    • 72,7%никогда48
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 20

      –5
      Мне нужна карма чтобы смог написать свою статью ))
      Поэтому пожелаю вам всем удачи и +1 всем от меня на карму)
        0
        Благодарю! А о чём хотите написать?
          –4
          Хочу написать про стартап, которую запустили в апреле. )) Я уверен полезная статья получится)
            0
            Вы сделали идеально решение, чтобы слить карму. Пишите в песочницу, если статья полезная, она вылезет от туда. Если мусор, так ей туда и дорога.
              –2

              Честность видимо раздражает людей))

                +2
                Раздражает наглость и попрошайничество. А так же не умение читать правила.
                  0
                  Простите, а что в этом честного?
            +3

            thesalamoff, а разве нельзя написать в песочницу? Если статья реально очень интересная то она из песочница выберется сама.

            0
            Для простейшей защиты от детей можно использовать алгоритмически-вычисляемый код, привязанный ко времени по определенным простым правилам, которые можно быстро вычислить в уме. Если использовать хэширование хотя бы в форме остатка от деления, то угадать логику постороннему человеку будет непросто. Ну и обязательно защита от брутфорса, что предполагает хранение числа попыток. Не знаю, можно ли такую математику заложить в навыках алисы. Например, день%3 + час%5 + минуты/10
              0
              Интересная идея, благодарю за наводку! Надо будет продумать, как научить этим простым правилам пользователя, да так, чтобы дети не смогли научиться))
                0
                Вообще конечно самый красивый и надежный вариант — это HOTP или TOTP коды, выдываемые аппаратным токеном или приложением Google Authenticator. Для проверки реализуется несложный алгоритм по секретному ключу, но нужна минимальная инфраструктура для их регистрации и хранения. Хотя может найдется онлайн сервис, или можете свой написать.
              +1
              Покупать акции не глядя на график/стакан и по рыночной цене? Вы cерьезно?
                0
                Если инвестируешь на долгий срок, а не трейдишь, почему нет.
                Но тогда и нет срочности, можно все сделать, когда будешь за компьютером или с телефоном в руках.
                • НЛО прилетело и опубликовало эту надпись здесь
                    0
                    Деньги не более чем обычный товар, который можно перепродать с выгодой.
                    А вообще, инвесторы — это люди которые покупают акции для владения частью компании, не понимаю чем это может быть плохо?
                    Остальные просто играют в казино в игру с положительной суммой и на бизнес имеют крайне мало влияния.
                      0
                      Благодарю за совет! Я вас понимаю, в этом есть рациональное зерно.

                      Когда получаешь свои 40 долларов дивидендов, и понимаешь, что с таким же результатом можно было просто пару часов поработать, то хочется всё продать и больше никогда этим не интересоваться. Я думаю это лудомания, может когда-нибудь я с этим справлюсь.

                      Я иногда ловлю себя на мысли, что слишком часто заглядываю в интернет с целью посмотреть, во сколько сейчас оцениваются мои акции. Вместо этого стоит просто работать и не париться. Зарплата раз месяц — лучшие дивиденды.
                    0
                    Да, скоро добавлю лимитную заявку)
                    0

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


                    Возможно, кому-то это может показаться удобным, но я считаю, что профит не превышает возможной опасности

                      0
                      Благодарю за комментарий!
                      Я тоже думаю, что это опасно. Глобальный смысл этой затеи в том, чтобы снизить количество времени, которое я провожу перед графическими интерфейсами, держа в руках смартфон или работая за ноутбуком. На примере бирже, можно наглядно показать, как многие повседневные операции, которые совершает человек в графическом интерфейсе могут быть перенесены в голосовой, а это снизит нагрузку на зрение.
                      +1
                      — Алиса, объедини квантовую теорию с общей теорией относительности.
                      — До завершения решения общего уравнения осталось Infinity секунд

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое