BotStudio9
Stock & Crypto Scanner
Featured

Stock & Crypto Scanner - Personal or Commercial

C++20 Stock & Crypto Scanner - 22 indicators over 240 bars. 54 µs mean / 18k per sec. 58 files / 452KB. Personal $499 / Commercial $999.

Latency (measured)
54 µs
Throughput (measured)
18k/sec
Price
$499

Measured on win32-x64 (ZachsNitro · 13th Gen Intel(R) Core(TM) i5-13420H · 12 threads) · 2026-10-11 · 5,000 iterations · one full scan (22 indicators over 240 bars, file read excluded)

About this bot

Stock & Crypto Scanner — Personal or Commercial A production C++20 scanner engine — not a script. One full scan = 22 indicators over 240 bars. Measured Performance: Measured: 54 µs mean / 18k/sec win32-x64 - 2026-10-02 - 5,000 iterations - one full scan (22 indicators over 240 bars, file read excluded) What You Get (Both Licenses): 22-point scanner engine Build Tier Standard: one worker per core, 3 retries, durable journal 58 files / 452KB source - generates matching C++20 project Binaries: Windows / Linux / macOS True-Worth priced from code: Personal $499 / Commercial $999 Choose Your License: Personal - Single Deployment - $499 ✓ 1 person, 1 deployment ✓ Personal, non-commercial use × No client resale × No white-label Commercial - Single Deployment - $999 ✓ 1 business, 1 product deployment ✓ Use in production and charge your customers × No client resale × No white-label Agency & White-Label for this engine are not on this card — they cover the whole catalogue and are arranged by contact.

Code preview

