Разработка движка бэктестинга на JavaScript/TypeScript
Команда трейдеров использует Python, но хочет интегрировать тестирование в веб-приложение. Python-скрипты сложно встраивать в браузер, а переписывать на C# — долго. TypeScript-движок решает обе задачи: он работает и на сервере (Node.js), и в браузере. Потерянные миллионы на бумаге из-за неучтённого slippage — частая история. Наш опыт — 7+ проектов за последние годы, гарантируем устойчивость к reentrancy и корректную обработку slippage. Мы используем Decimal.js для точных расчётов (см. документацию Decimal.js). Получите консультацию для оценки вашего проекта — мы ответим в течение дня.
Почему выбирают TypeScript для бэктестинга?
TypeScript даёт интерфейсы для свечей и ордеров — компилятор ловит ошибки до запуска. Это критично: одна опечатка в поле close вместо close может стоить миллионов на бумаге. Мы используем ethers.js для работы с блокчейном, но для исторических данных достаточно чистого Node.js. Движок поддерживает ERC-20 токены и стандартные AMM-пулы. TypeScript также позволяет легко писать юнит-тесты и интегрироваться с CI/CD.
Какие подводные камни при работе с JavaScript-числами?
JavaScript использует IEEE 754 double precision. Для обычных бэктестов точности 15 знаков хватает, но для расчётов с комиссиями и дробными лотами лучше подключить Decimal.js. Мы включаем его в конфиг по умолчанию. Пример:
import Decimal from 'decimal.js'; const pnl = new Decimal(exitPrice).minus(entryPrice).times(quantity).minus(commission); Пример оптимизации параметров
Мы используем grid-поиск с параллельной обработкой. На вход подаётся диапазон параметров, например, период EMA от 10 до 50 с шагом 5. Worker Threads на Node.js или Web Workers в браузере запускают тесты параллельно. Результаты сортируются по коэффициенту Шарпа. Типичное ускорение — в 4-6 раз по сравнению с последовательным перебором.Как мы строим архитектуру движка
Архитектура модульная: DataFeed, Broker, Portfolio, Strategy. Каждый модуль можно заменить без правки остальных. Стратегия наследуется от абстрактного класса и реализует метод onBar. Для параллельного тестирования используем воркеры:
- В браузере — Web Workers (MDN)
- На сервере — Worker Threads из node:worker_threads
Сравнение с аналогами:
| Параметр | Наш JS-движок | Python (backtrader) | C# (Wealth-Lab) |
|---|---|---|---|
| Запуск в браузере | Да (Web Worker) | Нет | Нет |
| Типобезопасность | TypeScript | Опционально (mypy) | Строгая |
| Скорость (1M свечей) | ~1.2 сек | ~3.5 сек | ~0.8 сек |
| Лицензия | MIT | GPL | Коммерческая |
Типичные ошибки при бэктестинге
- Look-ahead bias — использование будущих данных. Решение: строгий timestamp-контроль.
- Игнорирование проскальзывания. Решение: параметр slippagePct (по умолчанию 0.05%).
- Неучёт комиссий. Решение: commissionPct в BrokerOptions.
- Численное переполнение. Решение: Decimal.js для больших сумм.
- Отсутствие тестирования на разных таймфреймах — стратегия может работать только на 1-часовых свечах, но проваливаться на минутных. Решение: мультитаймфреймовый анализ.
- Игнорирование ликвидности — при большом объёме ордера slippage может быть выше. Моделируем глубину стакана через параметр volume ограничения.
Что входит в работу под ключ
- Проектирование архитектуры и интерфейсов
- Реализация DataFeed (CSV, REST API, WebSocket)
- Broker с поддержкой market/limit/stop-limit ордеров
- Portfolio с кривой капитала и трейдами
- Модуль индикаторов (EMA, RSI, MACD, ATR)
- Оптимизатор параметров (grid/random)
- Интеграция с брокерскими API (Binance, Bybit) по желанию
- Документация и обучение команды
Процесс работы
| Этап | Длительность |
|---|---|
| Анализ требований и спецификация | 2–3 дня |
| Прототип ядра (DataFeed, Broker, Portfolio) | 5–7 дней |
| Индикаторы и стратегия | 3–5 дней |
| Оптимизация и тестирование | 3–5 дней |
| Интеграция и документация | 2–3 дня |
| Итого | от 2 до 4 недель |
Стоимость рассчитывается индивидуально — зависит от сложности брокерской логики и необходимости интеграции с внешними API. Типичная экономия времени на одну стратегию составляет до 80% по сравнению с ручным тестированием, что существенно сокращает бюджет разработки. Получите консультацию для оценки вашего проекта. Наш опыт: многолетняя разработка трейдинговых систем, гарантируем качество и соблюдение сроков. Закажите разработку движка под ваши задачи — результат гарантирован.







