Запускайте бэктесты 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.