first 100 lines of modules/scanner/module.cpp - c++20
modules/scanner/module.cppc++20
1// Stock & Crypto Scanner - Personal or Commercial — stock & crypto scanner module
2//
3// Candles in, indicators and alerts out. Five task kinds, each of which reads a
4// series (or a directory of them), computes something, and writes one JSON
5// report the commands render:
6//
7// scanner.scan indicator snapshot at the newest bar
8// scanner.alert configured rules evaluated at the newest bar
9// scanner.backtest the same rules replayed bar by bar, no lookahead
10// scanner.correlate Pearson correlation of returns across symbols
11// scanner.check parse-check the configured rules and nothing else
12//
13// A series arrives as CSV with a header (`"path"`), as JSON over HTTP
14// (`"url"`), or as a directory of either (`"dir"`). Every handler accepts an
15// `"out"` path and defaults to one inside the data directory.
16//
17// Rules are configuration, not code:
18//
19// "module": {
20// "series_dir": "data/series",
21// "rules": [
22// {"symbol": "BTC-USD", "when": "rsi(14) < 30 and close > sma(50)",
23// "note": "oversold but above trend"},
24// {"symbol": "*", "when": "macd() crosses_above macd_signal()"}
25// ]
26// }
27//
28// `when` is a real expression: a tokeniser and a recursive-descent parser with
29// precedence, type checking and positions in every error. An unknown indicator
30// is rejected when the config is read, not when a bar happens to reach it.
31//
32// Nothing here approximates. EMA is seeded with an SMA and smoothed with
33// 2/(n+1); RSI and ATR use Wilder's smoothing; Bollinger uses the population
34// standard deviation. When a series is too short for an indicator, the report
35// says so — it never carries a value computed from fewer bars than asked for.
36
37#include <algorithm>
38#include <cctype>
39#include <chrono>
40#include <cmath>
41#include <cstdio>
42#include <cstdlib>
43#include <filesystem>
44#include <fstream>
45#include <map>
46#include <memory>
47#include <optional>
48#include <set>
49#include <string>
50#include <utility>
51#include <vector>
52
53#include "bs9/agent.hpp"
54#include "bs9/http.hpp"
55#include "bs9/json.hpp"
56#include "bs9/log.hpp"
57#include "bs9/metrics.hpp"
58#include "bs9/scheduler.hpp"
59
60namespace fs = std::filesystem;
61
62namespace {
63
64constexpr const char* kScan = "scanner.scan";
65constexpr const char* kAlert = "scanner.alert";
66constexpr const char* kBacktest = "scanner.backtest";
67constexpr const char* kCorrelate = "scanner.correlate";
68constexpr const char* kCheck = "scanner.check";
69constexpr const char* kScreen = "scanner.screen";
70constexpr const char* kMeasure = "scanner.measure";
71
72const double kNaN = std::numeric_limits<double>::quiet_NaN();
73
74bool known(double value) { return !std::isnan(value); }
75
76// ---------------------------------------------------------------------------
77// Small text helpers
78// ---------------------------------------------------------------------------
79
80std::string trim(const std::string& text) {
81 std::size_t begin = 0;
82 std::size_t end = text.size();
83 while (begin < end && std::isspace(static_cast<unsigned char>(text[begin]))) ++begin;
84 while (end > begin && std::isspace(static_cast<unsigned char>(text[end - 1]))) --end;
85 return text.substr(begin, end - begin);
86}
87
88std::string lower(std::string text) {
89 std::transform(text.begin(), text.end(), text.begin(),
90 [](unsigned char c) { return static_cast<char>(std::tolower(c)); });
91 return text;
92}
93
94std::string join(const std::vector<std::string>& items, const std::string& sep) {
95 std::string out;
96 for (std::size_t i = 0; i < items.size(); ++i) {
97 if (i > 0) out += sep;
98 out += items[i];
99 }
100 return out;

This is the real file from the archive you receive, with your listing's metadata already substituted.

Licence options

Every licence ships the same source. What differs is how far you may deploy it and whether you may put your own brand on it.

Personal is for one person on one deployment, not for business use. Commercial costs more because it covers your whole organisation on up to 3 deployments, including services you sell to your own clients: the same code, with the rights a business needs.

This listing is $499 — Standard build tier. The price decides what is in the archive; the licence marked below decides what you may do with it, and is the one that ships in your LICENSE.txt.

LicencePriceDeploymentsWhite-labelIncluded
Personal - Single deployment
This listing
$499 one-time1No
  • 1 person, 1 deployment
  • Personal, non-commercial use
  • No client resale
  • No white-label
Commercial - Team use
$999 one-time3No
  • Up to 3 deployments
  • Any number of users in one organisation
  • Commercial use, including services you sell
  • No source resale or sublicensing
  • No white-label
Agency Bundle - 5 Client Pack
$5,000 one-time
(all bots · contact sales)
Email to buy
5No
  • Up to 5 client deployments
  • Per-client keys
  • Agency use allowed
  • Email support
  • No white-label
Agency Unlimited ($7500 one-time)
$7,500 one-time
(all bots · contact sales)
Email to buy
UnlimitedNo
  • Unlimited deployments
  • Unlimited keys
  • Agency use allowed
  • Priority support
  • All future updates
  • No white-label
Enterprise / White-label (Custom)
CustomRequest a quoteUnlimitedYes
  • Everything in Agency Unlimited
  • Full white-label with your logo
  • Custom domain
  • Source code option
  • Dedicated support
  • Custom SLA

Personal and Commercial are sold here. Agency and Enterprise cover every bot in the catalogue and are arranged by email: use the button on that row and we reply with a payment link. Questions first? Contact us.

Enterprise is quoted rather than listed. The licence that ships in your archive's LICENSE.txt is the one marked above. Licence prices are what each grant is worth; checkout charges this listing's price, once.

One-time, compared with subscriptions

OptionPriceSource
This engine$499 Personal / $999 Commercial, oncethis page
TA-Lib (indicator library)free, open sourceta-lib.org
TradingView Essential–Premium$14.95–$59.95/mostockbrokers.com
TrendSpider Standard–Premium$82–$137/mo ($648–$1,092/yr)stockbrokers.com

Prices looked up 2026-09-27; check the source before relying on them. A hosted service gives you a web interface and its own support, which this does not; this gives you the source, offline use and no renewal.

Questions before you buy

+Can I try it before I buy?
Yes. The live terminal on this page runs the same engine the download ships, on our server. Paste your own numbers into it; nothing you type is kept.
+Does it run on Mac or Linux?
The download includes a ready-to-run program for Windows, Linux, macOS.
+Can my team use it?
Personal is 1 person, 1 deployment, not for business use. Commercial covers one organisation: any number of its staff, up to 3 deployments, commercial use including services you sell. Need more deployments or client use? The Agency licences in the table above are arranged by email.
+Are updates included?
You buy this version with its full source, and it keeps working without us. Personal and Commercial do not include future updates; Agency Unlimited does.
+What if it does not work?
Before you download, you can have a full refund within 14 days for any reason. After download, you are refunded if the archive does not build from its own README, a feature named on the listing is missing or broken, or the licence does not match - a fix is offered first. Full terms: refund policy.
Read from the source

What's inside

Stock & crypto scanner engine: 166KB of source (3,545 lines of logic, 11 files), plus the shared agent core. Everything below is counted from that code — nothing on this list comes from the listing text.

7 commands you can run
  • bot alertEvaluate alert rules; deliver new ones to a webhook or Discord
  • bot backtestReplay the rules over history with a no-lookahead proof
  • bot checkParse the alert rules and show what each one needs
  • bot correlateCorrelation of returns across symbols on shared bars
  • bot measureTime a full indicator scan on this machine
  • bot scanCompute indicators for a series at its newest bar
  • bot screenRank symbols by an expression, filter, and keep the top N

7 task handler(s), each with retries and a durable journal: scanner.alert, scanner.backtest, scanner.check, scanner.correlate, scanner.measure, scanner.scan, scanner.screen

24 indicators
adx · atr · bb_lower · bb_mid · bb_upper · close · ema · high · highest · low · lowest · macd · macd_hist · macd_signal · minus_di · obv · open · plus_di · rsi · sma · stoch_d · stoch_k · volume · vwap
Rule language
Conditions like rsi(14) < 30 and close > sma(50), parsed with exact error positions.
Backtest with no-lookahead proof
Every indicator is recomputed on truncated history and must match, or the backtest stops.
Tests
488 checks across 3 suite(s), all passing (run 2026-09-27)
Output
readable text · JSON · CSV · delivery to webhooks / endpoints
Speed
Measured: 54 µs mean / 18k/sec — win32-x64, 2026-10-11, 5,000 iterations, one full scan (22 indicators over 240 bars, file read excluded). The live test below runs on this site's server, which has fewer cores than the build machine, so its timings are lower than this.
What you get

What's inside the zip

The download is the real program and its full source, yours to keep. The terminal further down this page is a separate, read-only demo copy of the same engine: it keeps nothing and cannot write files.

stock-&-crypto-scanner-engine/
  (the START files are one folder up, beside App/; everything below is in App/)
  START_HERE.bat / start_here.command / start_here.sh   opens the workspace in your browser
  workspace/                   the workspace page, with the engine and a terminal inside it
  START_TERMINAL.bat / .command / .sh   the program itself, in a terminal window
  COMMANDS.txt                 every command, with examples
  README.md                    build, run, test, licence notes
  bin/bot.exe (or bot-macos / bot-linux)   the program, ready to run
  src/, include/ ...             the full C++ source you own
  LICENSE.txt                  what your licence allows

How it works

  1. 1Download the zip

    Unzip it anywhere. No installer, no account.

  2. 2Double-click START_HERE

    Or run the commands below from a terminal in that folder.

  3. 3Read the output

    It reads SYN-TREND-UP.csv, one of the five synthetic sample series that ship with the program (generated shapes, not market data), and prints 22 indicators at its newest bar. Offline: nothing is fetched.

All commands

Click one to put it in the live terminal below, or to copy it for the download. The full list, with every option, is COMMANDS.txt in the zip and bot --help.

  • 22 indicators at the newest bar of a sample series that ships with the program (synthetic, offline)
  • Which of the five example rules are true right now, for each sample series
  • One rule of your own on one series, without editing the config
  • Replay a rule over history with the no-lookahead check, and what the close did 5 bars after each fire next to any bar
  • Rank a folder of series by an expression and keep the top 3
  • Correlation of returns across the series, on the bars they share
  • Check a rule: a typo is shown with a caret under the character
  • Time a full indicator scan on your machine

Live output

Captured from a real run of bot scan modules/scanner/examples/series/SYN-TREND-UP.csv on linux-x64 (the Linux x64 prebuilt program, prebuilt/stock-and-crypto-scanner/bot-linux), 2026-10-05. Unedited.

  • last close 159.0500 open 159.6400 high 160.0400 low 158.6400 volume 1084.00
  • window return 58.0700% bar-to-bar sd 0.506034%
  • rsi(14) 66.3616
  • macd() 1.7872
  • atr(14) 1.3912
  • adx(14) 71.7980
Full output
$ bot scan modules/scanner/examples/series/SYN-TREND-UP.csv
2026-10-05T06:29:36.564Z INFO  [scheduler] started with 2 worker(s), 7 handler(s)
SYN-TREND-UP  modules/scanner/examples/series/SYN-TREND-UP.csv
  240 bars  2026-06-01T00:00:00Z .. 2026-06-10T23:00:00Z
  last close 159.0500   open 159.6400   high 160.0400   low 158.6400   volume 1084.00
  window return 58.0700%   bar-to-bar sd 0.506034%

  sma(20)                 157.4435
  sma(50)                 153.6592
  sma(200)                134.8878
  ema(12)                 158.4858
  ema(26)                 156.6986
  rsi(14)                 66.3616
  macd()                  1.7872
  macd_signal()           1.8116
  macd_hist()             -0.024461
  bb_upper(20, 2)         160.6332
  bb_mid(20)              157.4435
  bb_lower(20, 2)         154.2538
  atr(14)                 1.3912
  highest(20)             160.4100
  lowest(20)              154.1400
  stoch_k(14)             74.3396
  stoch_d(14)             84.5545
  adx(14)                 71.7980
  plus_di(14)             20.6746
  minus_di(14)            6.5419
  vwap(20)                157.3744
  obv()                   54209.00

What the price buys

  • ✓ The full C++ source - you own your copy
  • ✓ A single ready-to-run program, no dependencies
  • ✓ Pay once and keep it
  • ✓ Runs offline, on your machine; your numbers never leave it
Personal
$499

One person, one deployment, personal use. The same program and source.

Commercial
$999

One organisation, any number of its staff, up to 3 deployments, commercial use - including services you sell. No source resale, no white-label.

Both licences ship the identical archive; the difference is what you may do with it.

New · one-click workspace

Unzip, double-click START_HERE, and it opens in your browser.

START_HERE opens workspace.html from your own disk: no install, no server, no network. The engine runs inside the page (the same C++ code as the program, compiled to WebAssembly) with its results, charts and a terminal on one screen.

The Stock & Crypto Scanner workspace as it opens: the Scan tab with an empty paste box, empty option boxes and the buttons that load a sample series; nothing has run
As it opens: blank. No tickers, no indicators, no alerts until you load a series.
The same workspace after loading the synthetic sample series SYN-TREND-UP.csv: 240 bars, last close 159.0500, and the table of 22 indicators at its newest bar
No market data - example shown after loading SYN-TREND-UP.csv, one of the synthetic sample series that ship with the program (generated shapes, not prices of anything), all figures computed locally.
  • Blank until you run it, then only real numbers. It opens empty. Every figure after that is computed by the engine while you watch, or is a dated measurement. No market data, no pre-loaded tickers, no invented alerts or live counters.
  • Nothing to set up. No Python, no pip packages, no admin rights, no account. It opens a web page; it does not install software or open a port.
  • Terminal inside the page. Type bot scan modules/scanner/examples/series/SYN-TREND-UP.csv and the engine prints what the program prints, and fills the panels. The full program is in the same folder: START_TERMINAL runs it in a terminal window.
  • One-time licence available.

On screen: Scan a series or Alerts or Backtest a rule or Screen or Correlate · Series · Indicators at the newest bar · Series loaded in this page · Notes from the engine · Rules at the newest bar · Alerts · Series checked · Replay · Rules replayed over the file · When each rule fired · Screen · Ranked · Left out · Shared window · Correlation of returns (Pearson r) · Pairs · Per symbol, over the shared bars · Terminal

Real engine · server-side

TEST IT - LIVE RUN

Runs the Market scanner engine this listing ships - compiled C++, on our server, right now. What you see is its real output and real timing. This server has fewer cores than the machine the listed figures were measured on, so expect lower numbers here. series/ holds five synthetic 240-bar series (uptrend, downtrend, range, breakout, noise) generated for the demo, and config/agent.json holds five rules. Not market data; nothing here predicts prices.

All commands →
bs9@botstudio9:~/stock-crypto-scanner-personal-or-commercial

Pick a command below or type one, then press Enter. One command per run; this is a read-only demo copy of the engine, and nothing you type is kept.

$
Commands to try - click to load, or copy
  • 22 indicators at the newest bar
  • The five configured rules: what each needs
  • A typo, with a caret under it
  • Which rules are true right now, per symbol
  • Breakout rule over history vs any bar
  • Rank symbols by distance from their 50-bar average
  • Trending symbols, least overbought first, as CSV
  • Correlation matrix of the five series
  • Time a full scan on this server