Розробка двигуна бектестингу на 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% порівняно з ручним тестуванням, що суттєво скорочує бюджет розробки. Отримайте консультацію для оцінки вашого проєкту. Наш досвід: багаторічна розробка трейдингових систем, гарантуємо якість та дотримання термінів. Замовте розробку двигуна під ваші задачі — результат гарантований.







