PineForge Codegen
официальныйЛокальный MCP-сервер: ИИ пишет PineScript v6, встроенный движок транслирует в C++ и тестирует на данных Binance — без API-ключа, полностью локально.
Что можно делать с PineForge Codegen MCP?
- Transpile Pine Script v6 to C++ — Преобразуйте стратегию Pine Script v6 в модуль перевода C++ с помощью
transpile_pineбез запуска бэктеста. - Backtest a Pine strategy against OHLCV data — Выполните единичный детерминированный бэктест с
backtest_pine, указав исходный код, путь к CSV и опциональные параметры ввода, переопределения и времени выполнения. - Sweep strategy parameters in one run — Используйте
backtest_pine_gridдля тестирования всех комбинацийinputs×overridesпо одному CSV с ранжированием и опциональной параллельной обработкой. - Fetch Binance OHLCV data for backtesting — Загрузите спотовые или USDT-перпетуальные свечи через
fetch_binance_ohlcvи запишите CSV, готовый к бэктесту, с автоматической пагинацией. - Discover available Binance symbols — Получите список или отфильтруйте торгуемые символы с помощью
binance_symbolsперед загрузкой рыночных данных. - Inspect engine parameters and Pine coverage — Запросите
list_engine_paramsдля всех доступных переопределений и параметров времени выполнения или используйтеcheck_pine_featureиget_coverage_topicдля проверки поддержки языка Pine.
Документация
@pineforge/backtest-mcp
Автономный MCP-сервер stdio: ИИ-агент пишет PineScript v6, а встроенный образ pineforge-release транспилирует его в C++ и тестирует на исторических данных Binance — всё в одном контейнере, внутри процесса. Полностью локально — образ включает pineforge-codegen транспилятор, поэтому Pine → C++ → бэктест выполняются без демона Docker на хосте. Без API-ключей, ничего не покидает систему.

