FeaturesConverterPricingCompareBlogDocsAccount
DemoJoin early access

Charts you own.
Hand the porting to it.

IndicatorSmith is a local charting workstation with a Pine Script → Python converter — and an agent that does the migration for you. Say it once and it works through the library: converts each script, proves the result against the Pine reference bar for bar, rebuilds the chart setup, and names the lines it could not convert instead of faking them. Not on sale yet; planned pricing is €249 once, with the first 12 months of updates included.

Its last run in the demo: 4 scripts · 44 clean lines · 2 unsupported · 0 differing bars in total

ETHUSD1D
SPX4h
BTCUSD 1h4h1D1W EMA 20 EMA 50 VWAP 64,120.00
engine 1.14.2 · 127.0.0.1:8741bars 720 cached · parquetrender 11 mslayout btc-daily.layout.jsonsample data · click the chart to enable zoom · drag to pan
Runs on the data you already have
The agent · a porting engineer

You state it once. It ports the library.

Not a chat box that describes the work. A standing instruction you set in one click, and an agent that then converts, proves and reports on its own — logging every cycle with what it did, why, and the number it produced. Everything on this page is printed by the demo; open it and you will get the same lines.

What you hand over

“Port my Pine library.”

The standing instruction, as you set it Port my Pine library — convert each script, prove it, and tell me honestly what you could not do.
What it costs you I will not guess at a construct I do not support. Where there is no equivalent you get a marked line and a dropped decoration rather than a silent approximation — so some files come back with something missing, by design.
  • It runs on its own clock. One script per cycle: convert, then prove it bar for bar against the Pine reference on the visible window.
  • Every cycle is logged. What it did, why it did it, and the number — including the cycles where it decided there was nothing worth saying.
  • It is stoppable. Pause, resume, undo its last change and change the instruction are one click each, in the same panel.
Standing instruction · what it did, and whyfinished · 5 cycles
Queued 4 scriptseach one is converted, then proved bar for bar against the Pine reference on the visible window; I start with rsi_divergence.pine because that is what is already openrsi_divergence.pine · vwap_bands.pine · htf_trend_filter.pine · ema_cross.pine
rsi_divergence.pine → rsi_divergence.py13 lines clean, 1 noted, 2 unsupported — then proved the converted lines bar for bar against the Pine reference0 of 306 bars differ · 0 signals off
vwap_bands.pine → vwap_bands.py8 lines clean, 2 noted — then proved it bar for bar against the Pine reference0 of 320 bars differ · 0 signals off
htf_trend_filter.pine → htf_trend_filter.py9 lines clean, 1 noted — then proved it bar for bar against the Pine reference0 of 270 bars differ · 0 signals off
ema_cross.pine → ema_cross.py14 lines clean — then proved it bar for bar against the Pine reference0 of 320 bars differ · 0 signals off
Queue finishedrsi_divergence.pine uses label.new(), which has no equivalent here — I marked the line and dropped the caption rather than substitute something that looks similar. 2 files carried a note where the wording changed but the behaviour did not.4 scripts · 44 clean lines · 2 unsupported · 0 differing bars in total
Copied from the standing-instruction panel in the demo, one entry per cycle.
The number that decides it

306 of 306 bars agree.

A converter you cannot check is a rewrite you have to trust. So every conversion is run beside the Pine reference on the same bars and counted. This is the demo's Equivalence tab on rsi_divergence.py, BTCUSD 1D — with a typical hand port of the same script in the third row, for contrast.

ImplementationBarsDifferMax ΔSignalsOff
Pine reference3066
IndicatorSmith conversion3060060
Hand port using an EMA instead of Wilder smoothing30630621.9393
The verdict, verbatim

306 of 306 bars agree. The converted Python reproduces RSI 14 exactly, and fires the same 6 signals on the same bars. Costs and fills are not part of this comparison — that is the backtest below.

Why the hand port drifts

