Everything you need to understand the platform, set it up, and fix the things you're most likely to run into. Use the search box to jump straight to a topic.
Download a complete reference for your role, paste it into any AI chatbot (ChatGPT, Claude, Geminiβ¦), and ask it anything about the platform β it answers from the sheet. Tell the AI: "Use this document to answer my questions."
This is a multi-broker spread monitor. It connects to several brokers at once and, for every instrument they offer, shows you the spread β the gap between the bid (sell) and ask (buy) price β in real time, side by side. A tighter spread is cheaper to trade; a wider one is more expensive.
It does two jobs:
There are two kinds of broker connection:
All quotes flow into a central service that calculates the spread for each broker/symbol, pushes it to the Live page over a live connection, and writes the history to the database. None of this requires editing code β brokers and symbols are managed from the Admin panel and take effect within a couple of seconds.
The platform requires a login, and everything is split by company: each company's brokers, symbols, history and users are completely private β no company can see another's data. There are three roles:
Admins add their company's users from the π₯ Users page. Sessions stay signed in (no automatic time-out) until an admin logs you out; use Log out (top-right) to sign out yourself.
Home β landing page and quick links; shows whether the backend is online.
π΄ Live β the real-time spread board, with stall/surge alerts and full-screen mode.
π History β query recorded spread data over any time range, chart it and export it.
π Analytics β broker comparison, time-of-day/session patterns, and AI analysis.
βοΈ Admin β manage brokers and symbols, map names, save API presets, and clean up history.
π₯ Users β add accounts and roles, reset passwords, log users out, set permanent sessions.
π‘οΈ Audit β a log of logins and changes.
π’ Companies β create and manage customer companies (platform admin only).
π Account β change your own password.
β Help β this page.
The core (database, backend, web app) runs as a set of containers. Each MT5 broker also needs its worker running on a machine where that broker's MT5 terminal is installed and logged in. In short:
API-only brokers (like crypto exchanges) work without any MT5 or worker on Windows. The MT5 worker runs on a separate Windows machine; the rest runs in Docker on the host.
terminal64.exe.Filled in a working API broker that isn't in the list? Click Save as preset to store it (shared with everyone), so next time it's one click. Select a saved preset to reveal a Delete button. Saved presets show with a β in the dropdown.
The platform uses canonical symbol names (e.g. EURUSD, XAUUSD,
BTCUSD) so every broker lines up in the same row. But each broker may name the
same instrument differently.
XAUUSD.r). Once a broker has connected once,
the box offers a searchable list of that broker's real instruments.Recording is done by the broker worker into the central database, so history accumulates whether or not anyone has a browser open β you don't need a screen left on to "collect" it.
β‘) cycles back to the Matrix order.The Live page can warn you about two opposite problems. Open them with the β± Stall/surge monitor button on the Live toolbar. Both are independent and both save their settings in your own browser (per viewer).
Watches for a symbol that stops changing price (a frozen or broken feed). It learns each symbol's normal pace and warns when it's been silent too long. Two ways to set the threshold:
Watches for a spread that suddenly jumps abnormally wide (a market event). It uses the engine's automatic per-symbol spike detection; you can optionally add a hard "alert if spread > X points" limit on top.
When an alert fires you get a banner at the top of the grid, a beep (a higher tone for surge, lower for stall), and the affected cell/row is marked β amber for a stall, red for a surge. Watched brokers and symbols show a small β± (stall) or β‘ (surge) next to their name so you can see what's being monitored at a glance.
Pick the Alert sound in the dialog (Beep, Siren, Warble, Chime, Buzzer, or None (visual only) for a silent alert) β choosing one plays a quick preview. Use the π Test alert button to fire a full demo so you can see and hear exactly what an alert looks and sounds like, without waiting for a real one.
The π Alert log button keeps a running record of every alert that fired β its type (stall or surge), the broker/symbol, and the time. It's saved in your browser; the number on the button is the entry count, and Clear log empties it.
The π Analytics page turns recorded history into broker-comparison insights. Pick a range and press Analyze data, then choose a Focus symbol. For that symbol you get:
Pick a Provider β Anthropic (Claude) or OpenAI-compatible (OpenAI, OpenRouter, Azure-style gateways, or a local model via a base URL) β optionally set a Model, paste your API key and a question, then Analyse. The page sends the computed summary (not raw ticks) to that provider via the backend and shows its analysis. Your key is used for that one request and is never stored; the call uses your own API credits. Your provider/model choices are remembered in the browser (the key is not).
The π‘οΈ Audit page records security-relevant actions with who did them and when: logins (and failed logins), and every broker, symbol, user and (for platform admins) company change. Company admins see only their own company; platform admins see every company.
Use the filter box to jump to an action or a person's email. It's a read-only trail β handy for "who changed this?" and for spotting failed-login attempts.
Tamper-evident: entries are chained together with a keyed hash and the table is append-only, so any later change, deletion or reordering of a past entry is detectable. A platform admin can press π Verify integrity to check the whole log end-to-end β useful if, say, someone deletes their own history and later disputes who did it.
If your brokers use MetaTrader 5 or cTrader, a small agent runs on your own Windows machine, reads those terminals, and streams the quotes to the platform over HTTPS. It signs in with a per-company agent key β you never have to hand-edit a config file.
agent.env into the agent's folder, then
start the agent β run run-agent.ps1, or install-service.ps1 to
keep it running 24/7. The full step-by-step is in the agent install guide
(AGENT-INSTALL.md).If the key is ever exposed, click Generate / rotate again β the old key stops working immediately. Revoke turns the agent off entirely. A brief internet drop is handled for you: the agent buffers quotes and replays them when the connection returns.
The π’ Companies page is where you (the platform admin) manage customer companies. Each is fully isolated. From here you can:
Last login and brokers online/total also show in the table for at-a-glance health.
What is the "AI assistant answer sheet"?
It's a downloadable reference for your role (top of this page). Download it, paste it into any AI chatbot (ChatGPT, Claude, Geminiβ¦), and ask the AI your questions β it will answer using the sheet. Each role gets the sheet appropriate to it.
How do I set up the on-prem agent without editing files?
On the Admin page, in the On-prem agent section, click Generate / rotate key, then β¬ Download agent.env. That file already has your key and the server address in it β just drop it into the agent's folder on your Windows machine and start the agent. No copy-pasting into config files. See "Setting up your on-prem agent" above for the full steps.
Is cTrader supported, and how do I add a cTrader broker?
Yes. Admin β + Add broker β Type = cTrader. Enter the Client ID, Client secret and Access token from your cTrader Open API app (the π reveals each), leave Account ID blank (auto-detected), set Host = Demo or Live to match the account, and map each symbol to cTrader's exact name. Use a production token + Host = Live for real customer accounts.
A broker's status dot isn't green.
For MT5 brokers, the worker streams quotes only while that broker's MT5 terminal is open and logged in. Check the terminal is running, the login/server are correct, and the worker is started. The Live page's broker cards show the connection status and a reason if it failed.
Prices show but everything says "stale".
Stale means no fresh tick arrived recently. The usual cause is a clock that's far out of sync on the machine running the worker β make sure its date/time is correct (set automatically), then restart the worker.
I changed something but the page looks the same / shows an old version.
Check the version number in the top bar (and on Home). If it didn't change, the new build isn't live yet, or your browser cached the old files β do a hard refresh (ββ§R / Ctrl+Shift+R).
My API broker's latency is much higher than MT5.
That's expected. MT5 quotes stream in real time (sub-millisecond locally), while API brokers are polled over the internet roughly once a second, so latency of a few hundred milliseconds is normal. The api tag marks these feeds.
Bid/ask from an API broker differ from MT5 for the "same" instrument.
Different venues genuinely have slightly different prices, and a crypto exchange's BTC is not the same product as an MT5 broker's CFD on BTC. Small differences are normal.
A symbol shows more decimal places than another identical one.
Decimals are chosen from the symbol's name. Recognised names (gold, JPY pairs, indices) get the right precision; an unrecognised name (like a placeholder "TEST") falls back to 5 decimals. Rename it to the proper canonical symbol to fix the formatting.
What is "Auth name" when adding an API broker?
It only matters when Auth is "Header" or "Query". It's the name of the
header or URL parameter that carries your key (e.g. X-API-Key or
token); the key itself goes in Login. For "None" or "Bearer" you can
leave it blank.
The preset dropdown is empty or missing.
Presets only appear when Type = API. If you just updated the app and still don't see them, hard-refresh the page to clear cached files.
I turned on an alert but nothing is being watched.
Each alert needs both a broker and a symbol selected in its own section. If only brokers (or only symbols) are picked, nothing matches. Pick at least one of each, and the β± / β‘ marker will appear on those rows.
The alert doesn't beep.
Browsers only allow sound after you interact with the page. Ticking the enable box or pressing π Test alert unlocks it. Also check your system volume and that the tab isn't muted.
A stall alert won't fire even though a symbol looks frozen.
In "Average gap + grace" mode it needs a few price changes first to learn the symbol's normal pace, so it won't judge a symbol that was never moving. Settings also reset their learning when you toggle the monitor. Use "Fixed idle limit" if you want a plain timeout with no baseline.
I deleted a symbol but it's still in History.
Deleting a symbol removes it from the live feed, but its recorded history is kept by default. When you delete a symbol you're asked "Also delete its history?" β choose OK to permanently purge its recorded data too, or Cancel to keep it. Purging large histories can take a moment.
What does the History "Auto" bucket do?
Auto lets the backend choose the bucket size from your range so you get a sensible number of points: 1 Day β 1-minute buckets, 1 Week β 10-minute, 1 Month β 30-minute (custom ranges follow the same span rule). It's the default; picking a specific bucket just overrides it.
The History chart is just flat lines at the bottom.
That happens on a Linear scale when big and tiny spreads are mixed. Set Scale = Log (the default) so every spread is visible, or select fewer symbols.
Someone else on the network wants to view the dashboard.
They can open the same address you use, from the same network β the app finds the backend automatically. The host machine's firewall must allow the incoming connection.
Do I need to update the Windows VM when the app changes?
Only when the worker code itself changes. Most updates are to the web app and backend, which run on the host β the VM only runs the MT5 worker and is unaffected by those.
Do we need to leave a screen on to collect history?
No. History is recorded by the broker worker straight into the central database β it accumulates 24/7 whether or not anyone has a browser open. An always-on screen is only useful as a live wall display or to hear the alarms. Everyone in your company sees the same recorded history.
What computer should run 24/7, and how do we get the lowest latency?
First decide which always-on machine you mean. The one where latency matters is the data collector β the Windows machine (or VM) running the MT5 terminals and the worker, because that's what captures the quotes. A viewer screen only displays data and needs almost nothing.
For the collector, aim for:
For the backend/database host (the Docker machine): an SSD and 8β16 GB RAM are plenty for a handful of brokers. Put it on the same LAN as the collector to minimise ingest latency β co-locating the worker and backend (same site or VPS) removes a network hop entirely.
Bottom line for lowest latency: wired connection, the collector close (network-wise) to the brokers, clock synced, and power-saving off.
I was suddenly signed out / it says "session ended".
Either an admin logged your account out, or your whole company's access was paused. Just sign in again; if you can't, contact your admin (or, if the company is paused, your provider).
Still stuck?
Note the exact broker, symbol and what the status card says, and check that the top-bar version matches the build you expect. That's usually enough to pinpoint whether it's a connection, config, or deploy issue.