История про конкурс алготрейдеров, ожидания и реальность участников, про важность фидбека и даже тема психологии по касательной прошла. Завариваем чаек, усаживаемся и обо всем по порядку.

Знакомство

Я Паша, и я фронтенд разработчик. 

Мой ключевой опыт — 8 лет фронтенда в Яндексе, где я успел побывать учеником ШРИ, разработчиком, руководителем группы и руководителем службы. Параллельно с этим я увлекался алготрейдингом. Начинал с форекса и программирования робота под MetaTrader ещё в 2010х. С тех пор прошло много времени, у меня появились и знания, и средства, чтобы сделать свой вклад в индустрию. Ради этого я весной этого года благополучно завершил сотрудничество с компанией. И пустился в свободное плавание. 

У меня есть блог, с подборкой статей на алготрейдинговые и инвест темы. Блог помогает мониторить и анализировать интересы аудитории. 

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

Про решение участвовать в конкурсе

Долгое время я вынашивал мысль о том, что на javascript очень мало опенсорс проектов для алготрейдинга. Чтобы был низкий порог входа, чтобы с визуализацией, и чтоб можно было на досуге проверить разные гипотезы про происходящее на рынке. Например, поискать корреляции в свечах разных инструментов, прикрутить обработку новостей или поиграться с tensorflowjs.

Как вдруг подвернулся конкурс по разработке торговых роботов. Я планировал сделать эту разработку и без конкурса, писал об этом в блоге и в пульсе 9 апреля 2022.

А тут он (конкурс)!  Я обрадовался этому «знаку» — пазл начал складываться. 

Правила конкурса разрешают участвовать командой, я привлёк своего студента, максимально подсвечивая, кто что делает, проводя кодревью в публичном гитхабе как есть.

Про задачу, которую я решал

Моя идея — разработать робота для домохозяйки, ну или почти для домохозяйки. Отсюда получаем три ключевых требования.

  1. Минимум действий для установки, все настройки и действия через интерфейс.

  2. Предсказуемость и безопасность. Робот должен уметь работать в режиме советника, давать возможность контролировать ситуацию и осуществлять автоматическую торговлю только после разрешения пользователя.

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

Про требования конкурса

https://github.com/Tinkoff/invest-robot-contest

https://github.com/Tinkoff/invest-robot-contest/blob/main/score.md 

Про мои ожидания...

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

  • Конкурс мотивирует вкладываться срок и не тянуть кота, сами знаете за что.

  • Победа в конкурсе — не цель. Я хотел сделать проект, иметь доступ к чатикам и конкурсантам, получить фидбек и пообщаться с разработчиками.

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

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

Про сам проект

Торговая система состоит из четырех блоков.

1. SDK для коммуникации с брокером (взял и допилил из опенсорса)

2. Интерфейс

3. Торговый робот

4. И контроллер, который связывает все эти блоки между собой

Подробности про них описаны в репозитории.

Теперь по требованиям.

Пункт оценки «Качество обработки технических ошибок»

Все этапы взаимодействия с брокером и ключевые элементы обернуты в try catch, в шапке проекта есть плашка соединён ли вьювер с сервером, все ошибки серверные и API логируются в файлы по дням. Логи ошибок можно посмотреть во вьювере перейдя по ссылке в шапке. Чтобы это сделать я допилил используемый sdk.

Пункт оценки «Качество кода»

Минимально добавил линтер во все проекты. Чтобы не мешать серверную и вьюверную часть разделил их. Стрёмные места покрыл комментариями, а код который может служить примером закомментировал.

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

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

Пункт оценки «Простота сборки проекта»

Всё было сделано так, чтобы собрать могла домохозяйка. Всё вынесено в npm пакеты, оформлен CLI, проверено на windows, nix, телефоне, серверах с разными API и возможность задания портов. В настройки вынесен QR код, для быстрого доступа с телефона.

Чтобы установить проект достаточно иметь ноду >= 17 и выполнить команды

mkdir robot
cd robot
npm i opexbot
npx opexbot

После запуска, установка сервера и токенов происходит через страницу настроек с подсказками. Проще некуда.

Пункт оценки «Функциональные возможности»

Функциональных возможностей просто не счесть. Кроме кеширования и реиспользования всего что можно есть

  • Бэктестирование робота в автоматическом и пошаговом режиме

  • Возможность выбора робота 

  • Задание для робота параметров про лоты, стопы и профит, уровни поддержки и сопротивления

  • Вывод и кеширование стакана с отметками уровней

  • Возможность бектестирования и промотки результатов торгов робота с учётом стакана, если есть в кеше

  • Возможность выбора счета и токена, везде подсветка в каком из режимов и что выбрано.

  • Робота можно создавать копипастой примера не копаясь в коде

  • При создании нового робота он автоматом прорастает во вьювер

  • Дебаг и разработку робота можно осуществлять за счёт просмотра всех переменных на отдельной странице

Всё это выводится и делается во вьювере. Очень наглядно и просто.

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

Пункт оценки «Качество визуализации результатов (если есть)»

Всё работает через визуализацию. Скрины и возможности можно глянуть в репо. Там всё круто.

Пункт оценки «Качество документации и readme»

В каждом из репозиториев описал возможности, наделал скриншотов.

Пункт оценки «Качество обработки ошибок предметной логики»

Реализация про логи аналогична с пунктом «Качество обработки технических ошибок». Остальное блокируется через интерфейс и наложены ограничения, чтобы робота невозможно было запустить в неправильных условиях.

Пункт оценки «Наличие исполненных ордеров у робота»

