pineforge
Источник

Почему мы это построили PineForge.

Три развилки, которые мы не выбрали. Два года охоты за двумя кейсами на уверенном уровне parity. Один тезис: PineScript заслуживает настоящего runtime.

Почему офлайн-воспроизводимость

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

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

Почему не контрибьютили в PyneCore

PyneCore — самый амбициозный open-source движок PineScript. Мы сами используем его как «второе мнение». Думали об апстриминге всего, что построили. Не стали по двум причинам:

Мы относимся к PyneCore как к second source. Каждый релиз PineForge гонит parity-проверку и против PyneCore, и против TradingView. Их excellent-rate настолько высок, что расхождения между двумя движками почти всегда означают баг — обычно у нас.

Почему не доразвить Backtrader

Backtrader — рабочая лошадка алготрейдинга на Python. Надёжный, любимый и не той формы под эту задачу. Это Python-нативный фреймворк бэктестинга, который умеет кастомные классы стратегий. Pine — другой язык с другой семантикой — никаким количеством Python не подделаешь lookahead в `request.security()`, внутрибаровую обработку ордеров или OCA-группы выходов через `oca_name`.

И снова: стратегия Backtrader — это Python-исходник, который и распространяется как Python-исходник. Маркетплейс на скомпилированных бинарниках требует шага транспиляции, на выходе которого появляется деплоимый артефакт. Поверхность Backtrader этого не даёт.

Гонка к 165/167

Начали с 9 стратегий и 76% строгого parity. Спустя два года — 167 стратегий, 165 строго. Зазор от 76 до 98,8% построен не количеством codegen, а охотой за расхождениями в четвёртом знаке после запятой — по одному, неделями каждое.

Большая часть тех недель ушла на то, чтобы подобрать те самые определения слов «exit», «fill», «trail», что используются в TradingView — документация Pine описывает API; точная семантика обработки ордеров проявляется только когда сравниваешь списки сделок бар за баром. Мы это и делали, продолжали спрашивать, почему наш и эталонный расходятся, и сглаживали отличия по одному.

Два кейса на уверенном уровне — самые интересные: corner case'ы, потребовавшие глубже всего копать и оставшиеся в roadmap'е. Мы относимся к ним как к research, а не как к стыду.

Что дальше

Q3 2026: Выходит интеграция с Optuna. Оптимизация любой стратегии по любой однострочной целевой функции — Sharpe, drawdown, profit factor, ваша Python-лямбда. Walk-forward встроен, out-of-sample — по умолчанию, а не как додумка постфактум.

Q4 2026: Запуск хостинга Studio. Workspace проекта, бэктест, оптимизация, сравнение, paper-trading — всё в браузере, всё на той же `.so`, что вы сегодня гоняете локально через CLI. Wave-1 доступ — сначала для листа раннего доступа.

2027: Открывается маркетплейс. Авторы публикуют скомпилированные `.so` с заданными ими лицензионными границами: время, машина, брокер, символ, диапазоны входов. Покупатели гоняют на своих данных и не видят исходника. Та же модель доставки, что сработала у MQL5 — только стратегии написаны на Pine, runtime открыт для аудита, а лицензии отзываются.

Тот 1%, что не пишется руками

Каждый parity-движок, о котором мы читали, был построен и брошен кем-то, кому стало скучно на 90%. Последние 10% — однообразная, трудозатратная, негламурная работа: её должны делать люди, которых искренне зажигает объяснять, почему два списка сделок расходятся на 0,0001%.

Это и есть команда. Это и есть дисциплина. Это и есть то, что делает runtime достойным ваших денег.