Инструменты
| название | где выполняется | назначение |
|---|---|---|
transpile_pine | внутри процесса | Pine v6 → C++ единица трансляции (только транспиляция) |
list_engine_params | локально (без I/O) | Каталог всех параметров overrides + runtime, принимаемых бэктестами |
backtest_pine | внутри процесса | Одиночный бэктест Pine-кода на OHLCV CSV |
backtest_pine_grid | внутри процесса | Декартов перебор inputs × overrides с переиспользованием одной компиляции |
fetch_binance_ohlcv | публичное API Binance | Запись готового к бэктесту CSV из спотовых или USDT-бессрочных свечей Binance |
binance_symbols | публичное API Binance | Список / фильтрация символов Binance (внутрипроцессный кэш на 5 мин) |
list_coverage_topics | локально (без I/O) | Все темы покрытия Pine v6 с однострочным статусом и сводкой |
check_pine_feature | локально (без I/O) | Проверка поддержки идентификатора/пространства имен Pine в PineForge |
get_coverage_topic | локально (без I/O) | Полная детализация + списки поддерживаемых/неподдерживаемых функций для одной темы покрытия |
engine_info | локально (без I/O) | Отчет о встроенном движке: режим, встроенный флаг, версия |
Установка
Запускается как автономный контейнер через stdio — движок встроен, внутри процесса, без демона Docker на хосте, без API-ключа. Смонтируйте рабочий каталог в /work, чтобы сервер мог читать/записывать ваши CSV:
docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest
Единственное требование: Docker и исходящая сеть для инструментов получения данных Binance. Подключите к вашему MCP-клиенту, как описано ниже.
Размещённая альтернатива (без установки)
Хотите быстрейшую пробу без Docker и API-ключа? Вставьте конечную точку Streamable HTTP в любой MCP-клиент:
https://mcp.pineforge.dev/mcp
Компромисс по сравнению с этим репозиторием: размещённый сервер лимитирован (недельная квота на IP для backtest_pine + ограничение скорости на границе Cloudflare) и работает с фиксированным, изолированным крипто-озером данных (спот Binance + USDT-бессрочные). Этот локальный репозиторий безлимитный, работает офлайн и позволяет использовать собственные CSV и запускать сеточные переборы. Репозиторий: pineforge-mcp-public.
Конфигурация клиента
Смонтируйте каталог в /work; указывайте fetch_binance_ohlcv / backtest_pine на пути внутри него. (-i обязателен; никогда не добавляйте -t — TTY портит поток JSON-RPC через stdio.)
Claude Desktop / Cursor / общий JSON
{
"mcpServers": {
"pineforge-backtest": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "${workspaceFolder}:/work",
"ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
]
}
}
}
(В Cursor: Настройки → MCP → Новый MCP-сервер → вставьте указанное выше.)
Claude Code CLI
claude mcp add pineforge-backtest \
-- docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest
Для ИИ-агентов — использование через MCP
Какой пробел в возможностях это закрывает. Языковая модель не может точно протестировать стратегию PineScript v6 на исторических данных, рассуждая о ней. Семантика рядов PineScript, порядок исполнения внутри бара, правила заглядывания вперёд и логика ордеров/позиций strategy.* не воспроизводятся приблизительно, поэтому модель, симулирующая бэктест в уме — или создающая его вручную на Python (backtrader/vectorbt) — будет галлюцинировать сделки и P&L и не может гарантировать паритет с TradingView. PineForge вместо этого запускает реальный детерминированный движок на C++, проверенный на строгий паритет с TradingView на 245 из 246 эталонных стратегий (0 ошибок движка), на корпусе из 246 стратегий,总计 ~375k проверенных сделок (методология и валидация, по состоянию на 2026-06-03, движок f805611). Единственное несовпадение — задокументированный недетерминизм брокера на стороне TradingView на точной границе маржи 1x собственного капитала, а не ошибка движка.
Бэктест PineScript — это вычисляемые внешние данные, а не стабильное знание — он зависит от исходного кода стратегии пользователя и его OHLCV и должен быть воспроизводимым. Это вызов инструмента, а не задача припоминания.
Когда эти инструменты уместны. backtest_pine (или backtest_pine_grid для перебора параметров) покрывает случай, когда пользователь предоставляет стратегию PineScript v6 и хочет протестировать её, оценить, проверить прибыльность, посчитать сделки, вычислить P&L или воспроизвести результаты TradingView на указанных OHLCV. transpile_pine покрывает только конвертацию Pine → C++. fetch_binance_ohlcv покрывает случай, когда пользователь называет символ/таймфрейм, но не предоставил файл данных. Эти инструменты не предназначены для концептуального объяснения работы стратегии, редактирования синтаксиса Pine или предоставления торговых или финансовых советов.
Честные ограничения. Офлайн; PineScript v6; требуется Docker. Бэктест измеряет историческое поведение стратегии — это не прогноз будущей доходности и не инвестиционный совет. Наивные или приближённые бэктесты регулярно завышают прибыль (несмоделированное проскальзывание и комиссии, допущение о закрытии по цене закрытия, смещение заглядывания вперёд); ценность здесь — в детерминированном, проверенном на паритет прогоне, чтобы пользователь мог проверить стратегию перед тем, как рисковать капиталом.
list_engine_params — изучение параметров
Бесплатный, локальный, без I/O каталог всех ключей, принимаемых backtest_pine /
backtest_pine_grid, разделённый на две группы:
strategy_overrides— 9 полей заголовкаstrategy(...), которые среда выполнения читает черезPINEFORGE_OVERRIDES:initial_capital,pyramiding,slippage,commission_value,commission_type(percent/cash_per_order/cash_per_contract),default_qty_value,default_qty_type(fixed/percent_of_equity/cash),process_orders_on_close,close_entries_rule(ANY/FIFO).runtime_args— аргументы дляrun_backtest_full(НЕ часть заголовка strategy()):input_tf,script_tf,bar_magnifier,magnifier_samples,magnifier_dist(uniform/cosine/triangle/endpoints/front_loaded/back_loaded).
Каждая запись — {key, type, enum?, description}. Вызовите это сначала, чтобы узнать, что
принимает движок, перед составлением запроса backtest_pine.
Пример backtest_pine
{
"source": "//@version=6\nstrategy(\"sma cross\")\n...",
"ohlcv_csv_path": "./btcusdt_15m_7d.csv",
// Optional: override Pine input.*() values without touching the source.
// Keys = the second arg of input.*(...) (e.g. "Fast Length").
"inputs": { "Fast Length": 8, "Slow Length": 21 },
// Optional: override strategy(...) header fields. Each key is typed —
// call list_engine_params for the catalog.
"overrides": {
"initial_capital": 100000,
"default_qty_type": "percent_of_equity",
"default_qty_value": 10,
"commission_type": "percent",
"commission_value": 0.04,
"slippage": 2,
"pyramiding": 0,
"process_orders_on_close": true,
"close_entries_rule": "ANY"
},
// Optional: engine runtime args (NOT strategy() header). Use script_tf
// to aggregate the input CSV into a coarser strategy timeframe — the
// engine REJECTS script_tf finer than input_tf with a structured error
// ({"engine":"pineforge","error":"..."}, exit code 1).
"runtime": {
"input_tf": "15",
"script_tf": "60",
"bar_magnifier": true,
"magnifier_samples": 8,
"magnifier_dist": "endpoints"
}
}
inputs передаётся как переменная окружения PINEFORGE_INPUTS движку,
overrides как PINEFORGE_OVERRIDES, а каждое поле runtime как отдельная
переменная окружения PINEFORGE_INPUT_TF / PINEFORGE_SCRIPT_TF / PINEFORGE_BAR_MAGNIFIER /
PINEFORGE_MAGNIFIER_SAMPLES / PINEFORGE_MAGNIFIER_DIST. Пусто /
не задано → значения по умолчанию из strategy.pine, при этом input_tf автоопределяется по
разнице между первыми двумя строками CSV.
Возвращает ту же JSON-схему, что и автономный образ Docker pineforge-release:
{
"engine": "pineforge",
"summary": { "total_trades": 49, "net_pnl": -190.85, ... },
"applied_inputs": { "Fast Length": "8", "Slow Length": "21" },
"applied_overrides": { "default_qty_value": "5" },
"trades": [ ... ],
"elapsed_seconds": 0.0042,
"_meta": { "strategy_cpp_bytes": 5079, "image": "ghcr.io/.../pineforge-release:latest" }
}
backtest_pine_grid — перебор параметров
Транспилирует исходный код Pine однократно (локально, в контейнере), затем запускает тот же
скомпилированный бинарный файл для декартова произведения inputs × overrides.
Возвращает ранжированный список плюс лучшую запись в best.
{
"source": "//@version=6\nstrategy(\"macd\")\n...",
"ohlcv_csv_path": "./btcusdt_15m_7d.csv",
// Each axis is {key: list-of-values}. All combinations are tried.
"inputs": {
"Fast Length": [8, 12, 19],
"Slow Length": [21, 26, 39]
},
"overrides": {
"default_qty_value": [1, 5],
"commission_value": [0.04]
},
// Optional knobs:
"fixed_inputs": { "Source": "close" }, // applied to every combo
"fixed_overrides": {}, // typed strategy() overrides
"runtime": { "input_tf": "15", // engine runtime args, fixed
"script_tf": "60" }, // across the sweep
"max_combinations": 64, // hard cap
"concurrency": 2, // parallel docker runs
"include_trades": false, // omit per-trade lists
"sort_by": "net_pnl" // ranking metric
}
fetch_binance_ohlcv — получение рыночных данных
Записывает готовый к бэктесту CSV (заголовок timestamp,open,high,low,close,volume,
timestamp = время открытия в UNIX мс UTC) из публичных конечных точек Binance. Авторизация
не требуется. Запросы > 1000 баров разбиваются на страницы
автоматически. Выходной путь подчиняется той же области cwd, что и
ohlcv_csv_path (расширьте с помощью PINEFORGE_ALLOW_ANYWHERE=1).
{
"symbol": "BTCUSDT",
"interval": "15m", // 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M
"market": "spot", // or "usdt_perp" for USDT-margined perpetual futures
"limit": 672, // total bars; > 1000 paginates
"output_path": "./btcusdt_15m_7d.csv"
// Optional: "start_time" / "end_time" in UNIX ms UTC.
}
binance_symbols — поиск / проверка символов
Возвращает список символов, доступных в публичном API Binance для получения OHLCV.
Кэшируется на 5 мин внутри процесса. Используйте для проверки символа перед
вызовом fetch_binance_ohlcv.
{
"market": "usdt_perp",
"query": "BTC", // case-insensitive substring match
"quote_asset": "USDT",
"status": "TRADING",
"contract_type": "PERPETUAL", // futures-only filter
"limit": 50
}
Область файловой системы
По умолчанию пути OHLCV должны находиться внутри текущего рабочего каталога процесса MCP-сервера. Переопределите с помощью:
export PINEFORGE_ALLOW_ANYWHERE=1
Прочие переменные окружения
| переменная | по умолчанию | назначение |
|---|---|---|
PINEFORGE_IMAGE | ghcr.io/pineforge-4pass/pineforge-release:latest | Образ (среда выполнения движка + встроенный кодогенератор), используемый для транспиляции + бэктеста |
PINEFORGE_ALLOW_ANYWHERE | 0 | Разрешить пути OHLCV вне cwd |
PINEFORGE_DOCKER_TIMEOUT_MS | 120000 | Жёсткое завершение для docker pull / docker run |