Как работают бэктесты
Точка входа
npx @tradejs/cli backtest
Требование к локальной инфраструктуре:
npx @tradejs/cli infra-init
npx @tradejs/cli infra-up
infra-init создает docker-compose.dev.yml один раз и сохраняет пользовательские изменения, если файл уже есть.
infra-up поднимает Redis + PostgreSQL/Timescale на основе этого файла.
После работы инфраструктуру можно остановить через npx @tradejs/cli infra-down.
Основные файлы:
- CLI-скрипт:
@tradejs/cli - runtime воркера:
@tradejs/node
Реальные CLI-флаги (из кода)
args.option(['c', 'config'], 'Backtest config', 'breakout');
args.option(['n', 'tests'], 'Tests limit', TESTS_LIMIT);
args.option(['p', 'parallel'], 'Parallel tasks', MAX_PARALLEL);
args.option('connector', 'Connector/provider', 'bybit');
args.option(['m', 'ml'], 'Write ML dataset rows', false);
args.option(['A', 'ai'], 'Write AI prompt rows', false);
Пример запуска для TrendLine-подобного сценария:
npx @tradejs/cli backtest --config trendline --connector bybit --tests 500 --parallel 4 --ml --ai
Пайплайн
- Читается backtest config из Redis (
users:<user>:backtests:configs:<config>). - Загружаются тикеры.
- При необходимости обновляются свечи.
- Собирается test suite (комбинации параметров).
- Набор делится на чанки и обрабатывается воркерами.
- Собирается финальная статистика.
Реальный паттерн worker-обработки
import { testing } from '@tradejs/node/backtest';
for await (const test of testSuite) {
const testResult = await testing(test);
process.send?.({
stat: testResult.stat,
orderLogId: testResult.orderLogId,
test,
});
}
ML-датасет в процессе бэктеста
npx @tradejs/cli backtest --ml
Создаются chunk-файлы:
ml-dataset-<strategy>-chunk-<chunkId>.jsonl
Потом они объединяются:
npx @tradejs/cli ml-export
AI prompt-датасет в процессе бэктеста
npx @tradejs/cli backtest --ai
Создаются chunk-файлы:
ai-dataset-<strategy>-chunk-<chunkId>.jsonl
Потом их можно объединить и прогнать оффлайн:
npx @tradejs/cli ai-export
npx @tradejs/cli ai-train -n 50 --minQuality 4
Замечание про UI
Встроенное Next.js-приложение пока не поставляется как публичный внешний пакет. Для внешнего пользователя поддерживаемый сценарий бэктеста сейчас CLI-first.