Scroll
pineforge
Join the Studio waitlist

Backtest locally today — Docker only, no key, free for personal trading. Drop your email to get early access to hosted Studio and Optuna optimization. One launch email and the occasional progress note.

Hosted Studio launches Q4 2026. The local runtime is free for personal trading today.

Try it · 2 min
no key · runs local
01Docker is all you need

No install, no key, no signup. The PineForge runtime is one container image — transpile and backtest both run inside it, offline.

02Transpile your Pine to C++
bash
docker run --rm --network=none \
  -e PINEFORGE_TRANSPILE_ONLY=1 \
  -v "$(pwd)/strategy.pine":/in/strategy.pine:ro \
  ghcr.io/pineforge-4pass/pineforge-engine:latest > strategy.cpp
03Backtest against your OHLCV CSV
bash
docker run --rm --network=none \
  -v "$(pwd)/strategy.cpp":/in/strategy.cpp:ro \
  -v "$(pwd)/ohlcv.csv":/in/ohlcv.csv:ro \
  ghcr.io/pineforge-4pass/pineforge-engine:latest > report.json
245/246
strict TV parity
trade-for-trade · 246 reference strategies · 0 engine bugs
100/100
vs PyneCore 85/100
three-engine bake-off; PineForge leads
~98%
strategy coverage
of what real Pine v6 scripts use; full table on /coverage
375k+
trades validated
aggregate across the 246-strategy corpus
Open core
Apache engine · runs on your machine
audit the engine · run locally · free for personal trading
strategy.pine
PineScript v6
//@version=6
strategy("EMA Cross", overlay=true, initial_capital=10000)

length = input.int(14, "Length")
sig    = ta.ema(close, length)

if ta.crossover(sig, sig[1])
    strategy.entry("long", strategy.long)

if ta.crossunder(sig, sig[1])
    strategy.close("long")
Generated C++ · emitted by codegen
class GeneratedStrategy : public BacktestEngine {
    ta::EMA          _ta_ema_1{14};
    Series<double>  _s_sig{500};

    void on_bar(const Bar& bar) override {
        int    length = get_input_int("Length", 14);
        double sig    = _ta_ema_1.compute(bar.close);
        _s_sig.push(sig);

        if (sig > _s_sig[1] && _s_sig[1] <= _s_sig[2])
            strategy_entry("long", true);
        if (sig < _s_sig[1] && _s_sig[1] >= _s_sig[2])
            strategy_close("long");
    }
};
Trades
142
Net P&L
+$3,184.62
Sharpe
1.48
Max DD
−12.7%
ma-cross paritysupertrend parityinside-bar paritystochastic-slow paritypivot-ext parity4ema-rsi parityliquidity-sweep paritymarket-shift paritymacd-histogram paritydonchian-breakout paritymatrix-pca parityregex-filter parity
Built for

Built for solo quants first.

01 / B2C primary

Solo quant traders

  • Your data, your machine, no premium tier.
  • Optuna with any custom objective.
  • Webhooks without rate limits.
Free locally today · Studio Q4 2026

Building a strategy marketplace? See seller pitch →

Running a desk or small fund? See institutional pitch →

Why PineForge

Three things TradingView’s runtime won’t give you.

01 / DETERMINISM

Same script, same data, same trades. Byte-reproducible.

02 / SPEED

Native C++. 50k bars in tens of milliseconds.

03 / OWNERSHIP

Your data, your machine, your strategy. Offline by default.

For AI assistants

Use PineForge from Claude, Cursor, or any MCP client.

Our Model Context Protocol server runs as one container — your AI agent transpiles Pine to C++ and backtests on your data, all inside it. Talk to your strategy in natural language. No API key; your code and data never leave your machine.

Run (one command)OHLCV stays on your machine.
docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-codegen-mcp:latest
Tools exposed
  • ·transpile_pine — Pine v6 → C++
  • ·backtest_pine — backtest on your CSV
  • ·backtest_pine_grid — sweep params in one shot
  • ·fetch_binance_ohlcv — pull market data
See full setup →
Where PineForge sits

One runtime that occupies a corner no one else does.

Five axes that matter to a quant who wants to ship a strategy as a product. PineForge is built around all five.

Axes chosen to test PineForge's thesis. Scored from public docs and benchmarks. Methodology

PineForge vs TradingView
WINS
5 / 5
PineForge vs TradingView on five axes.SPEEDPRIVACYLICENSEOSSDATA
SPEED
+3
PRIVACY
+2
LICENSE
+4
OSS
+3
DATA
+3
PineForge vs MQL5 Market
WINS
4 / 5
PineForge vs MQL5 Market on five axes.SPEEDPRIVACYLICENSEOSSDATA
SPEED
+1
PRIVACY
-1
LICENSE
+2
OSS
+3
DATA
+2
PineForge vs QuantConnect
WINS
4 / 5
PineForge vs QuantConnect on five axes.SPEEDPRIVACYLICENSEOSSDATA
SPEED
+2
PRIVACY
+3
LICENSE
+4
OSS
0
DATA
+1
1 tie
PineForge vs Backtrader
WINS
3 / 5
PineForge vs Backtrader on five axes.SPEEDPRIVACYLICENSEOSSDATA
SPEED
+4
PRIVACY
+4
LICENSE
+5
OSS
-2
DATA
0
1 tie
Differentiation scores by engine and axis
EngineNative speedSource privacyLicense controlOSS auditData freedom
PineForge5/54/55/53/55/5
TradingView2/52/51/50/52/5
MQL5 Market4/55/53/50/53/5
QuantConnect3/51/51/53/54/5
Backtrader1/50/50/55/55/5
Capabilities

