Ретро про участие в Tinkoff Invest Robot Contest

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

Знакомство

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

Мой ключевой опыт — 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 

Источник: https://habr.com/ru/post/672274/


Интересные статьи

Интересные статьи

Привет! В марте запускаем очередную Робопрактику для Android-разработчиков уровня джуниор и миддл в Самаре и онлайн. Научим и заплатим: практика оплачиваемая, а проекты настоящие. Как прокачаться в но...
Всем привет! В этой публикации я расскажу про свой опыт создания небольшой вычислительной системы...
иллюстрация автора Fpeniche В первые десятилетия XXI века популярность ретрофутуризма высока. Слова «киберпанк», «стимпанк», «дизель- и атомпанк» часто звучат при описании новых тайтлов в компьютер...
Всем привет! Занимаюсь разработкой игры: ее дизайн полностью сделан из символов, которые можно набрать на клавиатуре. Используются символы из ASCII таблицы. Как бы странн...
Вам приходилось сталкиваться с ситуацией, когда сайт или портал Битрикс24 недоступен, потому что на диске неожиданно закончилось место? Да, последний бэкап съел все место на диске в самый неподходящий...