QuantScan Web
Charts · Scans · Backtests

Chart, scan and backtest
your own market data.

QuantScan reads the end-of-day price files in your data folder and turns them into interactive charts, market-wide scans and strategy tests — all in the browser.

–symbols loaded
–indicators
–script functions
D · W · Mtimeframes

Chart

Interactive candlestick or line charts with synchronized indicator panels and drawing tools.

  • Daily, weekly and monthly views
  • 20 indicators: moving averages, Bollinger Bands, VWAP, SuperTrend, RSI, MACD, Stochastic, ADX, CCI, Williams %R and more
  • Trendlines, horizontal lines, rays, vertical lines and rectangles
  • Save and reload indicator setups as Profiles
Open Chart →

Scan

Run one rule across every symbol at once and see which ones match right now.

  • Results table with Buy / Sell, date and closing price
  • Save your scripts by name and load them again later
  • Skipped files are reported, never silently dropped
Open Scan →

Script & Backtest

Write a rule in plain, readable syntax, mark it on the chart, then trade it over the symbol's whole history.

  • Fills at the next bar's open — no look-ahead bias
  • Starting capital and brokerage you can set
  • Equity curve, win rate and a full trade list
Open Script & Backtest →

Help

Everything explained in one place, with a searchable reference for every script function.

  • Writing scripts, with ready-to-use examples
  • Reference for all 52 script functions
  • Keyboard shortcuts and troubleshooting
Open Help →

Get going in three steps

1

Pick a symbol

Open the Chart and click the symbol button, or use the ↑ ↓ arrow keys to flip through your list.

2

Add indicators

Open Indicators, tick the ones you want, and click any badge on the chart to change its period or color.

3

Scan and test

Turn an idea into a one-line rule, scan every symbol with it, then backtest it on the one you care about.

Contact support

Questions, a login problem, a renewal, or feedback? Tell us and we will get back to you. You do not need to be signed in.

Hover over the chart to see OHLCV and indicator values.
Loading...

Scan — runs the script below against every ticker, not just the one currently charted

Script Rules — same "<expression> then Buy/Sell" syntax as the desktop app

Backtest — simulates trading the script above over the ticker's full history

Getting started

QuantScan charts, scans and backtests the end-of-day price files that sit in this server's data folder — one CSV per symbol, named after the symbol (RELIANCE.csv). Every file needs the columns Date, Open, High, Low, Close, Volume; anything extra is ignored.

HomeThis overview. Click the logo at any time to come back.
ChartOne symbol, with indicators and drawing tools.
ScanOne rule against every symbol.
Script & BacktestTest a rule on one symbol's whole history.

The Chart

Choosing what you see

  • Symbol — click the symbol button at the top to search the list, or press ↑ / ↓ to move to the previous or next symbol.
  • Timeframe — the D / W / M dropdown switches between daily, weekly and monthly bars. Weekly and monthly bars are built from the daily data, and every indicator is recalculated on them.
  • Chart type — the candlestick icon switches between Candlestick, Line, Heikin Ashi and TPO (Market Profile). Theme and candle colours are in the Settings tab.
  • Crosshair and Volume icons switch the crosshair and the volume bars on and off.

Reading the chart

  • Hover to see Open, High, Low, Close, Volume and the value of every indicator on that bar in the line above the chart.
  • Scroll the mouse wheel to zoom and drag to pan. Every panel moves together, so the bars always line up with the price chart.
  • Drag the bottom edge of any indicator panel to make it taller or shorter.
  • The chart opens on the latest 250 bars with a little empty space at the right edge.

Watchlists

Click the symbol button (top left of the Chart tab). At the top of the popup, the drop-down picks a watchlist — or All symbols. Use + to create a list, the pencil to rename it and the bin to delete it (click twice). Click the star beside a symbol to add or remove it; with a list selected it goes into that list, and from All symbols it goes into Favourites. To add several at once, type them into the box (TCS, INFY) and press Add.

The list you pick stays active: ↑ / ↓ then step through only that list, in both charts when the chart is split. Watchlists are saved on the server under your account, so they follow you to any computer.

Fit button

Scrolling the mouse wheel or dragging on a chart's price axis zooms its price scale. When you move to another symbol or timeframe the scales are reset automatically so the new chart always fits. The Fit button (four corner arrows, next to the split button) does the same on demand, and also restores any indicator panels you resized to their normal height and shows the latest 250 bars.

Split chart

On the Chart tab, click the split button (the box with a line down the middle) to show a second chart beside the first — for example Daily on the left and Weekly on the right. Choose the second chart's timeframe in the small D/W/M box that appears next to the button. Each chart has its own indicators and drawing tools.