Pine’s ta.rsi smooths with ta.rma (Wilder, alpha = 1/N). Porting it with a plain EMA (alpha = 2/(N+1)) looks right and reads wrong — the level is systematically off, so overbought and oversold cross on different bars. It also produces 13 bars with no value at all, where Pine has one.

Zero setup

One question. You configure nothing.

The demo opens with a single question — “What are you here to do?” — and five answers. Picking one sets the panes, the indicators, the dock, the guards and the standing instruction, then explains what it chose and produces the first real result. Each answer states what it costs you, because none of them is free.

I have Pine scripts to port

Line-by-line conversion with a mark in the gutter on both sides, then a bar-for-bar proof against the Pine reference.

CostsI will not guess. Where a construct has no equivalent you get a marked line and a missing decoration, not a lookalike.

I want to test an idea properly

Costs on by default, quarter-Kelly sizing inside a 7.5 % per-asset ceiling, and a verdict that is allowed to be no.

Coststhe equity curve here will look worse than every screenshot you have seen. That is the honesty, and it means fewer rules survive.

Tell me when something matters

A watch across three symbols on the 4h, plus one armed alert built from what is actually plotted.

Costsa rule strict enough to be worth reading stays quiet. Expect far more “nothing to report” than signals.

I am moving my charts across

Six symbols, layouts as plain JSON you can read and commit, and 1, 2 or 4 panes with one crosshair across all of them.

Costsyour saved drawings and alerts do not travel. You re-arm them here, once.

I just want to look at charts

One pane, the chart maximised, EMA 20 and 50, and nothing else asking for your attention.

Costsnothing runs in the background, so nothing will tell you when something moves. You are the alarm clock.

Skip — I will set it up myself

The sixth option is no option. Skip, and the workspace stays exactly as it was; the agent logs that it changed nothing rather than quietly configuring something.

What it saysNothing configured, nothing running on your behalf. That is the choice, and here is what it costs.
The part nobody copies

It refuses out loud, and publishes its own misses.

Three lines the agent actually prints. None of them makes the product look better — which is exactly why they are here.

what it could not do

“What I could not do: rsi_divergence.pine calls label.new(), and there is no equivalent object here yet. The signal still plots; the caption is gone. I would rather hand you that sentence than a silent approximation.”

— end of the conversion queue

a refusal

“No. I do not size with leverage multiples and I will not model one. Sizing here is quarter Kelly (0.25) on the measured edge, capped at 7.5 % of equity per asset, with fees at 4 bps, slippage at 20 bps and a −20 % drawdown halt. That is the ceiling, not a starting point I negotiate up from.”

— asked for a leverage multiple

a cycle where nothing happened

“Checked BTCUSD, ETHUSD, SPX at bar 521 — said nothing. SPX crossed up and separated to 0.37 × ATR, but RSI is 76.0 — on the wrong side of 50 for that direction, so the cross and the momentum disagree and I stayed quiet.”

— the watch log, a quiet cycle

Educational model output on illustrative sample data. Nothing here is investment advice.

Pine converter · The compiler

Built to read your Pine.

Paste any v4, v5 or v6 indicator or strategy. The converter parses it into an AST, resolves the series semantics and emits vectorised Python that produces the same values bar-for-bar.

History references become shifts, var blocks become accumulations, request.security gets an explicit lookahead argument, and every line is reported as translated, approximated or unsupported. Nothing is dropped silently.

  • 1,900+ functions across ta, math, str, array, matrix, strategy and request
  • Libraries resolved through import · strategies become runnable backtests
  • Equivalence run against the Pine reference, counted bar for bar — 306 of 306 agree on rsi_divergence.py
  • Regression test against 500 bars of your original values
ema_cross.pyfrom ema_cross.pine · 14 → 17 lines · 14 clean, 0 warnings
ETHUSD · 1D · ema_cross.py on the engine▲ 3 signals
IndicatorSmith Charts

Charts worth owning.

