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 appears | Indicators |
| On the price chart | Moving Average (SMA, EMA, WMA, Wilder), Bollinger Bands, VWAP, Parabolic SAR, SuperTrend |
| In their own panel | RSI, 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
| Indicator | What it shows | How it is usually read |
| CCI | How 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 Oscillator | 5-bar minus 34-bar average of each bar's midpoint. | Above zero is bullish momentum. Green bars are rising, red bars are falling. |
| Momentum | Today's close minus the close 10 bars ago, in price. | Above zero means price is higher than it was 10 bars ago. |
| Williams %R | Where 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 Power | High and low measured against a 13-bar EMA, added together. | Above zero: buyers are in control. Below zero: sellers are. |
| Ultimate Oscillator | Buying 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.
| Group | Tools |
| Lines | Trend line, Ray, Extended line, Info line (shows change, % change, bars and angle), Trend angle, Arrow, Horizontal line, Horizontal ray, Vertical line, Cross line. |
| Channels & Pitchforks | Parallel 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). |
| Fibonacci | Fib 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. |
| Gann | Gann 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). |
| Measure | Measure (price change, % change, bars, time and volume between two points), Date range, Price range, Date and price range. |
| Forecasting | Long 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. |
| Shapes | Rectangle, Ellipse, Triangle, Brush (press, drag freehand, release). |
| Elliott Waves | Impulse (12345, 6 clicks), Correction (ABC, 4 clicks), Triangle (ABCDE, 6 clicks), Double combo (WXY, 4 clicks). Points are labelled automatically. |
| Text & Marks | Text, 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
| Idea | Script |
| Trend plus not overbought | CLOSE() > SMA(50) and RSI(14) < 70 then Buy |
| Moving averages cross up | SMA(50) > SMA(200) and SMA(50)[1] <= SMA(200)[1] then Buy |
| Breakout on heavy volume | CLOSE() > HIGHEST(20)[1] and VOLUME() > AVG_VOLUME(20) * 1.5 then Buy |
| MACD crosses its signal | MACD() > Signal() and MACD()[1] <= Signal()[1] then Buy |
| Oversold on two oscillators | WILLR(14) < -80 and CCI(20) < -100 then Buy |
| Awesome Oscillator crosses zero | AO() > 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.
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).
- Open the Scan tab and write or load a script.
- Click Run Scan on All Tickers. The results open in a popup over the page.
- 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.
| Key | Does |
| ↑ | Previous symbol |
| ↓ | Next symbol |
| ← | Pan the chart back in time |
| → | Pan the chart forward |
| Esc | Close any popup |
| Enter / Tab | Accept the highlighted autocomplete suggestion in a script box |
Troubleshooting
| You see | What it means |
| Could not reach the backend | The 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 appears | Your 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: Subscript | The 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 list | Its file is not in the data folder, or its name isn't SYMBOL.csv. |
| A scan reports a symbol as skipped | Its file is missing a required column or can't be read. The box lists the reason. |
| I changed an indicator input and got an error | Inputs 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. |