Five things you can’t do on TradingView alone.

shipped
01
Bring your own data
Run any custom data — daily, intraday, alt — without TradingView's symbol restrictions.
shipped
02
Intra-bar resolution at any cadence
Walk inside the bar with sub-bar resolution. No more last-tick approximation.
building Q3 2026
03
Optuna with a custom objective
Optimize with any objective function — Sharpe, drawdown, profit factor, your own.
building Q3 2026
04
Forward-test with TradingView-shaped webhooks
Walk-forward analysis built in. Out-of-sample is the default, not an afterthought.
designed 2027
05
Strategy marketplace · sell compiled .so
Sell compiled .so. Time-bound, machine-bound, broker-bound — set by you, not by a platform.
Bring your own dataexpand
Any OHLCV CSV — your tick data, your custom feed, your alternative-asset history. Run offline, in CI, in Docker. No upload, no API key.
Intra-bar resolution at any cadenceexpand
Six distribution modes (uniform, cosine, triangle, endpoints, front/back-loaded), optionally volume-weighted. A limit at $100 inside a 95–105 bar fills at exactly $100 — TradingView’s bar magnifier without the subscription.
Optuna with a custom objectiveexpand
Sharpe, Sortino, drawdown, profit factor — or any one-line lambda you want the optimizer to chase.
def objective(report):
  return 0.6 * report.sharpe - 0.3 * report.max_dd + 0.1 * report.profit_factor
Forward-test with TradingView-shaped webhooksexpand
Drop-in replacement for TradingView alerts. Same JSON shape, same runtime as your backtest — no rate limits, no replay drift.
Strategy marketplace · sell compiled .soexpand
AES-256-GCM-encrypted shared library. Ed25519-signed, machine-bound, time-bounded licenses. Buyers tune the inputs you expose; they never see the source.
How it works

Four stages.
Zero hidden state.

01 · input
.pine source
your file
02 · parse
AST + type-check
Pine v6 spec
03 · transpile
C++ codegen
no runtime tax
04 · compile + run
Native binary
~9.7ms / 50k bars
05 · validate
Trade-for-trade
245/246 strict · 0 engine bugs
Studio preview

One report, every number you actually trust.

ETHUSDT · 15m2025-07 → 2026-04EMA Cross · L=21
Net
+31.84%
Sharpe
1.48
Max DD
−12.7%
Win rate
52.1%
Trades
142
Profit factor
1.71
Equity curve · vs Buy & HoldPineForgeB&H
Jul '25Sep '25Nov '25Jan '26Mar '26Today
PineScript v6 coverage

~90% of the language.
~98% of what strategies actually use.

Drawing primitives, alerts, and live-tick semantics are out of scope by design — PineForge runs offline. Everything that determines a trade is in.

Full function-by-function coverage
ta.* — 59 functions + 8 series + pivot helper (67 classes)68/68100%
math.* — deterministic + rollingcoresupported
str.* — format · split · regex · tostringcoresupported
strategy.* — orders · accessors · risk gatesfull100%
array⟨T⟩ · map⟨K,V⟩ · UDTvia codegensupported
matrix⟨T⟩ — Eigen-backed50+ opssupported
request.security — ratio · calendar · lower-TFcoresupported
drawing & alertsout of scope
TradingView parity

We don’t ask you to trust the engine.
We diff it.

Every release is validated trade-by-trade against TradingView’s CSV exports — 246 reference strategies, full corpus open-source. 245 strict, 1 documented TV-side anomaly, zero engine bugs.

246/246
all accounted for — zero engine bugs
Excellent245TV-side anomaly1Engine bugs0
Three-engine bake-off · 100 strategies · same OHLCV
How PineForge stacks up against PyneCore and PineTS.
Full comparison & reproduction recipe
C++ static lib
PineForge
100 / 100
100 excellent · 0 strong · 0 weak
Python (cloud-transpiled)
PyneCore
85 / 100
85 excellent · 2 strong · 10 moderate · 3 weak
TypeScript (LuxAlgo)
PineTS
indicators only
strategy backtester is upstream roadmap
The 15-strategy PyneCore gap is consistently in bracket / trail / partial-exit semantics, where PyneCore’s broker emulator differs from TV. Three canonical examples: 06-liquidity-sweep, 07-scalping-strategy, 49-partial-exit-qty-percent. See the per-strategy breakdown →
What’s coming

Backtest is the start. Live is the point.

  1. now
    shipped
    Deterministic batch backtests
    Pine v6 → C++ → trades. 245/246 strict TV parity, 0 engine bugs, 93.06% line coverage, open-source pineforge-engine.
  2. Q3 2026
    building
    Forward-test + Optuna optimization
    Streaming feed_bar() API. Multi-window robustness scoring.
  3. Q4 2026
    next
    Hosted Studio · paper trading
    Code · Backtest · Optimize · Compare workspace. One broker bridge at launch.
  4. 2027
    later
    Live execution · marketplace
    Multi-broker fills. Encrypted strategy distribution. Audit log per order.
Frequently asked

Is this legal? How does it compare to PyneCore? What if PineForge shuts down? Eight short answers.

Read the FAQ

Be there when Studio opens.

One launch email. One occasional progress note. No upsell-marathon.