Нашлёпал рандомных и даже вышел в плюс по ним.

Пункт оценки «Возможность настройки параметров алгоритма или его смены»

Описал в пункт оценки «Функциональные возможности». Очень много всего настраивается, вплоть до выбора робота парой кликов мыши.

Вот собственно и всё. Я вложился не только в то что мне было интересно, но и в соответствия оценкам. 

Про то, как развивались события

Отправляя работу, я был уверен, что сделал добротно. Булшит написать, что не думал о победе. Но здесь важно подчеркнуть, что это не пост ущемленного самолюбия не победителя. Я осознанно вложился в свою идею простого работающего продукта, а не в глубокую проработку торгового робота, доступного только программистам.

Поэтому результат я воспринял без разочарования. А вот на оценку в баллах по таблице и внятный фидбек я более чем рассчитывал!

Отступление  про мой психологический портрет

Есть у меня привычка — писать «спасибо», когда и не благодарен вовсе.

— Вам выписан штраф

— Спасибо

или

— Ваша карта заблокирована

— Спасибо

В этот раз я тоже не собирался действовать иначе, поэтому

  • Я простил организаторам, что у части конкурсантов отваливался сайт банка и они не могли получить токен.

  • Я принял, что результаты огласили не за обещанную неделю, а за полторы. 

  • Я смирился, что свечи приходили по выходным, когда нет торгов и участники в чатике называли это кухней. А организаторы отвечали мол параметр проверки торгов используйте.

  • Я даже постарался понять и простить то, что решили не публиковать оценки работ.

Да-да, объявили только результаты, без обещанных баллов по таблице.
Да-да, объявили только результаты, без обещанных баллов по таблице.

Но когда я получил фидбек, случилось чудо, вместо стандартного «спасибо», я поставил дизлайк и накатал ответ. 

И нет, этот пост не про чудеса психологии, а про откровенно плохо организованный финал конкурса, где даже у такого запущенного пациента как я случился прогресс.

Готовы?

https://github.com/pskucherov/OpexBot/issues/1 

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

«3. код в нескольких репозиториях затрудяет понимание происходящего.» – орфография автора сохранена. Меня проверял стажёр? Нужно было все библиотеки в одну папку сложить, а нодмодули закоммитить сразу в репозиторий?

Я не оспариваю результат. Но возникает очень много вопросов. Первые из которых просто проигнорировали.

Тем временем, в других репо огромные фидбеки. Даже сразу два фидбека есть.

https://github.com/elkopass/BITA/issues/14

Разгораются дискуссии: проверяющие пишут, что чего-то нет, а оно есть, или то что в победившей работе фидбек на функциональность проигравшей.

https://github.com/GoldenBrazier/TinkoffInvestRobot/issues/2

А у меня ни фидбеков, ни дискуссий.

Вместо выводов

  1. Открыт к обратной связи и откровенному челленджу работы. Уж не поскупитесь. Ибо не получил за чем шёл! 

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

  3. Поддержать меня можно любым из этих способов

Лайком или фидбеком в issue

https://github.com/pskucherov/OpexBot/issues/1 

Донатом на развитие алготрейдинга, начинающих фронтендеров и опенсорса

https://sobe.ru/na/S2d2i0i6X1u0 

Комментарии (9)


  1. dopusteam
    19.06.2022 22:53

    «3. код в нескольких репозиториях затрудяет понимание происходящего.» – орфография автора сохранена. Меня проверял стажёр? Нужно было все библиотеки в одну папку сложить, а нодмодули закоммитить сразу в репозиторий

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

    А сколько репозиториев всего?)


    1. pskucherov Автор
      21.06.2022 15:48

      Три, описания есть в основном репо. Первый фронт, второй про роботов, третий про коннектор брокера. Конечно, в монорепе было бы удобнее делать сквозные фичи. Но в долгосрочной перспективе разделённые сущности по репозиториям сильно облегчат поддержку, рефакторинг и проверку пуллреквестов.


  1. artem-phys
    21.06.2022 12:51

    А я как раз из тех конкурсантов, у кого отваливался сайт банка и они не могли получить токен) мне так никто в чате и не объяснил, что с этим делать


    1. pskucherov Автор
      21.06.2022 16:03

      мне так никто в чате и не объяснил, что с этим делать

      Приветствую, коллега! Зато ниже в комментах объяснили что это было.

      Недоступность сайта банка никак не связана с конкурсом.
      Недоступность сайта банка никак не связана с конкурсом.


  1. kpmy
    21.06.2022 12:51

    В общем, проблемы с выдачей токена убили весь кайф с самого начала. Хотелось прикольного кодинга, а 5xx мне и на работе хватает.


    1. pskucherov Автор
      21.06.2022 16:01

      Приветствую, коллега! Как видно из коммента ниже: "Недоступность сайта банка никак не связана с конкурсом". Так что это не проблема конкурса, всё ок ¯\_(ツ)_/¯


      1. kpmy
        21.06.2022 19:59

        Кто пустил конкурсантов на прод, вот что непонятно :)


  1. b1ng0o
    21.06.2022 12:51

    Здравствуйте! Спасибо за ретро, в будущем будем учитывать полученный опыт)))

    Небольшой комментарий:

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

    • Недоступность сайта банка никак не связана с конкурсом.

    • Про задержку с оценкой извиняемся, запустить и проверить 70+ работ за неделю оказалось невозможным.

    • Так как Тинькофф Инвестиции запустили торговлю по выходным, то и свечи должны приходить по выходным*.


    1. pskucherov Автор
      21.06.2022 16:08

      Спасибо за комментарий.