Featured image of post Replicate TradingView's Strategy Backtest UI Without a Paid Plan: 6 Open-Source, Self-Hosted Options

Replicate TradingView's Strategy Backtest UI Without a Paid Plan: 6 Open-Source, Self-Hosted Options

TradingView locks the strategy tester's equity curve, trade list, and drawdown behind a paywall, and Pine Script is a closed runtime. I compared 6 open-source, locally-deployable options — backtesting.py, Freqtrade+FreqUI, TradingView's own lightweight-charts, vectorbt, backtrader, and Jesse — explaining which looks most like TV's strategy tester, how to deploy each, and where each one bites. Upfront conclusion: no open-source project runs Pine Script locally and renders like TV, but once you port the strategy to Python, these tools replicate — and in some ways exceed — TV's backtest display.

A heads-up: this is the deep-dive of a two-part set — the full landscape (free-tier limits, alternative platforms, exchange-native charts) is in TradingView’s Free Tier: The Real Limits and Legitimate Workarounds. This piece drills into one path: which open-source tools you can self-host to draw a strategy backtest the way TV does. I’ll give you the slightly deflating-but-honest conclusion first, then walk through each option.

1. The pain: TV’s backtest UI is genuinely good, but blocked twice

TradingView’s Strategy Tester is probably the most frictionless backtest UI a retail trader can touch: equity curve, List of Trades, per-trade performance, underwater drawdown, properties summary, and clicking a bar jumps to the matching trade. Two problems:

  1. The paywall: many of the good parts (multi-symbol comparison, detailed performance breakdown, longer backtest history) require Essential or Premium.
  2. Pine is a closed runtime: Pine Script is TV’s own language, running on TV’s servers. Nothing in the open-source world can “drop a .pine file into a local tool and get a backtest chart identical to TV’s.”

The second point is the crux. So every option below follows the same path: port the strategy to Python (you probably already have a Python version, or porting is quick), then use an open-source tool to draw the backtest result in a TV-like way.

2. Six options, from “fastest chart” to “most like TV’s full suite”

1. backtesting.py — fastest path to a TV-style backtest chart

backtesting.py is a pure-Python backtesting library; pip install backtesting and you’re in. Its killer feature is a single bt.plot() call — it pops open an interactive HTML page in your browser with: candlesticks + entry/exit markers, an equity curve, returns, an underwater drawdown plot, plus a stats table (win rate, profit factor, max drawdown, Sharpe, etc.).

This is the closest I found to “one action produces something resembling TV’s strategy tester chart.” It’s not TV’s five-tab full layout; it compresses the core info onto one zoomable, hoverable chart. For “I just want to see what my strategy looks like,” that’s enough.

Caveats: long-only by default; shorting/flipping needs hedging=True; the engine is bar-by-bar and ignores funding fees and detailed slippage, so numbers skew optimistic. Fully local, free, no server to run.

2. Freqtrade + FreqUI — the web UI that most resembles TV’s full multi-panel layout

Freqtrade is the most mature open-source quant framework in crypto. Docker one-liner, ships a web UI called FreqUI. Its backtest page has profit curves, ROI, per-trade logs, per-pair breakdowns — in layout terms, the closest to TV’s “multiple tabs stuffed with data” full tester.

For: crypto traders who want backtest + live trading + multi-pair in one stack and don’t mind configuring Docker and downloading data. Heavy, but most complete. Fully open-source, free, self-hosted.

3. TradingView lightweight-charts — TV’s own open-source charting lib, identical candlesticks

This one’s the most fun: lightweight-charts is the same underlying library TradingView’s web candles use — Apache 2.0, free, still actively maintained in 2026. You can draw candlesticks that look identical to TV’s.

But it’s a charting library, not a backtester — you plug in your own backtest engine (e.g., your Python strategy) and feed it trade points to render. The ecosystem has Python wrappers (lightweight-charts-esistjosh, a streamlit wrapper), and people use it as a front-end for backtesting.py’s results.

For: those fixated on “the candles must look exactly like TV’s” and willing to assemble it themselves. Most work, most control, highest fidelity. Note: TV also has an “advanced charting library” (with drawing tools) that needs a license application; the lightweight version is the fully free, open-source one.

4. vectorbt — vectorized, very fast, but the complete version is paid

vectorbt turns backtesting into pure pandas/NumPy + Numba vectorization, running parameter-grid scans tens of times faster than bar-by-bar engines, with plotly for interactive charts.

For: large-scale parameter sweeps, finding optimal regions via heatmaps. Caveats: so-so docs; and serious use requires a vectorbt Pro membership (invite-only/paid). The free core is enough but the UI isn’t on Pro’s level. It’s a library, not a finished UI — you’ll write some code.

