Cross-Venue Trade Flow Engine - Personal or Commercial
Cross-venue trade flow - 0.25μs, 4.4M/sec. Fee-aware execution across venues, one worker per core, 5 retries, durable journal. Native C++20 for high-frequency screening. Full source, runs offline. Own it or subscribe - try live below.
- Latency (measured)
- 0.23 µs
- Throughput (measured)
- 4.8M/sec
- Price
- $249
Measured on win32-x64 (ZachsNitro · 13th Gen Intel(R) Core(TM) i5-13420H · 12 threads) · 2026-10-11 · 400,000 iterations · one tick: book update + z-score + edge + risk check · per-task p50 0.2 µs, p95 0.3 µs, p99 0.3 µs
Live on this site's server: 0.11 µs · 13.9M/sec, median of 1 terminal run of bot benchmark (latest 2026-09-28, linux-x64 (botstudio9 server)). A different, smaller machine than the figure above, so expect it to differ.
About this bot
One deal executes in 0.25 microseconds - 4.4M/sec. Not Python. Native C++20.
Built for high-frequency screening and fee-aware execution across venues. The same binary running live in the terminal below is the binary you download.
WHAT IT DOES: Cross-venue trade flow engine. One deal (amortize + evaluate, parse excluded) - 0.25μs mean / 4.4M deals/sec measured, 5,000 iterations (2026-09-25). - Fee-aware routing across venues - Pro tier: one worker per core - 5 retries, durable journal - Fully offline, no API rate limits
WHAT YOU GET: - Full C++20 source - not obfuscated - CMake build: Windows / Linux / macOS - Worker-per-core, retry logic, journal persistence - README + BENCHMARKS + full source - The real engine - not a wrapper
TWO WAYS TO BUY:
BUY ONCE - Own it forever Personal $249 - one person, one deployment, personal trading only Commercial $999 - one org, any staff, up to 3 deployments, client services allowed
SUBSCRIBE - Always updated Personal $79/mo - personal use + all updates + support while active Commercial $149/mo - commercial use + priority support + all updates + fee-model updates
No source resale. No white-label. Set by true-worth calculator.
Try it: Run the trade flow in the TEST IT terminal below - 4.4M/sec on your hardware.
Code preview
first 100 lines of src/arb.cpp - c++20 - 51 files - 5,915 lines in the archive1#include "bs9/arb.hpp"2 3#include <algorithm>4#include <cmath>5 6namespace bs9 {7namespace {8 9constexpr double kBps = 10'000.0;10 11} // namespace12 13double ArbEngine::net_edge_bps(const ArbConfig& cfg, Venue buy, double ask,14 Venue sell, double bid) const {15 if (ask <= 0.0 || bid <= 0.0) return 0.0;16 17 const VenueFees& buy_fees = cfg.fees[static_cast<std::size_t>(buy)];18 const VenueFees& sell_fees = cfg.fees[static_cast<std::size_t>(sell)];19 20 // Cost of acquiring one unit, and proceeds from selling it.21 const double cost = ask * (1.0 + buy_fees.taker);22 const double proceeds = bid * (1.0 - sell_fees.taker);23 24 const double transfer =25 cost * (buy_fees.withdrawal_bps + sell_fees.withdrawal_bps) / kBps;26 27 return ((proceeds - cost - transfer) / cost) * kBps;28}29 30std::optional<ArbSignal> ArbEngine::on_tick(const Tick& tick) {31 const nanos t0 = now_ns();32 ++ticks_;33 34 const SymbolId id = books_.intern(tick.symbol);35 if (!books_.apply(id, tick.venue, tick.quote)) return std::nullopt;36 37 auto signal = evaluate(id, t0);38 39 latency_.record(now_ns() - t0);40 41 if (signal) {42 ++signals_;43 if (handler_) handler_(*signal);44 }45 return signal;46}47 48std::optional<ArbSignal> ArbEngine::evaluate(SymbolId id, nanos ingest_ts) {49 if (!books_.has_both_sides(id)) return std::nullopt;50 51 ArbSignal best;52 double best_edge = cfg_.min_edge_bps;53 bool found = false;54 55 for (std::size_t b = 0; b < kVenueCount; ++b) {56 for (std::size_t s = 0; s < kVenueCount; ++s) {57 if (b == s) continue;58 59 const auto buy_venue = static_cast<Venue>(b);60 const auto sell_venue = static_cast<Venue>(s);61 const Quote& buy_q = books_.quote(id, buy_venue);62 const Quote& sell_q = books_.quote(id, sell_venue);63 64 if (cfg_.max_quote_age_ns != 0) {65 const nanos oldest = std::min(buy_q.local_ts, sell_q.local_ts);66 if (oldest != 0 && ingest_ts > oldest &&67 ingest_ts - oldest > cfg_.max_quote_age_ns) {68 continue;69 }70 }71 72 const double edge =73 net_edge_bps(cfg_, buy_venue, buy_q.ask_px, sell_venue, sell_q.bid_px);74 if (edge <= best_edge) continue;75 76 // Size to the thinner side of the trade.77 const double qty =78 std::min({buy_q.ask_qty, sell_q.bid_qty, cfg_.max_qty});79 if (qty <= 0.0) continue;80 81 best_edge = edge;82 found = true;83 84 best.symbol = books_.name_of(id);85 best.buy_venue = buy_venue;86 best.sell_venue = sell_venue;87 best.buy_px = buy_q.ask_px;88 best.sell_px = sell_q.bid_px;89 best.qty = qty;90 best.gross_edge_bps =91 ((sell_q.bid_px - buy_q.ask_px) / buy_q.ask_px) * kBps;92 best.net_edge_bps = edge;93 best.expected_pnl = (edge / kBps) * buy_q.ask_px * qty;94 }95 }96 97 if (!found) return std::nullopt;98 99 best.decided_at = now_ns();100 best.decision_latency_ns = best.decided_at - ingest_ts;This is the real file from the archive you receive, with your listing's metadata already substituted.
What is in the archive
- .gitignore
- CMakeLists.txt
- NOTICE
- README.md
- THIRD_PARTY_LICENSES.md
- bench/latency_bench.cpp
- config/fees.json
- config/model.json
- config/risk.json
- config/update.pub
- data/sample_session.csv
- data/sample_ticks.csv
- docker/Dockerfile
- include/bs9/arb.hpp
- include/bs9/book.hpp
- include/bs9/build_identity.hpp.in
- include/bs9/clock.hpp
- include/bs9/coloc.hpp
- include/bs9/ed25519.hpp
- include/bs9/exec.hpp
- include/bs9/feed.hpp
- include/bs9/json.hpp
- include/bs9/ml_signal.hpp
- include/bs9/risk.hpp
- include/bs9/session.hpp
- include/bs9/spsc_ring.hpp
- include/bs9/types.hpp
- include/bs9/update.hpp
- python/signal_model.py
- scripts/deploy.sh
- src/arb.cpp
- src/book.cpp
- src/coloc/coloc.cpp
- src/ed25519.cpp
- src/exec/exec.cpp
- src/feed_replay.cpp
- src/feed_uws.cpp
- src/json.cpp
- src/main.cpp
- src/ml/ml_signal.cpp
- src/risk/risk.cpp
- src/update.cpp
- tests/test_arb.cpp
- tests/test_enterprise.cpp
- tiers/basic/main.cpp
- tiers/enterprise/README.md
- tiers/enterprise/main.cpp
- tiers/pro/main.cpp
- tiers/starter/main.cpp
- wasm/trading-agent.cpp
- wasm/wasm_json.hpp
- LICENSE.txt
- bs9-manifest.json
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 $249 — 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.
| Licence | Price | Deployments | White-label | Included |
|---|---|---|---|---|
Personal - Single deployment This listing | $249 one-time | 1 | No |
|
Commercial - Team use | $999 one-time | 3 | No |
|
Agency Bundle - 5 Client Pack | $5,000 one-time (all bots · contact sales) Email to buy | 5 | No |
|
Agency Unlimited ($7500 one-time) | $7,500 one-time (all bots · contact sales) Email to buy | Unlimited | No |
|
Enterprise / White-label (Custom) | CustomRequest a quote | Unlimited | Yes |
|
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.
Questions before you buy
+Can I try it before I buy?
+Does it run on Mac or Linux?
+Can my team use it?
+Can I use my own fees and risk limits?
config/. A missing file falls back to the defaults and says so; an invalid one stops the program rather than trading on defaults.+Are updates included?
+What if it does not work?
What's inside
Trading agent: 149KB of source (3,489 lines of logic, 26 files), plus the shared agent core. Everything below is counted from that code — nothing on this list comes from the listing text.
bot --benchtime the decision path on this machinebot --benchmarkthe standard measurement (200 passes, sample file)bot --capsreport colocation capabilitiesbot --feesfee schedule [config/fees.json]bot --livelive feeds (needs -DBS9_WITH_UWS=ON)bot --max-skew-msskip crosses with quotes this far apart [1000]bot --modelz-score thresholds [config/model.json]bot --pinpin the decision thread to a corebot --quietsummary onlybot --replayreplay a tick file (--file is the same)bot --riskrisk limits [config/risk.json]bot --self-testcheck every module, exits 0 or 1
- Tests
- 181 checks across 2 suite(s), all passing (run 2026-10-04)
- Output
- readable text · JSON
- Speed
- Measured: 0.23 µs mean / 4.8M/sec — win32-x64, 2026-10-11, 400,000 iterations, one tick: book update + z-score + edge + risk check. 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'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.
trading-agent/ (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
- 1Download the zip
Unzip it anywhere. No installer, no account.
- 2Double-click START_HERE
Or run the commands below from a terminal in that folder.
- 3Read the output
It replays the sample session through the z-score gate, the risk layer and the fill simulator, and prints every trade, every refusal and the session PnL.
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.
- The full pipeline on the synthetic sample session
- Summary only
- The standard measurement: the same one the published figure comes from
- Time the decision path per tick on this machine
- Check risk, execution, the z-score and colocation
- Every flag
Live output
Captured from a real run of bot --replay data/sample_session.csv on linux-x64 (testit demo engine, same source as the download), 2026-09-28. Unedited.
- traded : 2
- risk blocks : 2 (edge-too-thin 2)
- net pnl : 132.57
- decision : p50 <= 200 ns, p99 <= 400 ns over 2000 ticks (bucket upper bounds)
Full output
$ bot --replay data/sample_session.csv fees : config/fees.json model : config/model.json (entry |z| 3.5, exit 0.525, warm-up 30) risk : config/risk.json feed : data/sample_session.csv SKIP BTC-USDT z=-11.18 gross 27.68bps net -42.32bps risk edge-too-thin: net edge -42.32 bps is below the 1.00 bps floor SKIP ETH-USDT z=12.11 gross 34.60bps net -35.40bps risk edge-too-thin: net edge -35.40 bps is below the 1.00 bps floor TRADE BTC-USDT z=-13.88 buy binance @ 64836.79 sell coinbase @ 65569.68 qty 0.3450 net 42.40bps fees 158.10 pnl 94.75 (within limits) TRADE ETH-USDT z=13.81 buy coinbase @ 3153.76 sell binance @ 3183.43 qty 5.0000 net 23.64bps fees 110.53 pnl 37.82 (clamped from 18.93 to 5.00) ticks : 2000 stretched : 4 (|z| at or beyond 3.50) traded : 2 risk blocks : 2 (edge-too-thin 2) fees paid : 268.63 net pnl : 132.57 decision : p50 <= 200 ns, p99 <= 400 ns over 2000 ticks (bucket upper bounds)
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
One person, one deployment, personal use. The same program and source.
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.
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.


- Measured 0.23 µs for one tick: book update + z-score + edge + risk check (4.8M/sec): the native program, 13th Gen Intel(R) Core(TM) i5-13420H · 12 threads, 2026-10-11. Your browser runs the same code more slowly, and the workspace shows its own time next to it.
- 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 live market data, no pre-loaded trades, no invented 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 --replay data/sample_session.csvand 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: Replay a session · Session · Trades and refusals · Cumulative P&L, USDT · Risk blocks by reason · Terminal
TEST IT - LIVE RUN
Runs the Cross-venue arbitrage engine (Enterprise) 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. data/sample_session.csv is synthetic (labelled in its header): a noisy Binance/Coinbase basis with four injected dislocations. The live feed is not available here. Nothing you run is stored.
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.
- Check risk, execution, the z-score and colocation
- The standard measurement: the same one the published figure comes from
- The full pipeline on the synthetic sample session