The fastest way to run eight synced panes and a hundred indicators on a laptop. Every market you have a key for. Every chart type. No cap per tier, no server between you and your data.

Open the demo
majors-1d.layout.json1 pane2 panes4 panes8 panescrosshair linked
BTCUSD · 1WEMA 20 · structure
BTCUSD · 1DEMA 20
BTCUSD · 4hEMA 20
BTCUSD · 1hEMA 20
layouts 1 · 2 · 4 · 8 panesindicators 140+ built-in · unlimited per chartrender 60 fps · GPUCtrl+1..9 to switch

Rent a chart and you rent your workflow.
Own it, and nothing expires.

Quick backtest

Prove the strategy before you trust it.

Any converted strategy() runs on the visible symbol with realistic fees and slippage — equity curve, drawdown, CAGR, Sharpe, win rate and trade list, without leaving the chart.

Compare trade counts with the Pine original on the same range. A different count means a signal-timing difference, and the report tells you which line caused it.

The card beside this is a sample report over two years of 4h bars — more history than the guest data pack carries, so the demo cannot reproduce it. What the demo does reproduce is the cost model and the arithmetic: it prints gross and net side by side on whatever window you are on, charges 4 bps of fees and 20 bps of slippage on every fill, and says “it does not survive its costs” when that is the answer.

Sample backtest · HTF Trend Filter · BTCUSD 4hSimulated data · illustration only
Equity curve
Net daily PnL
AllLongShort
Profit, before costs+€4,118+€4,690−€572
Win rate58.4%61.2%47.1%
Profit factor1.722.040.88
Max drawdown−8.9%−6.1%−4.4%
Trades18412163
Alerts · Replay

Your alerts, on your machine.

Alerts are evaluated by the engine on your laptop or your VPS — price crossings, indicator conditions, any alertcondition from a converted script — with desktop, e-mail, webhook or Telegram delivery.

No alert count limit, no throttling because someone else's server is busy. History is a local SQLite table you can query. Bar replay shows you, bar by bar, why an alert fired.

NVDA · 1D · 3 alerts fired · zone alert armedalerts.sqlite · 14 rules
fired  Cross above EMA 50 · 178.4209:41:12 · Telegram
fired  RSI 14 > 70 · 191.05Tue 15:30 · desktop
armed  Price ≥ 194.00 (zone)webhook · every bar close
Everything in one licence

Seven modules. One €249.

Nothing below is gated behind a higher tier. Every module ships with the engine and stays yours when you stop paying for updates.

The porting agent

State one instruction and it works your library on its own: convert, prove bar for bar, log every cycle, and name what it could not do. Pause, undo and stop are one click each.

See it working

Charting

GPU-accelerated candles, bars, line, Heikin-Ashi, Renko, range and tick charts. 32 magnet-aware drawing tools with alerts on trendline touches.

Explore charting

Pine converter

Pine v4 / v5 / v6 indicators, strategies and libraries to readable Python on the forge API, with a per-line report and regression test.

Open the converter

Indicator library

140+ built-ins across trend, momentum, volatility, volume, structure and statistics — each one a Python file you can open, copy and modify.

Browse the library

Alerts

Unlimited alerts evaluated locally on bar close and on tick. Desktop, e-mail, webhook and Telegram delivery with indicator values in the message.

See alerts

Multi-chart layouts

1 · 2 · 4 · 8 panes with symbol, timeframe, crosshair and drawings linked per pane or layout-wide. Layouts are JSON files you can version.

Layouts

Local data

Bring your own keys: 8 exchange and broker connectors plus Yahoo Finance and CSV. Bars cached in Parquet, so the second load is instant and offline.

Data guide
Data · Bring your own keys

Your data, included at €0.

IndicatorSmith never redistributes exchange data, which is why there is no data fee. Connect the venues you already have accounts with using read-only keys.

  • Read-only, encrypted locally. Keys live in your OS keychain and are read only by the engine process.
  • Free path out of the box. Yahoo Finance daily bars and CSV import need no key at all.
  • Cached in Parquet. Historical bars are stored on your disk; repeat loads are instant and work offline.
