Join the waitlist. We’ll send one launch email and one occasional progress note.
Hosted Studio launches Q4 2026. Self-host today via the open-source CLI.
//@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")
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"); } };
Any OHLCV CSV — your tick data, your custom feed, your alternative-asset history. Run offline, in CI, in Docker. No upload, no API key.
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.
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
Drop-in replacement for TradingView alerts. Same JSON shape, same runtime as your backtest — no rate limits, no replay drift.
AES-256-GCM-encrypted shared library. Ed25519-signed, machine-bound, time-bounded licenses. Buyers tune the inputs you expose; they never see the source. Full design →
BacktestEngine with TA call-sites resolved, series detected, enums tabled.c++ -O2 -shared against libpineforge.a. MD5-keyed cache skips recompilation when neither script nor runtime has changed..so via ctypes, streams bars from your DataFrame, collects a structured report — trades, P&L, equity, MAE/MFE.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.* — 66 stateful indicator classes | 66/68 | 97% |
| math.* — deterministic + rolling | core | supported |
| str.* — format · split · regex · tostring | core | supported |
| strategy.* — orders · risk · accessors | full | 100% |
| array<T> · map<K,V> · UDT | via codegen | supported |
| matrix<T> — Eigen-backed | 60+ ops | supported |
| request.security — ratio · calendar · lower-TF | core | supported |
| drawing & alerts | — | out of scope |
Every release is validated trade-by-trade against TradingView’s CSV exports — 162 reference strategies, full corpus open-source.
06-liquidity-sweep, 07-scalping-strategy, 49-partial-exit-qty-percent) is consistently in bracket / trail / partial-exit semantics, where PyneCore’s broker emulator differs from TV. See the per-strategy breakdown →feed_bar() API. Multi-window robustness scoring.Is this legal? How does it compare to PyneCore? What if PineForge shuts down? Eight short answers.
One launch email. One occasional progress note. No upsell-marathon.