Both charts always show the same symbol. Press ↑ / ↓ (with either chart in focus) or use the symbol picker and both move together. Left/Right still pan only the chart you are in. Click the split button again to go back to one chart; your choice is remembered in this browser.

Indicators

Click Indicators, then click any row to switch it on or off. The list stays open so you can add several at once.

Where it appearsIndicators
On the price chartMoving Average (SMA, EMA, WMA, Wilder), Bollinger Bands, VWAP, Parabolic SAR, SuperTrend
In their own panelRSI, MACD, Stochastic, ATR, ADX, OBV, Commodity Channel Index (20), Awesome Oscillator, Momentum (10), Williams Percent Range (14), Bull Bear Power (13), Ultimate Oscillator (7, 14, 28)

Changing an indicator

Click the colored badge on the chart (not its ×) — or its ⚙ — to open the settings. It has two tabs, as on TradingView:

  • Inputs — the numbers that change the calculation. For MACD that is the fast, slow and signal lengths (12, 26, 9 by default; any whole numbers work, e.g. 15, 26, 9), the price source, and the oscillator / signal-line average type (EMA or SMA). Stochastic has %K length, %K smoothing and %D smoothing; ADX has ADX smoothing and DI length; Bollinger has length, basis average, source and standard-deviation multiplier; Parabolic SAR has start, increment and maximum; SuperTrend has ATR length and factor; every other indicator has its length (and source where it applies). Changing an input recalculates the chart.
  • Style — the colour, thickness and line style of every line the indicator draws (MACD line, signal line and each of the four histogram colours; %K and %D; ADX, +DI and −DI; the Bollinger upper, basis and lower; up-trend and down-trend SuperTrend; and so on), show or hide each one, and the horizontal level lines (RSI 70 / 30, Stochastic 80 / 20, zero lines…) with editable values. Style changes apply instantly.

Defaults restores the indicator's standard inputs and colours; Ok applies; Cancel discards. Settings are included when you save a Profile. Click the × on a badge to remove the indicator.

Moving Averages

SMA, EMA, WMA and Wilder are one entry, Moving Average. Clicking it opens a small form (type, period, color, line style) and you can add as many as you like — for example a blue SMA(20) and a red EMA(50) together. Each gets its own badge.

The newer oscillators

IndicatorWhat it showsHow it is usually read
CCIHow far the typical price is from its average, in units of average deviation.Beyond +100 is strong / stretched; below −100 is weak. The dashed lines mark ±100.
Awesome Oscillator5-bar minus 34-bar average of each bar's midpoint.Above zero is bullish momentum. Green bars are rising, red bars are falling.
MomentumToday's close minus the close 10 bars ago, in price.Above zero means price is higher than it was 10 bars ago.
Williams %RWhere the close sits in the last 14 bars' range, from 0 (at the high) to −100 (at the low).Above −20 is overbought; below −80 is oversold.
Bull Bear PowerHigh and low measured against a 13-bar EMA, added together.Above zero: buyers are in control. Below zero: sellers are.
Ultimate OscillatorBuying pressure over three windows (7, 14, 28 bars), weighted 4 : 2 : 1.Above 70 is overbought; below 30 is oversold. The 7 / 14 / 28 windows are fixed.

Awesome Oscillator and Bull Bear Power are bar charts colored by the data: you choose the two colours (rising / falling, or positive / negative) in the Style tab. The same six are available in scripts — see the function reference. In scripts an indicator always uses its standard inputs; the chart settings only affect what is drawn.

Drawing tools

The icons down the left edge are groups of tools — click a group to open its list, then pick a tool. Click on the chart to place its points (the shape follows your mouse until the last point), or press, drag and release for two-point tools. The icon at the very top (✦) or Esc returns you to the normal cursor.