Connectors · symbols available per provider8 + Yahoo + CSV
Planned pricing · not on sale yet

Simple pricing.

Planned: buy once, own forever. The first 12 months of updates are included; after that, updates are optional at €79 a year. IndicatorSmith is not on sale yet, so nothing is charged today.

Perpetual licence for the current release · point-release fixes included forever

Lifetime

The full workstation, forever.

€249 one-time

Perpetual licence · 3 devices · v1.14.x and its point releases

Everything included:
  • Charting · 8 panes · 140+ indicators
  • Pine v4 / v5 / v6 converter
  • The porting agent · standing instructions · equivalence proof
  • Alerts · bar replay · quick backtest
  • 8 BYOK connectors + Yahoo + CSV
  • First 12 months of feature releases
Planned: 14-day refund if activated on fewer than 3 devices.

Lifetime + updates

Every new release, the day it ships.

Planned
€249 then €79 / yr

Same perpetual licence · update contract renews yearly · cancel anytime, keep the last version

Everything in Lifetime, plus:
  • Every 1.x and 2.x feature release
  • New Pine versions supported first
  • Priority e-mail support (1 business day)
  • Renew any time — no back-payment
Three years: €407 total, and the software stays yours.

Planned pricing. IndicatorSmith is not on sale yet. Full pricing, the update model explained and the 3-year comparison →

FAQ

Questions, answered.

What is IndicatorSmith?
A desktop charting workstation (Windows, macOS, Linux, or the engine alone in Docker) with a Pine Script → Python converter built in. It renders charts on your own machine, stores your scripts and layouts as files on your disk, and pulls market data through your own exchange or broker keys.
What does the porting agent actually do on its own?
You set one standing instruction — “Port my Pine library — convert each script, prove it, and tell me honestly what you could not do” — and it works through the queue on the workspace clock. One script per cycle: convert it, then run it beside the Pine reference on the same bars and count the differences. Every cycle is written to a visible log with what it did, why, and the number it produced. In the demo's last run that was 4 scripts, 44 clean lines, 2 unsupported lines and 0 differing bars in total. Pause, resume, undo its last change and change the instruction are one click each.
Can I stop it, and can I undo what it did?
Yes to both, and neither is buried. The standing-instruction panel has Pause, Resume, Undo last and Stop as four buttons; pausing freezes the log exactly where it is, and Undo last reverses the most recent change it made in your workspace. The agent never trades, never places an order and never touches your keys — it converts scripts, plots indicators, arms alerts you can see, and runs backtests.
Does IndicatorSmith really run without an internet connection?
Yes. The engine and UI run on localhost. You need a connection only to pull market data from your provider and, optionally, to check for updates. Charting, the converter and backtests work fully offline on data you already have.
Which Pine Script versions can the converter handle?
v4, v5 and v6 indicators, strategies and libraries. About 1,900 functions and namespaces are mapped one-to-one; a short list (request.seed, polyline, some table styling) is reported as unsupported per line rather than silently dropped. See the unsupported functions table.
Where does the market data come from?
From you. Add a read-only API key from Binance, Bybit, Deribit, Hyperliquid, Coinbase, Alpaca, Polygon.io or Interactive Brokers, or use the free Yahoo Finance feed and CSV import. We never redistribute exchange data, which is why there is no data fee.
What happens when I stop paying for updates?
Nothing breaks. Your licence is perpetual; you keep the last version released while your update contract was active, including point-release fixes for that version. Renew any time to jump to the current release — there is no back-payment.
Can I run it on more than one computer?
The planned licence includes 3 device activations that you manage yourself. Deactivate an old laptop, activate a new one — no ticket required.

Convert. Chart. Own.

Hand the porting to the agent, connect your own data, and stop paying rent on your charts. Planned pricing: €249 once, 12 months of updates included. Not on sale yet.