Решил, что надо подвести какой-то профессиональный итог всей этой возни с вашим глупым алготрейдингом. И вот, что получилось.
Мои инженерные результаты:
— спроектировал и реализовал с нуля платформу алготрейдинга на C#/.NET 9 — от загрузки котировок до исполнения ордеров: 67 проектов, 77 тыс. строк кода, 773 автотеста, 28 задокументированных архитектурных решений;
— поднял пропускную способность верификации стратегий с 1-5 до 2 500 вариантов в секунду на воркер (в 500 раз), в том числе за счёт покрывающего индекса, ускорившего выборку в 525 000 раз по вводу-выводу;
— снизил пиковое потребление памяти вычислительного ядра со 117 ГБ до 2,6 ГБ (в 45 раз), сохранив побитовую идентичность результата на 33,3 млн строк;
— построил генетический поиск стратегий по ~640 бинарным признакам на 383 инструментах трёх площадок, обработав ~167 млн минутных свечей;
— развернул распределённые вычисления в Kubernetes (~12 узлов, автомасштабирование KEDA до 120 подов, scale-to-zero) и хранилище S3 + Parquet с прореживанием — экономия 97% объёма;
— реализовал портфельный отбор: TOPSIS и HRP с очисткой корреляционной матрицы 383x383 методом Марченко-Пастура — из ~96 тыс. кандидатов отбирается ~420 систем;
— построил торговый движок с семиуровневой защитой капитала: обработка свечи менее 1 мс, путь от сигнала до ордера менее 10 мс (p99);
— провёл out-of-sample валидацию на 30 инструментах за 45 дней; нейросетевая модель (ONNX) даёт преимущество +8,33 п.п. на тестовой выборке;
— написал автономного торгового бота для Bybit на 75 инструментов с собственным риск-движком: 3 451 сделка за три недели на демо-счёте, доля прибыльных 83,9%, Profit Factor 2,12;
— нашёл и устранил гонку потоков в параллельном вычислительном ядре, сделав расчёты детерминированными; корректность подтвердил A/B-валидацией;
— реализовал интеграции с площадками: Binance Futures (REST и WebSocket), Bybit, MOEX через Finam (протокол Transaq), Tinkoff Invest API, Bybit V5.
Торговля: 24 918 закрытых сделок по 293 инструментам на собственном счёте, три года из четырёх положительные.
Стек: C# 13/.NET 9, Python, MS SQL Server (T-SQL, columnstore), Kubernetes и KEDA, Docker, S3 + Parquet, DuckDB, ONNX Runtime, xUnit, Serilog, Git; генетические алгоритмы, TOPSIS, HRP, Марченко-Пастур, DSR/CPCV/PBO.
Последние 10 сделок + нарастающий итог за прошлые сутки (13.08, столбцы — день.время открытия, время закрытия, тикер, прибыль на сделку и нарастающий итог с начала суток с учётом комиссии, валюта — USDT):
08.06:39 18:39 TUT +326 +3 958
12.12:54 19:49 VIRTUAL +74 +4 120
13.10:17 19:00 XMR +8 +3 966
13.15:58 20:51 CAP +163 +4 284
13.16:40 18:19 LINK −3 +3 633
13.17:03 18:22 OP −3 +3 630
13.17:22 19:14 ONDO +17 +3 983
13.17:34 18:33 TAO +2 +3 632
13.18:31 19:27 BNB +2 +3 985
13.18:47 19:31 TUT +61 +4 046
Статистика с начала торгов (27.05) по конец вчерашнего дня:
Процесс: ALIVE pid 3800, лог 23:41:08, ошибок 0, диск 62.5GB
— Сегодня закрыто: 151, ✅124 / ❌27 (82%)
— PnL за сутки: gross 4 824 − комиссия 573 = net 4 251 USDT
Счёт (USDT):
114 188 старт
+ 157 731 реализовано по вчера
+ 4 251 реализовано сегодня
— (4 823) funding
= 157 159 сейчас
в т.ч. комиссия за всё время: (63 414) — уже в «реализовано»
— Свободно: 36 669 USDT
— Задействованная маржа: 79 080 (пик дня 90 764) USDT
— Плечо: 5
— Экспозиция: 394 127 USDT
— Открыто: 45 (33L / 12S)
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
Здравствуйте, не могли бы Вы ответить на следующие вопросы:
Каково среднее время жизни сделок? Интересует горизонт торговли на генерируемых системах (краткосрок, среднесрок, долгосрок).
640 бинарных признаков — это, грубо говоря, 640 кусочков стратегии? То есть отдельных условий входов/выходов? Условия для входа и выхода собираются независимо и потом комбинируются?
«Реализовал портфельный отбор: TOPSIS и HRP с очисткой» — это про то, что вообще попадёт в портфель? В портфеле есть какая-либо кластеризация по корреляции или по другому признаку?
Вы упомянули минутный ТФ. У вас все стратегии работают только на нём, или он как база, а из него уже строятся старшие ТФ?
Вероятно, у вас есть проблема, что части стратегии используют один и тот же индикатор. Если так, то как-то подготавливаются расчёты заранее или при переборе постоянно считается заново?
Если я правильно понимаю, воркер, когда получает задание, тянет историю с базы. Успевает ли база отдавать историю на множество воркеров?
отличная работа
а мы до сих пор лаптями щи хлебаем