GroupTools
LinesTrend line, Ray, Extended line, Info line (shows change, % change, bars and angle), Trend angle, Arrow, Horizontal line, Horizontal ray, Vertical line, Cross line.
Channels & PitchforksParallel channel (3 clicks: two for the line, one for the width), Flat top / bottom, Regression trend (least-squares line with ± standard-deviation bands, slope and R), Pitchfork, Schiff pitchfork, Modified Schiff pitchfork (3 clicks each).
FibonacciFib retracement (2 clicks; 0 is at the second click, 1 at the first), Trend-based fib extension (3 clicks), Fib channel (3 clicks), Fib time zones, Fib speed resistance fan, Fib circles, Fib spiral.
GannGann fan (the 1×1 line runs through your two points; 1×8 to 8×1 fan out from the first), Gann box, Gann square (a true square with grid, diagonals and arcs).
MeasureMeasure (price change, % change, bars, time and volume between two points), Date range, Price range, Date and price range.
ForecastingLong position and Short position: click the entry, then the target. The stop is placed for a 2 : 1 reward-to-risk; drag the stop handle to change it. The box shows target, stop and the R/R ratio.
ShapesRectangle, Ellipse, Triangle, Brush (press, drag freehand, release).
Elliott WavesImpulse (12345, 6 clicks), Correction (ABC, 4 clicks), Triangle (ABCDE, 6 clicks), Double combo (WXY, 4 clicks). Points are labelled automatically.
Text & MarksText, Callout, Price label, Arrow up, Arrow down.

Working with a drawing

  • Select by clicking it. Drag the white dots to move a point, or drag the line itself to move the whole drawing.
  • A small bar appears above the chart: colour, thickness, line style, settings (⚙), duplicate and delete. Double-click a drawing for its full settings — fill colour and opacity, extend left / right, text, Fibonacci levels (turn each on or off, change the values and colours), regression deviation, and so on. Changes apply instantly.
  • Delete removes the selected drawing; Ctrl+Z undoes and Ctrl+Y redoes; Esc cancels the shape you are drawing.
  • Magnet (the horseshoe icon) snaps new and dragged points to the nearest open, high, low or close of the bar. The eye hides or shows every drawing; the trash can removes all drawings on the symbol (undoable).
  • Points always sit on a bar, and can be placed in the empty space to the right of the last bar (for projections such as Fibonacci extensions and positions).

Drawings are saved for each symbol automatically, and come back when you return to it. They work on Daily, Weekly and Monthly charts; a drawing keeps its date and price, so it lines up correctly when you change timeframe. Drawings made by earlier versions load unchanged.

Writing scripts

A script is one or more lines. Each line is a condition followed by then Buy or then Sell:

CLOSE() > SMA(20) then Buy
CLOSE() < SMA(20) then Sell

The pieces

  • Functions are written with brackets: RSI(14), SMA(50), CLOSE(). The number of values inside depends on the function — the autocomplete box shows it as you type, and the function reference below lists them all. Names are not case-sensitive.
  • Comparisons: > < >= <= == !=
  • Combining: and, or, not, with brackets to group.
  • Arithmetic: + - * / — for example VOLUME() > AVG_VOLUME(20) * 1.5.

Looking back: [N]

Add [N] after any function or bracketed expression to read it N bars ago. [1] is the previous bar, [2] two bars ago, and so on.

CLOSE() > CLOSE()[1] and CLOSE()[1] > CLOSE()[2] then Buy

That reads: today's close is above yesterday's, and yesterday's was above the day before — a two-day rising streak.

Several lines at once

The Match logic dropdown decides how lines with the same decision combine: OR fires when any one matches; AND needs all of them to match on the same bar.

Examples to start from

IdeaScript
Trend plus not overboughtCLOSE() > SMA(50) and RSI(14) < 70 then Buy
Moving averages cross upSMA(50) > SMA(200) and SMA(50)[1] <= SMA(200)[1] then Buy
Breakout on heavy volumeCLOSE() > HIGHEST(20)[1] and VOLUME() > AVG_VOLUME(20) * 1.5 then Buy
MACD crosses its signalMACD() > Signal() and MACD()[1] <= Signal()[1] then Buy
Oversold on two oscillatorsWILLR(14) < -80 and CCI(20) < -100 then Buy
Awesome Oscillator crosses zeroAO() > 0 and AO()[1] <= 0 then Buy
Gap up of more than 2%GAP_PCT() > 2 then Buy

Not supported compared with the desktop app: timeframe suffixes such as SMA_15M() (this version works on end-of-day data only) and the market-breadth functions ADVANCERS() / DECLINERS().

Lines starting with # or // are comments and are ignored, as are blank lines. Periods must be whole numbers from 1 to 5000.

Function reference

Every function a script can call, grouped by purpose. This list is read from the server, so it always matches what actually works.

Loading the function list…

Scan

A scan runs your script against every symbol and reports the ones that match on their most recent bar. It answers “what matches right now?”, not “what ever matched in the past?” (that is what a backtest is for).

  1. Open the Scan tab and write or load a script.
  2. Click Run Scan on All Tickers. The results open in a popup over the page.
  3. The popup shows Buy and Sell in two separate columns, each sorted A–Z by ticker, with the date of that last bar and the closing price. Only matching symbols are listed.