5. backtrader — the veteran, stock-friendly

backtrader is an old hand in Python quant: event-driven, mature ecosystem, thick docs. It ships matplotlib static plots, and the community has a backtrader_plotting extension that bolts on Bokeh interactivity.

For: stocks/futures traders who like traditional OHLCV strategies and want a stable, proven library. For crypto perpetuals it doesn’t natively understand funding, so for crypto I’d reach for Freqtrade first. Fully open-source, free.

6. Jesse — crypto OSS engine, but the polished UI is paid

Jesse is a Python backtest + optimization + live-trading framework built for crypto; the engine is open-source on GitHub. Its DSL for writing strategies is pleasant.

Honest note: the polished desktop UI and cloud service on jesse.trade are freemium (free for contributors, paid for others); what’s open is the engine itself. So for “run locally + see a TV-like UI,” the free part does it but isn’t as turnkey as Freqtrade’s FreqUI. Don’t confuse it with a token called JESSE — that’s a coin, unrelated to this framework.

3. A table to pick

Your situationFirst pickWhy
Just want the equity curve + trades fastest, TV-stylebacktesting.pyOne-line plot → interactive HTML, zero deploy
Crypto, want backtest + live + multi-pair in oneFreqtradeFreqUI most resembles TV’s full tester
Candles must look exactly like TV, willing to self-assemblelightweight-chartsTV’s own underlying library
Large parameter sweeps, heatmapsvectorbtVectorized speed (Pro is stronger)
Stocks/futures, want a stable veteranbacktraderMature ecosystem, full docs

4. I picked backtesting.py — walking through it with MacdCross

My quant project LynxCrypto has a strategy called MacdCross-4h (MACD 12,26,9 golden/death cross flip + 2×ATR stop) that already had a Python implementation. Porting it to backtesting.py looks roughly like this (simplified, long side only; shorting needs hedging):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import talib
from backtesting import Backtest, Strategy
from backtesting.lib import crossover

class MacdCross(Strategy):
    fast = 12; slow = 26; signal = 9; atr_p = 14; stop_mult = 2.0

    def init(self):
        # talib.MACD returns (dif, dea, hist); talib.ATR is Wilder ATR
        self.dif, self.dea, _ = self.I(
            talib.MACD, self.data.Close, self.fast, self.slow, self.signal)
        self.atr = self.I(talib.ATR, self.data.High,
                          self.data.Low, self.data.Close, self.atr_p)

    def next(self):
        price = self.data.Close[-1]
        if crossover(self.dif, self.dea):          # golden cross -> long
            self.buy(size=0.01, sl=price - self.stop_mult * self.atr[-1])
        # death-cross shorting needs hedging=True; full flip version is in the repo

df = ...  # your OHLCV DataFrame, columns Open/High/Low/Close/Volume
bt = Backtest(df, MacdCross, cash=10000, commission=.0005)
stats = bt.run()
bt.plot()   # browser pops: candles + entries/exits + equity + drawdown + stats

Half an hour from “I have it” to “chart on screen.” That’s enough for me — what I want is to see signal timing, stop placement, and how equity crawls, not yet another service to operate.

5. Caveats you must internalize

  • No local Pine runtime: there are Pine→Python emulators like pinepy out there — incomplete, unreliable. Just port to Python honestly.
  • Funding fees: in perpetual-futures backtests, funding is a big number. backtesting.py / Freqtrade (partially) / self-assembled lightweight-charts don’t always model it truthfully, so numbers skew optimistic. TV’s Pine backtest doesn’t model funding either. For funding-inclusive truth, use a tick-level engine of your own.
  • Different fill models: each tool’s matching, slippage, and commission assumptions differ, so the same strategy backtests to different numbers across tools. Don’t expect bit-for-bit parity with TV. Read relative shape (curve shape, drawdown location), not absolute amounts.
  • Look-ahead bias: in backtesting.py’s next() you can only use [-1] and earlier; touching a future bar throws an error — that’s actually a feature, it forces clean code.

6. Conclusion + two pro options

For most people who “want to see a TV-like strategy backtest chart on their own machine,” my advice: install backtesting.py first, get a chart in half an hour; come back to Freqtrade when you want crypto live trading + multi-pair; only reach for self-assembled lightweight-charts if you’re obsessed with candlestick fidelity.

Two more institution-leaning options: QuantConnect/Lean is an open-source backtest engine, cloud-leaning, multi-asset; Tradex is a 2026 library whose result.show(style="bloomberg") renders a four-quadrant layout + monthly heatmap — worth watching, but still young.

The open-source ecosystem can already replicate the “display style and data” of TradingView’s strategy backtest to about 80–90%. What’s missing is mainly that closed Pine runtime — and that path connects the moment you port to Python.


Sources: