Custom Stock Scanner — Scanner Studio
Build your own scan conditions without writing a single line of code. Combine indicators with nested ALL / ANY logic, test them against your own price history, see exactly why each symbol qualified, and watch the list for new entries.
- ✓ Nested AND / OR groups
- ✓ RSI, MACD, ATR, RVOL, Bollinger, ADX
- ✓ Daily / weekly / monthly
- ✓ Per-condition pass / fail audit
- ✓ Entry & exit monitoring
1 · Data & universe
Sample data is synthetic and clearly labelled — it is for testing scan logic, not real quotes.
Stays on your device. Nothing is uploaded anywhere.
Symbols are evaluated newest bar first.
Calculation settings
Symbols with less history are skipped and reported, never silently scored as a match.
2 · Scan conditions
3 · Results 0 matches
No scan has run yet
Load the sample dataset, press Load example scan, then Run scan. You will get a ranked list plus the exact condition values behind every match.
4 · Monitor for entries & exits Pro
Monitoring re-evaluates the same rules as new bars arrive and logs symbols that entered or exited your criteria. It is a state-change watch, not a refresh of a static table.
Unlock the full scanner
The free scanner is genuinely usable — the pro tier removes the ceilings and adds the workflow serious scanning requires.
Free
- Up to 25 symbols per scan
- Up to 4 conditions
- Daily timeframe indicators
- 1 scan running at a time
- 2 saved scans
- Copy symbols & print results
Pro
- Unlimited symbols & conditions
- Weekly + monthly timeframes
- Nested groups up to 3 levels
- Entry / exit monitoring & alerts
- Near-miss list & CSV export
- Unlimited saved scans
This scanner is a 100% client-side tool: the paid features are convenience and capacity, not secret data. License verification calls Gumroad's public license endpoint directly from your browser, so it proves the key is valid — it is not a tamper-proof gate. If a purchase is refunded or charged back, Pro access is withdrawn on the next verification.
What is a custom stock scanner?
A custom stock scanner evaluates your own written rules against a list of symbols and returns only the ones that qualify. Instead of picking from a fixed menu of presets, you define the logic yourself — for example “close above the 50-day SMA and relative volume above 2 and ATR above 3% of price, or an RSI cross above 50”. Scanner Studio is the condition builder for that job: it turns plain indicator rules into a repeatable scan, then shows the value of every condition next to the symbols that passed.
Most screeners force a trade-off. A preset screener is fast but rigid; a charting script is flexible but requires a programming language. Scanner Studio sits in between: structured controls for the indicators that matter, a visual ALL / ANY group tree, and a full audit trail of why each symbol was returned.
How to use it
Load price history
Start with the sample dataset, or paste your own OHLCV rows as CSV. Any symbol list works — the engine does not depend on a vendor.
Choose the universe
Scan every symbol or restrict to a watchlist you type in. Symbols without enough history are reported rather than silently treated as non-matches.
Build the conditions
Pick an indicator and its parameters, an operator (>, <, crosses above, between), a comparison value or a second indicator, and a timeframe per condition.
Group the logic
Nest ALL / ANY groups to express “(A and B) or (C)”. Each group states its own rule so the logic is readable at a glance.
Run and audit
The result table shows price, change, volume, RVOL, ATR%, RSI and a per-condition audit you can expand row by row.
Save, export, monitor
Store the scan, copy the symbol list into your platform, export a CSV, or watch for entry and exit events as new bars arrive.
Results explained
- Change % — (close − previous close) ÷ previous close × 100 on the selected timeframe.
- RVOL — current volume ÷ average volume over N bars. 2.0× means twice the usual activity.
- ATR % — Average True Range ÷ close × 100, a volatility reading independent of share price.
- RSI — 100 − 100 ÷ (1 + average gain ÷ average loss), Wilder smoothing, 0–100.
- Conditions — how many of the scan's leaf conditions this symbol satisfied, so a near miss is visibly a 3 of 4 rather than an unexplained absence.
- Audit row — expands to the exact left value, operator and right value for every condition, including the previous-bar value used by cross operators.
Example scan
A momentum-with-confirmation scan: ALL of — close above the 50-period SMA, relative volume above 2×, ATR above 3% of price — ANY of — RSI crossing above 50, MACD histogram crossing above zero. Load the example scan button seeds exactly that structure so you can edit it rather than build from an empty page.
Frequently asked questions
Does this use live market data?
No. There is no vendor feed bundled in. Scanner Studio computes everything from the price history you load — the built-in sample dataset is synthetic and labelled as such. That keeps it fully client-side, free of API keys, and useful for designing and testing scan logic. To scan real quotes you load real history rows, or point your own pipeline at the same CSV shape.
Why do my results disagree with another screener?
Usually a convention difference, not a bug: adjusted vs unadjusted prices, regular vs extended hours, Wilder vs simple smoothing, completed vs forming candle, and trading-day vs calendar-day periods all shift indicator values. Scanner Studio states these assumptions instead of hiding them, and shows the raw left/right values in the audit so discrepancies are traceable.
What does a cross above actually test?
It requires the previous bar to be at or below the threshold and the current bar to be above it. Without that two-bar check, a symbol that has been above the level for weeks would keep triggering a “cross”.
How are nested groups evaluated?
Inner groups first, then outward. ALL requires every child to pass, ANY requires at least one, and NONE requires every child to fail. The preview counter lets you verify the count before you commit to a full run.
Is my data or scan uploaded anywhere?
No. Parsing, indicator maths and result rendering all happen in the browser; scans live in local storage on your device. The only outbound request is the Gumroad license check when you choose to verify a key.
Is this investment advice?
No. It is a technical analysis utility that reports whether arithmetic conditions are true on historical bars. A match is not a recommendation and says nothing about future returns.
Related tools
Dialog
AlamToolKit.com · Finance & Trading Tools
Scanner Studio User Guide — Every Field, Worked Example, Formulas & FAQ
This guide explains every input field in Scanner Studio, the units and valid ranges, the exact indicator formulas, how conditions, groups and timeframes are evaluated, and what the free / Pro tiers actually unlock. It also includes a worked momentum example, common data-entry mistakes, key user pain points, and a live sanity check. Use it as a training reference, an onboarding document, or a pre-flight checklist before you save a scan you intend to share.
What a Custom Stock Scanner Is Used For
A custom stock scanner evaluates your own written rules against a list of symbols and returns only those that qualify. It is the technical-analysis equivalent of a query language: instead of picking from a fixed menu of presets, you define the exact arithmetic your screen requires — for example “close above the 50-day SMA, relative volume above 1.5×, and RSI crosses above 50” — and the engine returns every symbol in the universe that satisfies all of it.
In practical use, the scanner answers four distinct questions:
- Does the symbol satisfy my rules today? — a binary match on the completed bar, with a full audit of every condition's left-hand value, operator and right-hand value.
- How close did it come? — the per-row condition count and the near-miss list separate a 3-of-4 result from an entirely unmatched one.
- Is the rule itself any good? — the preview count lets you check that the structure of the logic returns a sensible number of symbols before you commit to a full scan.
- Has the state changed since I last looked? — the monitor watches the same rules and logs entry and exit events as new bars arrive.
Builder — 30 Indicators, 12 Operators, Nested Groups
The builder is a visual condition tree. Every condition is a leaf: one indicator, its own parameters, one operator, a right-hand side (a value, two values for between, or a second indicator), and a per-condition timeframe. Groups nest to three levels on Pro and provide the boolean join for their children.
Indicators available
Thirty indicators are grouped below by the kind of question they answer. Each exposes only its own parameters; nothing irrelevant is shown.
Price & price change
- close
- open
- high
- low
- changePct
- gapPct
- priceVsMa %
Volume
- volume
- avgVolume
- relVolume (RVOL)
- dollarVolume
Moving averages
- SMA
- EMA
Momentum
- RSI
- MACD line
- MACD signal
- MACD histogram
- Stochastic %K
- Stochastic %D
- ROC
Volatility
- ATR
- ATR %
- Bollinger upper
- Bollinger lower
- Bollinger %B
- Bollinger bandwidth
Trend strength
- ADX
- +DI
- −DI
Range / position
- highestHigh
- lowestLow
- % below N-bar high
Operators
Twelve operators, split into four families. Cross operators enforce a genuine two-bar transition, so a symbol that has already been above a level does not re-trigger on every subsequent bar.
| Symbol | Family | What it tests | Right-hand side |
|---|---|---|---|
| > | Magnitude | indicator strictly above a value | number |
| ≥ | Magnitude | indicator at least a value | number |
| < | Magnitude | indicator strictly below a value | number |
| ≤ | Magnitude | indicator at most a value | number |
| = | Magnitude | indicator equal to a value within tolerance | number |
| ↔ | Range | indicator inside a min/max band | two numbers |
| ↗ | Transition | previous bar ≤ value, current bar > value | number |
| ↘ | Transition | previous bar ≥ value, current bar < value | number |
| >i | Indicator-vs-indicator | left series > right series | second indicator |
| <i | Indicator-vs-indicator | left series < right series | second indicator |
| ↗i | Indicator-vs-indicator | left crosses above right (two-bar) | second indicator |
| ↘i | Indicator-vs-indicator | left crosses below right (two-bar) | second indicator |
Why cross operators are two-bar
A cross above 50 means the previous bar was at-or-below 50 and the current bar is above 50. Without that check, a symbol that has been above 50 all year would fire the “cross” on every bar, which is exactly the behaviour users complain about in other screeners. The audit shows the previous-bar value next to the current one, so a cross is verifiable at a glance.
Per-condition controls
- Timeframe per condition — Daily on free; Daily, Weekly and Monthly on Pro. Weekly and monthly bars are aggregated from the same daily rows, so no silent mixing of series occurs.
- Drag-and-drop reorder — reorder conditions within their group by dragging the grip. Order does not change the evaluation result, but it changes reading order and, therefore, the audit's readability.
- Duplicate — clone a condition in place, keeping all parameters. Useful for sibling thresholds (e.g. RSI > 50 and RSI < 70 in the same group).
- Delete — remove a condition or a nested group.
Group logic
Three join modes are supported per group: ALL (every child must pass), ANY (at least one child must pass), and NONE (every child must fail). Nested groups evaluate inner-first, so a sub-group's combined result behaves like a single boolean at its parent. On Pro, groups nest up to three levels deep; the free tier supports one flat group.
Scan Engine — How Each Symbol Is Evaluated
The engine is deterministic given the loaded bars and the rule tree. There is no random tie-break, no implicit sort that changes a match, and no silent symbol skipping.
Evaluation pipeline
- Resolve timeframes. Daily bars are used as-is; weekly and monthly bars are aggregated from the daily series before any indicator is computed.
- Build the indicator series for each leaf, cached per
(symbol, indicator, params, timeframe). Caching is why conditions sharing an indicator do not pay twice. - Evaluate the leaf on the evaluated bar, using the previous bar for cross operators. Values that are
NaNdue to insufficient history produce a note rather than a silent fail. - Fold the tree. Inner groups first, then outward; ALL, ANY and NONE combine the child booleans at each level.
- Consecutive-bar re-check if the user asked for N bars: the same tree is evaluated on the prior N−1 bars, and the symbol is kept only if every bar passed.
Reported, not hidden
- Insufficient history. A symbol with fewer bars than the minimum-history threshold is skipped and counted separately in the run metadata. It is never scored as a non-match, and it never lands in the near-miss list.
- Free-plan universe cap. On the free tier, the run metadata prints “evaluated the first 25 of N symbols”. The tool does not pretend it scanned the whole universe.
- NaN indicator values. When an indicator is
NaNon the evaluated bar (typically the first n−1 bars of a symbol's history for a period-n indicator), the row shows a note — “not enough history for this indicator at this bar” — instead of a misleading FAIL.
Per-condition audit
Every result row can be expanded to a per-condition audit. The audit prints, for each leaf: the exact left value, the operator symbol, the right value, the timeframe, and — for cross operators — the previous-bar value that satisfied the transition. Group verdicts are printed as a nested tree, so a nested ANY sub-group's contribution to its parent is visible.
Results table
- Sortable by any visible column, ascending or descending.
- Searchable by symbol or company name.
- Column picker — hide columns you do not use; the export always uses the canonical column list regardless of which columns are visible.
- Near-miss mode (Pro) — shows symbols that satisfied at least one condition but not all, ranked by how many they passed. A 3-of-4 is visibly different from an unmatched symbol.
- Copy symbols — one click to place the matching tickers on the clipboard, ready for a broker or charting platform.
- Print stylesheet — the on-screen table prints cleanly, without the interactive chrome.
- CSV export (Pro) — the matched symbols with every computed metric, timestamped in the filename.
Live preview counter
Before a full run, the preview counter evaluates the current tree on the newest bar and returns a match count without rendering the table. It is the fastest way to catch a mistyped threshold. Note that the preview skips the consecutive-bar re-check, so the final match count of a full run can be lower than the preview count — that difference is expected, not a bug.
How a Scan Is Evaluated (Visual Walkthrough)
The engine walks a tree of groups and conditions, from the deepest nested group outward. The diagram below shows the full eight-stage pipeline, from loading bars to monitoring state changes.
Step-by-Step Guide — Filling In Every Field
Scanner Studio is organised as a single working screen. The left column holds the data and universe settings; the centre holds the condition builder; the action bar sits between the builder and the results; the results table is below; the monitor and the upgrade block come last. Every change updates the preview count in real time, so you can see the effect of a rule before running a full scan.
-
Price Data Source
What it is: selects where the scanner reads its price history from. Three options are available:
- Sample dataset — 60 synthetic tickers with 420 daily bars each, generated client-side for demonstration. It is explicitly labelled as synthetic because it is designed to exercise the scan logic, not to be traded off.
- Paste CSV / JSON — opens a text area into which you can paste raw OHLCV rows or a JSON array. The parser is tolerant of comma, semicolon or tab separators, and accepts both
open/high/low/close/volumeand the short formso/h/l/c/v. - Upload CSV file — identical parsing rules, but reading from the local filesystem. Nothing is uploaded anywhere; parsing happens entirely in the browser.
Units: none — a dropdown selector. Common mistake: importing a CSV with dates in the wrong format. Dates must be
YYYY-MM-DD; anything else will be silently dropped because the parser cannot compare the bars. -
CSV / JSON Format
What it is: the shape of the accepted input. A header row is required for CSV, followed by one row per bar:
symbol,date,open,high,low,close,volume
AAPL,2026-01-02,187.20,189.10,186.40,188.95,54200000Validation: rows with a missing symbol, missing date, or non-numeric OHLC are skipped and counted in the load message. Bars are sorted by date on import, so the file does not have to be pre-sorted. Common mistake: exporting from a vendor with prices in a currency that uses comma as a decimal separator — the parser expects a dot.
-
Scan Universe
What it is: selects which symbols in the loaded dataset are evaluated. Two modes:
- Every symbol in the dataset — the entire loaded list.
- Only symbols matching the filter below — a comma- or space-separated list of tickers in the filter box, case-insensitive.
Units: none. The free plan evaluates up to 25 symbols; the Pro tier removes the limit. Common mistake: assuming a symbol that is not in the dataset will be silently fetched from somewhere — it will not. The filter only removes symbols; it never adds them.
-
Minimum Consecutive Bars
What it is: requires the entire rule tree to be true on the last N completed bars, not just the most recent one. Units: a number of bars (1, 2, 3 or 5). Effect: at N = 1 a symbol matches if the rules are true on the latest bar; at N = 2 the same tree must also have been true on the previous bar. The tool re-evaluates the whole group, not just the leaves, so consecutive checks and nested logic are consistent.
Common mistake: setting N high without enough history — symbols near the start of their recorded series will simply fail the consecutive test.
-
Candle to Evaluate
What it is: whether the rules are checked against the last completed bar or against a forming bar. Units: none — a dropdown. Effect: the “completed candle only” setting is the default because it gives reproducible results; including the forming bar makes the scan sensitive to the moment it is run. Common mistake: using the forming-bar setting and then re-running later in the day — the results will differ. If you need stable results, keep it on completed candles.
-
Minimum History Required
What it is: the number of bars a symbol must have before it is scored at all. Units: number of bars — 60, 120 or 200. Effect: symbols below the threshold are skipped and reported, never silently scored as a non-match. Common mistake: leaving it at 120 when a condition uses a 200-period SMA — the SMA will simply be
NaNfor every symbol in the dataset, and every condition on it will fail with the note “not enough history for this indicator at this bar”. -
Show Per-Condition Audit
What it is: a toggle that controls whether expanding a row shows the full audit trail. Units: none — a switch. Effect: when enabled, each expanded row lists every leaf condition with its computed left value, the operator, the right value, the timeframe, the previous-bar value (for cross operators) and a PASS / FAIL verdict. Common mistake: turning it off in production and then being unable to explain why a symbol did or did not match. Leave it on when validating a new scan.
-
Condition — Indicator
What it is: the first element of every condition, a dropdown listing all supported indicators (see the builder reference above for the full grouped list). Each has its own parameter set and unit:
- Price-based —
close,open,high,low,changePct(%, over N bars),gapPct(%). - Volume-based —
volume(shares),avgVolume,relVolume(×, e.g. 1.5 means 1.5× the 20-bar average),dollarVolume(currency). - Moving averages —
sma,ema(price),priceVsMa(%, price versus the chosen MA type). - Momentum —
rsi(0–100),macd,macdSignal,macdHist(price),roc(%),stochK,stochD(0–100). - Volatility —
atr(price),atrPct(%),bbUpper,bbLower(price),bbPercentB(0–1),bbWidth(%). - Trend strength —
adx,plusDI,minusDI(0–100). - Range —
highestHigh,lowestLow(price),gapFromHigh(%).
Common mistake: using
closewhen you meantpriceVsMa. The first is an absolute price in the quote currency; the second is a percentage distance from a moving average and is directly comparable across symbols of different price levels. - Price-based —
-
Condition — Parameters
What it is: the numeric parameters for the selected indicator, rendered as small inputs with their own min/max bounds and default values:
Default parameters and valid ranges per indicator group. Indicator group Parameters Defaults Range SMA / EMA / Price vs MA period, type 50 / 20 / 50, sma 2–400 RSI period 14 2–100 MACD (line, signal, histogram) fast, slow, signal 12, 26, 9 2–200 ATR / ATR % period 14 2–100 Bollinger (all four) period, dev 20, 2 2–200, 0.5–5 ADX / ±DI period 14 2–100 Stochastic %K / %D period, smooth 14, 3 2–100, 1–20 Highest high / lowest low period 52 2–400 ROC / gap from N-bar high period 20 / 52 1–400 / 2–400 RVOL / average volume / dollar volume period 20 2–250 Validation: a number outside the valid range is shown in the input's
aria-invalidstyle and is reported in the “Check these inputs” box above the builder. The scan refuses to run until every parameter is in range. Common mistake: using a MACD fast period longer than the slow period — the line will be consistently negative and the signal crossover almost meaningless. Keep fast < slow. -
Condition — Operator
What it is: the comparison made between the indicator's value and the right-hand side. See the operator table above for the full twelve-operator list, split into magnitude, range, transition and indicator-vs-indicator families.
Common mistake: using “greater than” when you mean “crosses above”. A stock that has been above the 50-day SMA all year will match the first on every bar and the second only on the transition bars.
-
Condition — Value
What it is: the right-hand-side value the operator compares against. Units: the same unit as the left-hand indicator — percent for
rsi,atrPct,bbPercentB,changePct; shares for volume; price for close and the moving averages. For “between”, two values are shown (min and max). For “equals”, a tolerance field appears. For “crosses above” and “crosses below”, the right value is the level being crossed.Validation: a non-numeric value is marked on blur, and the scan refuses to run until every value is a finite number. Common mistake: entering a percentage as a decimal (
0.05instead of5) — the scanner is unit-agnostic, so a tolerance of 5 on RSI means 5 RSI points, not 5 %. Enter the same units the indicator itself reports. -
Condition — Comparison Indicator
What it is: a second indicator used as the right-hand side, so you can express relational logic like “close above the 50-day SMA” or “MACD histogram above the signal line”. Units: the same as the left-hand indicator, because it is computed from the same price series. Common mistake: comparing two indicators in different units — for example, comparing an RSI (0–100) to a price. The comparison will work arithmetically but the result is meaningless. Use a value comparison against a fixed level in that case.
-
Condition — Timeframe
What it is: whether the condition is computed on daily, weekly or monthly bars. Units: a dropdown with three options. The free plan supports daily only; weekly and monthly are Pro. Effect: weekly and monthly series are aggregated from the same daily bars, so a weekly SMA of 50 uses 50 weeks of aggregated closes, not 50 days. Common mistake: setting one condition on daily and its neighbour on weekly and expecting them to compare. Each condition computes its own values on its own timeframe; the left and right of a single comparison must be on the same timeframe, or the row will show a mix of unrelated bars.
-
Groups — ALL / ANY / NONE
What it is: the logical container that combines child conditions and nested groups. Three join modes are available:
- ALL — every child must pass. Used for conjunction scans.
- ANY — at least one child must pass. Used to express alternatives like “RSI crosses above 50 or MACD histogram crosses above zero”.
- NONE — every child must fail. Used for exclusions, e.g. “no symbol where RSI is above 80”.
Units: none. Nested groups are reduced inner-first, then combined at the parent level. Common mistake: assuming an ALL group short-circuits — it does not, because the per-condition audit needs to evaluate every leaf to show its value. Evaluation cost is therefore fixed by the number of leaves, not the join mode.
-
Add Condition / Add Group
What it is: the two buttons above the builder that append a new child to the top-level group. Units: none. Effect: a new condition starts with the RSI indicator and a threshold of 50, so it is immediately valid; a new group starts empty and must be populated before the scan can run. Common mistake: adding a group when a condition is intended — the empty group makes the parent logic ambiguous and is skipped until populated.
-
Preview Count
What it is: a live counter showing how many symbols satisfy the current rule tree, updated as you edit. Units: a count of matching symbols out of the evaluable universe. Effect: it is the fastest way to catch a mistyped threshold before a full scan — if a “close above 500” filter returns 0 of 60 on a dataset whose prices are 25–320, you know the threshold is wrong. Common mistake: treating the preview as authoritative. It runs the same evaluation as the scan, but on the current bar without the consecutive-bar check, so the final match count can be lower.
-
Results — Search, Show Mode, Columns
Search is a case-insensitive text filter on symbol or company name; it hides rows but cannot bring back symbols that were never scanned. Show Mode toggles between full matches and matches plus near misses (the near-miss list is Pro-only). Columns is a column-visibility chooser stored in local storage; hiding columns does not affect the sort key or the CSV export, which always uses the canonical list.
Common mistake: leaving the default “matches only” and then being surprised that a symbol that passed 3 of 4 conditions is not visible — switch to near-miss mode to see it. Hiding the “Conditions” column is another common self-inflicted problem, since it is usually the most useful column to keep visible.
-
Monitor — Interval and Notifications
What it is: an optional watch that re-runs the same scan on a fixed interval and logs state changes. Units: the interval is in seconds — 5, 15, 30 or 60. Effect: every tick that changes the set of matches appends a row to the log with the timestamp, the symbol and whether it entered or exited. Notifications require browser permission and are only raised while the tab is open. Common mistake: expecting monitoring to fetch new data automatically. It re-evaluates the same loaded dataset; you must feed new bars into the dataset for the state to genuinely change.
-
Action Bar — Run, Example, Save, Export
What it is: seven buttons that perform the scan's non-editor actions:
- Run scan — full evaluation with the consecutive-bar check, per-row condition counts and the run metadata line.
- Load example scan — seeds the momentum-with-confirmation scan (close above 50-SMA, RVOL above 1.2×, ATR above 1.5 %, plus a Pro-only ANY sub-group with RSI and MACD crossings).
- Save scan — stores the current rule tree in local storage under a name you choose. Free plan stores 2; Pro is unlimited.
- Saved scans — a popover listing saved scans, each reloadable with one click.
- CSV — downloads the matched symbols with all computed metrics. Pro only.
- Symbols — copies a comma-separated list of matching tickers to the clipboard, ready to paste into a broker or charting platform.
- Print — opens the browser print dialog with a print-optimised layout of the current results.
Common mistake: running a scan without checking the preview. The run includes the consecutive-bar check and the full per-condition audit, so it is slower and its final count is usually lower than the preview's.
-
Pro License Key
What it is: the key you received from Gumroad after a purchase. Units: none — a text field. Effect: clicking Verify license sends the key to Gumroad's public license endpoint and, on success, unlocks the Pro features on this browser. The key is stored in local storage only after a successful verification. Common mistake: pasting an order ID rather than a license key — Gumroad issues both, and only the license key will pass the verify endpoint. Refunded or charged-back purchases are rejected on the next verification.
Live Sanity Check (Interactive)
The scanner itself is a separate tool; this mini-playground demonstrates the two arithmetic rules that trip up new users most: percent vs decimal and cross vs threshold. Change the values, press evaluate, and read the feedback.
Tip: if you type 0.02 for ATR% you are asking “is volatility at least 0.02 percent?” — almost always true on equities. Type 2 if you mean two percent.
Worked Example — Momentum With Confirmation
This scan is deliberately educational: it combines a trend filter, a volume filter and a volatility filter in an ALL group, then adds an ANY group of two momentum triggers. It reproduces the Load example scan button and can be checked by hand from any imported dataset.
The rule tree
ALL of:
• close >i SMA(50)
• relVolume(20) > 1.2
• atrPct(14) > 1.5
• ANY of:
– rsi(14) crosses above 50
– macdHist(12,26,9) crosses above 0
Step 1 — Evaluate the trend filter on a sample bar
AAPL's latest bar closes at 213.40. The 50-day SMA computed from the previous 50 closes is 206.15. The condition is close >i SMA(50), so the comparison is 213.40 > 206.15, which is true. The audit row would show: PASS · Close price(50-SMA) >i SMA(50) — value 213.40 > 206.15.
Step 2 — Evaluate the volume filter
The latest bar's volume is 62.4 million shares. The 20-day average volume is 48.1 million. Relative volume is 62.4 / 48.1 = 1.297, which is greater than the 1.2 threshold, so the condition is true. The audit row would show: PASS · Relative volume(20) > 1.2000 — value 1.2970.
Step 3 — Evaluate the volatility filter
The 14-period ATR is 3.94 and the close is 213.40, so ATR % is 3.94 / 213.40 × 100 = 1.847 %. That is greater than 1.5 %, so the condition is true. The audit row would show: PASS · ATR % of price(14) > 1.5000 — value 1.8470.
Step 4 — Evaluate the ANY momentum sub-group
RSI crosses above 50 — the previous bar's RSI was 48.2, the current bar's is 51.6. Since the previous value was at or below 50 and the current value is above 50, the cross condition is true.
MACD histogram crosses above 0 — the previous bar's histogram was −0.02 and the current bar's is +0.08. The cross is true.
Since the sub-group is ANY, only one of the two needs to pass. Both do, so the ANY group is true.
Step 5 — Combine at the top-level ALL group
Trend true, volume true, volatility true, ANY momentum true. All four children pass, so the top-level ALL group is true. AAPL matches. If consecutive bars were set to 3, the same tree would be re-evaluated on the two prior bars; if either of those also failed, AAPL would not appear in the results.
Summary of the match
| Condition | Left value | Operator | Right value | Verdict |
|---|---|---|---|---|
| Close vs SMA(50) | 213.40 | >i | 206.15 | PASS |
| Relative volume (20) | 1.297 | > | 1.200 | PASS |
| ATR % of price (14) | 1.847 % | > | 1.500 % | PASS |
| RSI (14) — ANY child 1 | 51.6 | crosses above | 50 | PASS |
| MACD histogram — ANY child 2 | +0.08 | crosses above | 0 | PASS |
| Top-level ALL group | MATCH | |||
Monitor — State Changes, Not a Live Feed
The Pro monitor re-evaluates the same tree on a schedule and logs state changes. It is the workflow primitive behind “tell me when something enters or leaves my list”, and it is honest about what it does and does not do.
How it works
- Interval scheduler — 5, 15, 30 or 60 seconds between ticks.
- Baseline diff — on start, the current matches are recorded as the baseline. On each tick, the new match set is compared against the baseline.
- ENTERED / EXITED log — symbols that entered the match set are logged as ENTERED, and symbols that left are logged as EXITED, each with a timestamp and a short reason line.
- Optional browser notifications — if the user grants Notification permission, ENTERED events raise a system notification while the tab is open.
What the monitor is not
There is no vendor feed bundled with the tool. To make state changes observable in a client-side sandbox, each tick appends a synthetic next bar to the loaded history and re-runs the scan; the run metadata states this explicitly. It is a demonstration of the state-change workflow — not a live quote stream, and not a subscription to any data provider. The page never claims otherwise.
Data — Synthetic Sample, CSV/JSON Import
Data handling is deliberately simple and auditable. There are three data sources, and every one of them lives entirely in the browser.
Sample dataset
- 60 symbols, 420 daily bars each. The OHLCV series is generated client-side with a seeded pseudo-random number generator, so the same seed produces the same series on reload — useful for reproducing audit rows.
- Clearly labelled synthetic — in the data-source dropdown, in the header chip, and in the run metadata line. It is designed to exercise the arithmetic, not to be traded off.
CSV and JSON import
- Paste — paste raw rows into the text area; the parser accepts comma, semicolon or tab separators.
- Upload — read a local
.csv,.txtor.jsonfile. Files stay on the device; nothing is uploaded. - Documented header format —
symbol,date,open,high,low,close,volume, one row per bar, dates asYYYY-MM-DD. JSON is accepted as an array of objects with the same fields, or with short keyso/h/l/c/v. - Validation is visible — rows with missing symbol, date, or non-numeric OHLC are counted and reported in the load message. Bars are sorted by date on import.
Free vs Pro — Where the Line Is Drawn
The free tier is genuinely usable, and the Pro tier removes the ceilings. Locked features explain their benefit and open Gumroad; they never pretend entitlement exists. There is no in-app dark pattern.
Free
- 25 symbols evaluated per run
- 4 conditions in a single flat group
- Daily timeframe only
- 1 flat group — no nesting
- 2 saved scans
- Copy symbols and print
- Matches-only results (no near-miss list)
- No CSV export, no monitor
Pro
- Unlimited symbols and unlimited conditions
- Daily, Weekly and Monthly timeframes, mixable per condition
- Nested ALL / ANY / NONE groups up to three levels deep
- Near-miss list — 3-of-4 rows visible, ranked
- CSV export of the matched symbols with all computed metrics
- Entry / exit monitor with 5/15/30/60-second intervals and optional browser alerts
- Unlimited saved scans
How locked features behave
Clicking a locked feature does not silently do nothing. It scrolls to the upgrade block, explains the specific benefit of the Pro feature that was clicked, and offers the Gumroad checkout link. The key text field accepts a license key, and verification calls Gumroad's public license endpoint directly from the browser — the key is stored only after successful verification. Refunded or charged-back purchases are rejected on the next verification. This is a real, working entitlement flow, not an “unlock” button that does nothing.
Key User Pain Points and How Scanner Studio Solves Them
Most screening workflows break in predictable ways. The list below maps each failure mode to a specific design choice in Scanner Studio.
-
“I can't express the logic I actually want.”
Why it happens: preset screeners force a fixed menu of filters, and a custom script requires a programming language. How it is solved: a visual condition builder with 30 indicators, 12 operators, parameter ranges and nested ALL/ANY/NONE groups covers almost every technical setup without a single line of code.
-
“I don't trust the result, and I can't explain it.”
Why it happens: a black-box screener returns a ticker with no visible reasoning. How it is solved: every row expands to show the left value, operator, right value, timeframe and previous-bar value for every condition — a complete, per-condition audit trail.
-
“A scan that returns zero symbols feels broken.”
Why it happens: an empty result gives no feedback about how close the universe was to matching. How it is solved: the near-miss list (Pro) shows symbols that satisfied most conditions, the per-row conditions score shows 3 of 4 or 2 of 4, and the “Loosen one condition” button on the empty state relaxes the first threshold by 15 %.
-
“I can't reuse a scan next week.”
Why it happens: presets are not editable and a script has to be re-typed each time. How it is solved: save a scan with a name and reload it with one click. The free plan stores 2; Pro stores unlimited.
-
“I can't tell whether the scan is any good before I run it.”
Why it happens: building a full script, running it, then discovering it returns 0 or 60 of 60 wastes time. How it is solved: the live preview counter updates as you edit, so a threshold of 500 on a 320-price dataset is caught immediately. The run-meta line also reports how many symbols were skipped for insufficient history.
-
“I can't watch a scan for new entries without re-running it.”
Why it happens: a scan is a snapshot, not a subscription. How it is solved: the monitor re-evaluates the same tree on a configurable interval and logs entry and exit events, with optional browser notifications while the tab is open.
-
“I don't know if the indicator values match my charting platform.”
Why it happens: every platform has conventions for seeds, smoothing and adjusted prices. How it is solved: the formulas are documented below, the audit exposes the intermediate values, and the accuracy note names the four conventions that explain almost all disagreements.
-
“My data is sensitive.”
Why it happens: a hosted scanner uploads your watchlists and prices. How it is solved: everything runs client-side. No price data leaves the browser. The only outbound request is the Gumroad license verification when you choose to verify a key.
Common Input Mistakes and How to Avoid Them
| Mistake | Effect on the result | How to catch it |
|---|---|---|
| Comparing an RSI value against a price | The condition evaluates arithmetically but is meaningless — RSI is bounded 0–100, so it will fail for any price above 100 | The audit row shows the raw left and right values; if they are on incompatible scales, the numbers make that obvious |
| Using “greater than” instead of “crosses above” | The rule fires on every bar above the level, not only the transition | The audit shows the previous-bar value for cross operators — if no previous-bar value is shown, it is not a cross |
| Using an indicator period longer than the available history | Every symbol returns “not enough history”; the scan appears broken | Set Minimum History Required above the longest period in any condition, or lower the period |
| Setting the MACD fast period longer than the slow period | The MACD line is consistently negative; the signal crossover is inverted | The default of 12/26/9 is the standard; only change it if you have a specific reason |
| Mixing timeframes inside one comparison | The left value is computed on one timeframe, the right on another — the comparison is a category error | The audit column shows the timeframe next to each row; if two rows for one comparison disagree, that is the cause |
| Forgetting that the free plan is capped at 25 symbols | The scan returns matches only from the first 25 symbols in the universe, silently | The run-meta line reports “free plan evaluated the first 25 of N symbols” |
| Forgetting a nested group is Pro | The scan does not run because the free plan blocks nested depth | Load the free-plan version of the example scan, which flattens the ANY sub-group into a single-level ALL group |
| Using a forming candle and re-running later | The same scan returns different matches at 10:00 and 15:00 | Switch to “completed candle only” for reproducible results |
| Pasting a dataset where the previous session's close is missing | Cross operators fail because the previous-bar value is NaN |
The audit shows “prev n/a” for the affected rows; supply contiguous sessions |
Entering 0.03 when you meant 3% |
ATR%, price-change % and rate-of-change % all work in percentage points; entering a decimal asks for a fraction of a percent | The live sanity check flags any ATR% under 0.1 as almost certainly a decimal-vs-percent mistake |
| Putting every condition in one ALL group when you meant OR | Five conditions in an ALL group is a very tight conjunction; the scan returns near-zero matches | If you want “volume confirmation OR a momentum trigger”, that belongs in an ANY sub-group |
| Mixing adjusted and unadjusted prices across imported symbols | The engine cannot detect this for you; indicators diverge and the audit disagrees with your charting platform | Import from a single export convention |
Real-World Usage Examples
Systematic equity trading — a morning shortlist
A discretionary trader who wants a repeatable morning list uses Scanner Studio as the upstream filter: RVOL and ATR% narrow the universe to names worth charting, while the per-row audit removes the “why is this on my list?” problem that plagues black-box screeners.
Quant research prototyping
Before writing production code in Python or R, a research analyst writes the candidate rule in the condition builder, runs it on 60 to 400 bars per symbol, and inspects the audit. Divergences between the prototype and the production implementation are usually convention differences, and the audit narrows them to a specific number.
Volatility and derivatives context
ATR% is a share-price-independent volatility reading. Combining an ATR% floor with an RVOL minimum produces a shortlist where the risk-to-reward math of a fixed-dollar or fixed-fraction stop is materially different from the rest of the basket — useful before pricing spreads or choosing position size.
Cross-asset screening
Weekly and monthly aggregated bars let a user apply the same rules across equities, CFDs and major FX pairs without re-tooling. The aggregation is explicit (daily rows are grouped and OHLC folded) so the timeframe label in the audit means exactly what it says.
Teaching and onboarding
Because the audit shows the previous-bar value used by cross operators, the tool doubles as a teaching aid: “here is why this symbol was included, here is why that one was excluded, here is the exact arithmetic”. The teaching value of an auditable pass/fail is much higher than a static recommendation list.
A worked real-world scan — weekly breakout
An independent trader runs a weekly breakout screen on a 40-name universe and needs to express it without writing code. Their rule is: on the daily chart, the symbol must be within 5 % of its 252-day high, the 20-day average dollar volume must be at least $25 million per day, and RSI(14) must have crossed above 55 within the last two completed sessions.
- Data and universe. They import a CSV of 40 tickers covering two years of daily bars, set Minimum History Required to 200 bars, and set the universe to “Every symbol in the dataset”.
- Near-high filter.
gapFromHigh(252) < 5. The period is 252 trading days, not 365, because the scanner counts bars. - Liquidity filter.
dollarVolume(20) > 25,000,000. This is deliberately conservative — it removes names that would not absorb a mid-size position. - Momentum trigger.
rsi(14) crosses above 55. The cross operator ensures the rule fires on the transition, not on every bar where RSI happens to be above 55. - Consecutive check. Because the trader wants recent crosses rather than any cross, they set Minimum Consecutive Bars to 2 and accept the small extra cost of the consecutive evaluation.
- Preview and run. The preview count shows 3 of 40 candidates. They run the full scan; the run-meta line reports that 4 symbols were skipped for insufficient history, which is expected because a few IPO names have fewer than 200 bars.
- Results and export. The three matches are exported via the CSV button and pasted into a broker watchlist. The trader clicks “Symbols” as a backup copy, and saves the scan as “Weekly breakout” so next week's run is one click.
- Monitor. They start the monitor at the 15-second interval. Over the next few sessions, one symbol falls below the 5 % near-high threshold and is logged as EXIT; a fourth symbol is logged as ENTER after the next breakout.
Accuracy Note — What the Scanner Does and Does Not Guarantee
Every value produced by Scanner Studio is calculated from the price history you have loaded, using the indicator definitions listed below. That is the same arithmetic used by every mainstream charting package. The important caveats are conventions, not errors, and they explain almost all disagreements with other screeners:
What is verified
The indicator math (Wilder RSI / ATR / ADX, EMA seeding, Bollinger bands, MACD, Stochastic, rate of change) is implemented directly from the standard formulas, with the same seeding conventions used by charting platforms. The audit exposes every intermediate value, so a mismatch with another platform is traceable to a specific convention rather than hidden.
What is not verified
The price data. The built-in dataset is synthetic and labelled as such. Any numbers you import are your responsibility — adjusted versus unadjusted, regular versus extended hours, split-adjusted conventions. A scan is only as trustworthy as the rows it consumes.
What it is not
A forecast, a rating, or investment advice. A condition that was true on a historical bar is a statement about arithmetic, not about the future. The scanner ranks by pass count, not by expected return. Position sizing, risk management and portfolio construction all sit outside the scanner and are your responsibility.
The four conventions that explain most disagreements
- Price adjustment. The scanner does not adjust for splits or dividends. If your dataset is split-adjusted and your vendor's is unadjusted, the same date will produce different SMA values for the same symbol.
- Extended hours. Pre-market and after-hours bars are excluded by default because the parser assumes one bar per calendar day. If your CSV includes extended hours, the daily high/low will differ from a regular-hours screen.
- Wilder vs simple smoothing. RSI, ATR, ADX and their families use Wilder smoothing (an EMA with α = 1/n), the classical definition. Some platforms seed the average with a simple mean of the first n bars; the values converge within a few bars but differ for the first few dozen.
- Calendar vs trading-day periods. Every “N bars” in this scanner counts trading days, not calendar days. A 52-week high filter is 252 bars, not 365. This is why the period inputs for
highestHighandlowestLowdefault to 52 rather than 365.
The safe way to compare against another screener is to read the audit for a single symbol: it exposes every intermediate value, so a mismatch is traceable to the convention rather than to a black box.
Indicator Formulas Used
The tables below document the exact arithmetic for the indicators most often involved in scans, so a result can be reproduced in a spreadsheet or checked against a published reference.
Simple and exponential moving averages
| Indicator | Formula | Notes |
|---|---|---|
| SMA | SMA(n) = (1/n) × ∑ closei | Equal weights over the trailing n bars. |
| EMA | k = 2/(n+1); EMAi = closei×k + EMAi-1×(1−k) | Seeded with the simple mean of the first n closes. |
| Wilder smoothing | α = 1/n; Wi = (Wi-1×(n−1) + xi) / n | Used for RSI, ATR, ADX, +DI, −DI. |
RSI, ATR and ATR %
| Indicator | Formula | Notes |
|---|---|---|
| RSI(n) | RSI = 100 − 100 / (1 + avgGain / avgLoss) | Wilder smoothing on up/down moves; α = 1/n. |
| True range | TRi = max(H−L, |H−Ci-1|, |L−Ci-1|) | Uses the previous bar's close. |
| ATR(n) | ATRi = (ATRi-1×(n−1) + TRi) / n | Wilder smoothing on true range. |
| ATR % | ATR% = ATR / close × 100 | Comparable across price levels. |
MACD, Bollinger and ADX
| Indicator | Formula | Notes |
|---|---|---|
| MACD line | MACD = EMA(fast) − EMA(slow) | Fast must be shorter than slow. |
| MACD signal | signal = EMA(signal period) of MACD | Default signal period 9. |
| MACD histogram | hist = MACD − signal | Sign change is the classic trigger. |
| Bollinger bands | mid = SMA(n); σ = stdev(close, n); upper = mid + kσ; lower = mid − kσ | %B = (close − lower) / (upper − lower); width = (upper − lower) / mid × 100. |
| +DI, −DI | +DI = 100 × Wilder(+DM) / Wilder(TR); −DI analogous | +DM and −DM are the up/down moves that exceed the opposite move. |
| ADX | DX = 100 × |+DI − −DI| / (+DI + −DI); ADX = Wilder(DX) | Trend strength, not direction. |
What the Tool Deliberately Does Not Do
Stating the boundaries is part of trusting the tool. The list below is the complete, current scope.
- No live quote feed. There is no vendor data, no WebSocket, no scheduled refresh against a market. You load data; the tool computes on it.
- No order execution. There is no broker connection, no order routing, no paper-trade simulator. The scanner is an arithmetic tool.
- No forecast. A match is a statement about historical arithmetic on the evaluated bar, not a probability of future returns.
- No server-side storage. Saved scans live in local storage on the device. There is no account system, no cross-device sync, and no server that sees your data.
- No hidden ranking signal. Rows are ranked by the number of conditions satisfied, then by your chosen sort column. Nothing else influences order.
What you can verify in five minutes
- Load the sample dataset and press Load example scan. The seeded tree uses the momentum-with-confirmation setup (close > SMA(50), RVOL > 1.2, ATR% > 1.5, ANY of RSI-cross or MACD-hist-cross).
- Run the scan and expand any matching row. The audit shows each condition's left value, operator, right value, timeframe and — for crosses — the previous-bar value used by the transition.
- Change one threshold by 15–25% and re-check the preview counter. The count should shift in the direction you expect. If it does not, that is the specific thing to investigate.
- Switch the data source to Paste CSV, paste a handful of rows, and confirm the audit values match a hand calculation of SMA(2) or RVOL on the same rows.
Short Glossary
| Term | What it means in this tool |
|---|---|
| Leaf condition | One indicator + operator + right-hand side, evaluated on one bar. The atomic unit of a scan. |
| Group | An ALL / ANY / NONE container that folds its children into one boolean. |
| Cross | A two-bar transition: previous at-or-below the level, current above (or the reverse). |
| Consecutive bars | The requirement that the whole tree was true on the prior N−1 bars, not only the evaluated one. |
| Near miss | A symbol that satisfied at least one leaf but not all; visible in the Pro near-miss list. |
| Audit | The per-condition record of left value, operator, right value, timeframe and previous-bar value for a single symbol. |
| RVOL | Current volume divided by average volume over N bars; a multiplier, not a percent. |
| ATR % | Average true range divided by close, multiplied by 100; comparable across price levels. |
| Baseline | The monitor's starting match set; ENTERED / EXITED events are computed as differences against it. |
| Pro | The paid tier: unlimited everything, nested groups, weekly/monthly, near-miss, CSV export, monitor. |
Frequently Asked Questions
Does Scanner Studio use live market data?
No. There is no vendor feed bundled in. The scanner computes everything from the price history you load; the built-in sample dataset is synthetic and clearly labelled as such. That keeps the tool fully client-side and free of API keys. To scan real quotes, import a CSV of real bars or paste JSON — the parsing rules are identical for both.
Why does my result disagree with another screener?
Almost always a convention difference, not a bug. The four most common causes are: adjusted vs unadjusted prices, inclusion of extended-hours bars, Wilder vs simple smoothing on RSI/ATR/ADX, and trading-day vs calendar-day periods. The audit row for a single symbol shows every intermediate value, so a disagreement can be traced to the specific convention rather than guessed at.
What exactly does “crosses above” test?
It requires the previous bar to be at or below the level, and the current bar to be strictly above it. Without that two-bar check, a symbol that has been above the level for weeks would keep triggering a “cross”. The audit shows the previous-bar value next to the current one, so a cross is visible at a glance.
How are nested ALL / ANY groups evaluated?
Inner groups first, then outward. ALL requires every child to pass, ANY requires at least one, and NONE requires every child to fail. Nested groups are a Pro feature; the free plan supports a single flat group. The preview counter lets you verify the count before committing to a full run, and the audit row shows the nested structure explicitly.
How does “minimum consecutive bars” work?
At N = 1, a symbol matches if the rules are true on the latest completed bar. At N = 2, the same tree must also have been true on the previous bar; the tool re-evaluates the entire tree on the prior N−1 bars and keeps the symbol only if all of them also passed. This is deliberately the whole-tree check, not just a per-leaf check, so nested logic and cross operators remain consistent.
What is RVOL, and why is it a multiplier rather than a percent?
RVOL is current volume divided by the average volume over the last N bars. A value of 1.5× means “one and a half times the usual activity”. It is a ratio, so a threshold of 2 means “twice normal”. Entering 200 by mistake will return zero matches on every bar.
How do I express “(A and B) or (C)”?
Use a nested group. Put A and B into an ANY sub-group (they will be the two children that must hold), and put C into the same sub-group as an alternative. Nesting is a Pro feature; on the free tier you are limited to a single flat ALL / ANY group of up to four conditions.
Do weekly and monthly timeframes require different data?
No. Weekly and monthly bars are aggregated on the fly from the same daily rows you loaded. Aggregation is explicit — OHLC is folded by calendar week or month, volume is summed, and the resulting bar is what the indicator engine sees. This keeps a single dataset authoritative and removes a class of silent mixing bugs.
Is my data or scan uploaded anywhere?
No. Parsing, indicator math, result rendering and saving all happen in the browser; saved scans live in local storage on your device. The only outbound request is the Gumroad license check when you choose to verify a Pro key, and even that is a direct browser-to-Gumroad call.
Why does the free plan say “evaluated the first 25 of N symbols”?
Because it did. The free tier caps the universe at 25 symbols; the run metadata states the cap explicitly rather than pretending to have scanned everything. Symbols beyond the cap and symbols skipped for insufficient history are reported separately, not folded into the match count.
How are “near miss” rows scored?
Every symbol is evaluated on every leaf condition, even if an earlier condition already failed — that is why the per-row “conditions” count is available. A symbol that satisfied 3 of 4 leaves is reported as 3/4. The near-miss view (Pro) shows symbols with at least one pass, ranked by their condition count, so the closest misses to a full match are visible first.
Can I use the scanner for non-US markets?
Yes. The scanner is vendor-agnostic — any symbol that appears in your imported bars is evaluated. Currency differences do not affect the indicator arithmetic because ratios and percentages are currency-agnostic; only absolute value thresholds need to be set in the correct currency for the universe you are scanning.
What does the Pro license unlock?
Unlimited symbols and conditions, weekly and monthly timeframes, nested ALL / ANY groups up to three levels deep, the near-miss list, CSV export and the entry/exit monitor with browser alerts. The free tier is genuinely usable for a single flat scan of up to 25 symbols with up to 4 conditions on the daily timeframe.
Can I trust the ranking?
The ranking sorts by number of conditions satisfied, then by your chosen column. It is an arithmetic ranking, not a probability ranking. A symbol that passed 4 of 4 conditions is ranked above one that passed 3 of 4 — but a 4-of-4 match is not more likely to profit than a 3-of-4 match. Read the audit, not the ranking.
Is Scanner Studio investment advice?
No. It is a technical-analysis utility that reports whether arithmetic conditions are true on historical bars. A match is not a recommendation and says nothing about future returns. The accuracy note explains why the same scan can produce different results from a different platform and why that difference is a convention, not an error.
Before You Run Your First Real Scan
A three-question pre-flight:
- Does my minimum history exceed my longest indicator period?
- Are my percentage thresholds in percent units (e.g.
2not0.02)? - Did I use
crosses aboveonly where I meant a transition, and>where I meant a state?
If all three answers are yes, the audit will tell you the rest.
Try Scanner Studio
The scanner is free, runs entirely in your browser, and needs no account. Load the sample dataset, press Load example scan, then Run scan to see the momentum-with-confirmation setup above, or import your own OHLCV file to work with real price history.
Open Scanner Studio → Browse All Tools
Related tools: position size calculator, ATR volatility calculator, risk-reward calculator, RSI divergence analyzer, moving average crossover scanner.
Disclaimer: Scanner Studio is an educational technical-analysis utility. It reports whether arithmetic conditions are true on the price bars you provide. A match is not a recommendation and says nothing about future returns. The sample dataset is synthetic. Nothing on this page is investment advice.