Run Multiple Scans

Click Run Multiple Scans, tick the saved scripts you want (and, optionally, the script currently in the editor), then Run selected. Each script gets its own section in the results, with its own Buy and Sell columns. A script with an error shows the error in its section and the others still run. Up to 20 scripts per run.

If a file can't be read (a missing column, say), it is listed in a separate box as skipped with the reason. It is never silently counted as “no match”.

Saving and loading scripts

Next to the Run button:

  • Save Script asks for a name and stores the script and its Match logic setting. Saving under an existing name asks you to confirm before overwriting.
  • Load Script lists everything saved, with a preview. Load puts it in the box; the bin icon deletes it (click twice to confirm).

Names may use letters, numbers, spaces, hyphens and underscores. On a subscription server, saved scripts, drawings and profiles are private to your account.

Script & Backtest

This tab works on one symbol — the one chosen at the top.

Run Script

Counts the matches and lists the most recent Buy and Sell dates. The chart marks only the latest Buy and latest Sell, because marking every historical match buries the chart in arrows.

Run Backtest

Trades the script bar by bar over the symbol's entire history.

  • Fills: a signal on one bar is executed at the next bar's Open, never that bar's own Close — so the test can't trade on a price it couldn't have known.
  • Sizing: all-in, all-out. Buy invests all available cash; Sell converts the whole position back to cash. A Buy while already holding, or a Sell while flat, is ignored.
  • Starting capital and Brokerage % are set above the button. Brokerage is charged on both the entry and the exit.
  • Still holding at the end? The position is valued at the last close and shown as an open trade, not dropped.
  • Results: final value, total return, number of trades, win rate and an equity curve.

Profiles

A profile is a saved set of indicators with their periods, colors and Moving Averages. Click Profile on the Chart toolbar to Save Current as New Profile, or to Load or delete a saved one. A profile isn't tied to a symbol — it loads on top of whatever you are viewing.

Settings & sign-in

Accounts & subscription

Use Register (top right) to create an account: User ID, email, password and a plan (Demo, Monthly or Quarterly). A new account is pending until the site owner approves it; until then you can sign in but only the Home page is available. Once approved, Chart, Scan, Script & Backtest and Help unlock. When your plan period ends the account stops at Home again until it is renewed.

Signing in (shared-password servers)

If the server was started with a password you will see a sign-in page first, and a Sign out button at the top right. Sessions last 12 hours by default. After five wrong passwords in a row, further attempts from that address are paused for a few minutes.

If the server has no password, it only accepts connections from the computer it is running on.

Backend address (Settings tab)

When you open the page from the server's own address (for example http://localhost:8000/) it talks to that server automatically — there is nothing to set. It is only needed to point the page at a server somewhere else: Settings tab, Backend address.

Where things are stored

data/Your price files, one per symbol.
drawings/Drawings, one file per symbol.
profiles/Saved indicator profiles.
saved_scripts/Saved Scan scripts.

Keyboard shortcuts

These work on the Chart tab, except while you are typing in a box.

KeyDoes
↑Previous symbol
↓Next symbol
←Pan the chart back in time
→Pan the chart forward
EscClose any popup
Enter / TabAccept the highlighted autocomplete suggestion in a script box

Troubleshooting

You seeWhat it means
Could not reach the backendThe server isn't running, or this page was opened as a file. Start the server and open http://localhost:8000/.
The backend returned an error for …The server is running but rejected that request; the message after the colon says why (for example a data file with a missing column).
The sign-in page appearsYour session ended, or you aren't signed in yet. Sign in again.
Unknown function: …A name in your script isn't in the function reference. Check the spelling — and the underscores in names such as PREVIOUS_CLOSE.
Unsupported syntax: SubscriptThe server is running an old copy of script_engine.py from before [N] existed. Update all the server's files together.
A symbol is missing from the listIts file is not in the data folder, or its name isn't SYMBOL.csv.
A scan reports a symbol as skippedIts file is missing a required column or can't be read. The box lists the reason.
I changed an indicator input and got an errorInputs must be whole numbers from 1 to 5000 (multipliers and Parabolic SAR steps can be decimals); Awesome Oscillator's fast length must be below its slow length. The dialog tells you which field to fix.

Settings

Saved in this browser only. Changes apply immediately to every open chart, including a split chart.

Your account

My plan

Theme

Candle colours

Colours also apply to Heikin Ashi, to the volume bars and to the TPO profile.

Backend address

Not needed when you open the page from the server's own address: it connects to that server automatically. Only change it to point the page at a server somewhere else.