Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
История про конкурс алготрейдеров, ожидания и реальность участников, про важность фидбека и даже тема психологии по касательной прошла. Завариваем чаек, усаживаемся и обо всем по порядку.
Знакомство
Я Паша, и я фронтенд разработчик.
Мой ключевой опыт — 8 лет фронтенда в Яндексе, где я успел побывать учеником ШРИ, разработчиком, руководителем группы и руководителем службы. Параллельно с этим я увлекался алготрейдингом. Начинал с форекса и программирования робота под MetaTrader ещё в 2010х. С тех пор прошло много времени, у меня появились и знания, и средства, чтобы сделать свой вклад в индустрию. Ради этого я весной этого года благополучно завершил сотрудничество с компанией. И пустился в свободное плавание.
У меня есть блог, с подборкой статей на алготрейдинговые и инвест темы. Блог помогает мониторить и анализировать интересы аудитории.
Я обучаю фронтенд разработчиков в обмен на выполнение нужных мне задач в опенсорсе. В планах — записать мини DIY по фронту, чтобы не объяснять базу каждый раз.
Про решение участвовать в конкурсе
Долгое время я вынашивал мысль о том, что на javascript очень мало опенсорс проектов для алготрейдинга. Чтобы был низкий порог входа, чтобы с визуализацией, и чтоб можно было на досуге проверить разные гипотезы про происходящее на рынке. Например, поискать корреляции в свечах разных инструментов, прикрутить обработку новостей или поиграться с tensorflowjs.
Как вдруг подвернулся конкурс по разработке торговых роботов. Я планировал сделать эту разработку и без конкурса, писал об этом в блоге и в пульсе 9 апреля 2022.
А тут он (конкурс)! Я обрадовался этому «знаку» — пазл начал складываться.
Правила конкурса разрешают участвовать командой, я привлёк своего студента, максимально подсвечивая, кто что делает, проводя кодревью в публичном гитхабе как есть.
Про задачу, которую я решал
Моя идея — разработать робота для домохозяйки, ну или почти для домохозяйки. Отсюда получаем три ключевых требования.
Минимум действий для установки, все настройки и действия через интерфейс.
Предсказуемость и безопасность. Робот должен уметь работать в режиме советника, давать возможность контролировать ситуацию и осуществлять автоматическую торговлю только после разрешения пользователя.
Удобная инфраструктура для разработчика. Это должна быть экосистема с модулями, которые будет легко и разрабатывать, и подключать. И не важно заказан модуль индивидуально или скачан в интернете из опенсорса.
Про требования конкурса
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
А у меня ни фидбеков, ни дискуссий.
Вместо выводов
Открыт к обратной связи и откровенному челленджу работы. Уж не поскупитесь. Ибо не получил за чем шёл!
Если кто-то учится фронту, хочет пообщаться, парнопопрограммировать, покодревьювить и получить адекватный фидбек — велкам.
Поддержать меня можно любым из этих способов
Лайком или фидбеком в issue
https://github.com/pskucherov/OpexBot/issues/1
Донатом на развитие алготрейдинга, начинающих фронтендеров и опенсорса
https://sobe.ru/na/S2d2i0i6X1u0