pineforge
Офлайн-бэктестинг

Запускайте бэктесты PineScript офлайн, на своих данных

PineForge компилирует PineScript v6 в нативный C++ и гоняет его локально через Docker. Local-first, побайтово воспроизводимо, работает везде, где работает Docker. Свой OHLCV CSV — приветствуется.

Почему офлайн?

Бэктестинг в браузере хорош для итерации у графика. К офлайн-бэктестингу тянутся, когда следующий шаг — деньги за стратегией: когда нужен аудит-трейл, когда CI должен гейтить каждый коммит, когда результат двухмесячной давности должен побитово воспроизвестись сегодня.

Офлайн-прогон даёт то, чего браузерный тестер не даст: результаты побайтово воспроизводимы — те же входы, тот же выход, каждый раз. Вы фиксируете версию движка, заливаете результаты в репозиторий, диффите списки сделок между коммитами и гоняете всю эту историю headless в CI. CSV, что вы скармливаете, ваш; бинарник, что вы гоняете, локальный; отчёт, что приходит обратно, — поддаётся аудиту.

Практический список того, что разблокирует офлайн: версионированные движки — коммит двухмесячной давности сегодня даёт тот же список сделок; кастомный ингест данных — можно тестить против реконструкций тиков с вашей биржи, point-in-time цен от вашего вендора или любого alt-data-фида, который вы умеете сериализовать в OHLCV; CI-интеграция — регрессии валят сборку до того, как доедут до прода; портируемость между брокерами — логика стратегии не привязана к платформе, это просто файл.

Если вы хоть раз пытались поделиться результатом бэктеста с коллегой и поняли, что единственный способ «поделиться» — это скриншот графика, — офлайн-прогон именно то, чего вам не хватает.

Как это работает

Три шага. Полный путь от Pine-исходника до JSON-отчёта о сделках — меньше двух минут в первый раз и меньше тридцати секунд для каждого следующего прогона.

Шаг 1 — получите бесплатный API-ключ codegen. Запишитесь через форму раннего доступа ниже. Ключ придёт сразу же, бесплатный тариф щедрый — хватает на воркфлоу любого индивидуального кванта.

Шаг 2 — POST'ните Pine-исходник в codegen API. API транспилирует PineScript v6 в C++ и возвращает скомпилированный shared object. На рантайме никакой Pine-интерпретатор не крутится — на выходе нативный машинный код.

curl -s https://api.pineforge.io/v1/codegen \
  -H "Authorization: Bearer $PINEFORGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source": "'"$(cat my_strategy.pine | jq -Rs .)"'"}' \
  | jq -r '.artifact_url' \
  | xargs curl -sL -o strategy.so

Шаг 3 — docker run. Стяните образ runtime PineForge и подмонтируйте OHLCV CSV рядом со скомпилированным артефактом. Движок читает файл данных, исполняет стратегию бар за баром и пишет JSON-отчёт в stdout.

docker run --rm \
  -v "$(pwd)/strategy.so":/strategy.so \
  -v "$(pwd)/ohlcv.csv":/data.csv \
  ghcr.io/pineforge/runtime:latest \
  run /strategy.so --data /data.csv --output json

JSON-выход содержит полный список сделок с ценами входа и выхода, индексами баров, размерами позиций — плюс summary-блок с net PnL, max drawdown, числом сделок, profit factor и Sharpe. Все поля стабильны между patch-релизами одного major-версии — безопасно парсить в скриптах.

Это весь воркфлоу. Без GUI, без повторной авторизации, без подгрузки графика. Если у вас бежит Docker — у вас бегут офлайн-бэктесты PineForge.

Что можно бэктестить

Короткий ответ: всё, что вы умеете сериализовать в OHLCV. PineForge не подключён ни к одному провайдеру рыночных данных. Данные приносите вы; стратегию гоняет движок.

Крипта с вашей биржи. Тяните сырые трейды с Binance, Bybit, Kraken — любой биржи с REST или WebSocket API. Агрегируйте на тот таймфрейм, что нужен стратегии. Скармливайте CSV напрямую. Тестируйте на ровно той связке pair+venue, на которой будете торговать.

Акции от вашего вендора данных. Polygon, Norgate, BarChart, Tiingo — выбирайте источник, экспортируйте point-in-time скорректированные цены, гоняйте бэктесты на ваших реальных fill'ах и реальной вселенной без survivorship bias.

Реконструкции тиков. Если у вас есть Level 2 и хочется тестировать на синтетических 1-секундных барах, реконструированных из тиков — пожалуйста. Сгенерируйте OHLCV из тиков и передайте. Движку безразлично, откуда взялись бары.

Alt-data. Sentiment-скоры, on-chain метрики, funding rates, options skew — если можете выразить это как time series с привязкой к bar index, можно завести в Pine через кастомные колонки данных и оттестить офлайн.

Эталонная коллекция из 167 стратегий в галерее прогнана и против CSV-экспортов TradingView (для parity-валидации), и против кастомных CSV-датасетов (для регрессионных тестов). 165 из 167 берут каноническую категорию strict-excellent (дрейф PnL ≤ 0,5% по окну сравнения); оставшиеся две дают полное совпадение по сделкам в категории «уверенно» (дрейф между 0,5% и 1%, что укладывается в толерантность воспроизводимости для production-сайзинга). Один дополнительный пробник — стресс-тест граничного маржина 1× — исключён из заголовочного прогона: он вскрывает недетерминизм broker-эмулятора на стороне TV, который мы не можем смоделировать из публичного состояния Pine.

Начать