Help & FAQ

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.

πŸ€– AI assistant answer sheet

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."

What this platform does

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:

  • Live dashboard β€” a screen people can watch to compare brokers as prices move.
  • Data collection β€” it continuously records spread history into a database so you can query, chart, and export it later for analysis or reports.

How it works (in plain terms)

There are two kinds of broker connection:

  • MetaTrader 5 (MT5) brokers β€” a small background "worker" logs into the broker's MT5 terminal and streams its live quotes into the system.
  • API brokers β€” for brokers (and exchanges) that publish prices over a web API, the system reads quotes straight from that API. No MT5 needed. You configure these entirely from the Admin page.

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.

Accounts & roles

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:

  • Viewer β€” read-only: can see Live, History and Analytics for their company, but can't change anything and doesn't see Admin/Users.
  • Admin β€” full control of their own company: brokers, symbols, mappings, presets, history and that company's users.
  • Platform admin (super-admin) β€” runs the whole platform: creates and manages companies on the Companies page, on top of admin powers in their own company.

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.

Your account

  • Change your password: click your email (top-right) β†’ Account, enter your current password and a new one.
  • Forgot it? An admin can set you a temporary password from the Users page; you then log in and change it under Account.
  • Permanent session: an admin can mark an account so its login never expires β€” handy for an always-on screen (a 24/7 viewer wall display). Otherwise sessions are long-lived but can be ended by an admin at any time.

The pages

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.

Starting it up

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:

  1. Start the core containers (the database, backend and web app come up together).
  2. Open the web app in a browser. The top-right dot turns green when the backend is reachable.
  3. For MT5 brokers, make sure each broker's MT5 terminal is open and logged in, then start the worker so it can stream quotes.
  4. API brokers need nothing extra β€” once enabled in Admin they start on their own.

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.

Adding a broker

MT5 broker

  1. Open Admin β†’ + Add broker. Set Type = MT5.
  2. Fill in Name, the MT5 Login, Password, Server (exactly as the broker lists it), and the Terminal path to that broker's terminal64.exe.
  3. Save. The broker is created disabled. Tick Enabled to start its worker.

API broker

  1. Open Admin β†’ + Add broker. Set Type = API.
  2. Pick a Preset (Binance spot/futures, Coinbase, KuCoin, OKX, Bybit, Bitfinex, Gate.io, MEXC, OANDA…). It auto-fills the quote URL, auth and the bid/ask paths.
  3. If the API needs a key, put it in Login and set the Auth type. (See the FAQ on "Auth name".)
  4. Click Test. A green "Connected β€” bid/ask" line means it works; the system can also auto-detect the bid/ask fields for you.
  5. Save, then tick Enabled.

Saving your own preset

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.

Symbols & mapping

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.

  • Add a symbol: Admin β†’ Symbols β†’ type a name β†’ Add symbol.
  • Rename a symbol: click Rename on its row. It keeps its id and all its broker mappings β€” no need to delete and re-add. (History recorded under the old name stays under the old name.)
  • Per-broker names: when editing a broker, each assigned symbol has a "this broker's name" box. Leave it blank to use the canonical name, or type the broker's own name (for example a broker that calls gold XAUUSD.r). Once a broker has connected once, the box offers a searchable list of that broker's real instruments.
  • Asset class: each symbol has a Class (Forex, Metals, Indices, Crypto, Stocks, Other) that's auto-detected from its name; override it from the Class dropdown in Admin. Live and Analytics have a Class quick-filter to show just one asset type.
  • Decimals: how many decimal places a symbol shows is chosen from its name (gold, JPY pairs and indices are recognised). An unrecognised name (like a placeholder "TEST") falls back to 5 decimals β€” rename it to the proper symbol to fix the display.

Admin tools

Users (πŸ‘₯ Users page)

  • Add a user with a role (Viewer or Admin). The password is shown once with a Copy button β€” capture it then, because it's stored hashed and can't be shown again.
  • Reset password sets a new one for a user who's locked out (shown so you can relay it).
  • Log out ends a user's sessions immediately (force re-login).
  • Make permanent session gives an account a never-expiring login β€” for an always-on 24/7 viewer screen.

History clean-up (βš™οΈ Admin page)

  • πŸ—“ Delete old history β€” permanently remove your company's recorded history older than a chosen age (7/30/90/180 days, 1 year, a custom date, or everything). The live feed and newer data are untouched. Can't be undone β€” and every deletion is recorded in the audit log (who, when, how much) for accountability.
  • 🧹 Orphaned history β€” clean up data left behind by symbols you've deleted from the list.

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.

Using the Live view

  • Matrix vs List: Matrix shows symbols as rows and brokers as columns (blank where a broker doesn't offer a symbol). List shows one flat row per broker/symbol with bid, ask and spread. Switch with the Matrix / List buttons.
  • Colours: green = best (tightest) spread, red = worst, for symbols quoted by 2+ brokers.
  • Highlight / Filter: pick symbols and/or brokers. Highlight emphasises them and dims the rest; Filter hides everything else.
  • Reorder: in Matrix view use β–²β–Ό to move symbols and β—€β–Ά to move brokers. The List view follows the same order automatically; click a column header to sort instead, and the Symbol header (≑) cycles back to the Matrix order.
  • Metric: in Matrix view choose to show spread in points or raw spread.
  • Full screen: the β›Ά Full screen button blows the trades grid up to fill the whole screen (Esc or the button to exit) β€” handy for a wall display.
  • Pinned header: the column header row and the symbol column stay fixed as you scroll, so labels are always visible. The panels and view toggle stay put; only the grid scrolls.
  • Theme: top-right switcher β€” System, Light or Dark.

Stall & surge alerts

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).

Stall alert ⏱ β€” a feed went quiet

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:

  • Average gap + grace β€” adaptive: alerts when idle time exceeds that symbol's own average update gap plus your grace seconds. Best when symbols update at very different rates.
  • Average gap (no grace) β€” alerts as soon as idle exceeds the symbol's average gap. The most sensitive option, but it fires often (gaps exceed the average roughly half the time), so expect more alerts.
  • Fixed idle limit β€” a plain timeout: alerts after the same number of idle seconds for every symbol.

Surge alert ⚑ β€” a spread blow-out

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.

Setting them up

  1. Tick Enable stall alert and/or Enable surge alert β€” they're independent, so you don't have to use both.
  2. Each has its own brokers and symbols to watch. A cell is monitored only when both its broker and its symbol are selected in that section.
  3. Set Grace / idle limit (stall), the surge points limit (surge, 0 = auto only), and Keep mark for (how long the mark and banner linger after an alert).

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.

Using History

  • Pick a time range, the brokers and symbols (no selection = all), then Query.
  • Times are shown in Cyprus time.
  • Bucket: each point is the average over a time window. Leave it on Auto (sized to your range) or pick a fixed size β€” smaller buckets show more detail but more points.
  • The table shows average bid, average ask, average/min/max spread and a tick count.
  • Scale: the chart defaults to a Log axis so big spreads (e.g. BTCUSD) and tiny ones (FX pairs) are all visible together. Switch to Linear when looking at a single symbol to see its real variation. Changing scale re-draws instantly.
  • Click ⬇ Excel to download the current result as a spreadsheet.
  • Tip: selecting just the brokers/symbols you care about makes the chart much clearer than showing everything.

Analytics

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:

  • Average spread by broker β€” ranked tightest (green) to widest (red): who's cheapest and who's most expensive to trade.
  • Spread by time of day β€” average spread per hour (Cyprus time), so you can see when spreads widen (e.g. around news or low-liquidity hours).
  • Who quotes high vs low β€” average bid and ask per broker.
  • Spread vs cross-broker average β€” which brokers sit below (tighter) or above (wider) the average of all brokers.
  • Per-broker statistics β€” avg/min/max/range, std-dev, vs-average, % of the time each broker was the tightest, and average bid/ask.
  • Spread by weekday and by trading session (Sydney / Tokyo / London / New York) β€” when the symbol is widest/tightest.
  • Arbitrage windows β€” moments where the highest bid across brokers was above the lowest ask (buy low ask, sell high bid). Indicative only β€” bucket averages, not tick-exact, and ignores fees/execution.
  • Broker correlation β€” how closely each pair of brokers' spreads move together.

πŸ€– Ask an AI to analyse this

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).

Audit log

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.

Setting up your on-prem agent

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.

  1. On the βš™οΈ Admin page, open the On-prem agent section and click Generate / rotate key. The key is shown once.
  2. Click ⬇ Download agent.env. This gives you a ready-made config file with your key and the server address already filled in β€” nothing to edit. (Or Download setup script to have the file written for you.)
  3. On your Windows machine, drop that 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.

Companies (platform admin)

The 🏒 Companies page is where you (the platform admin) manage customer companies. Each is fully isolated. From here you can:

  • Create a company with its first admin (name + admin email + password). That admin then adds their own team.
  • Pause / Resume β€” suspend a whole company (nobody there can log in, live sessions stop within ~10s) without deleting any data; Resume restores it.
  • πŸ‘ View as β€” open the dashboard as that company's admin to see exactly what they see (best for troubleshooting). A banner lets you exit back to your own account.
  • πŸ”‘ Reset the company's admin password to a temporary one, and ✎ change the admin email or rename the company.
  • Details (β–Έ) β€” expand a company to see its users (and last login), each broker's live status and last tick, ticks recorded in 24h, and active users in 7 days; plus a link to the audit log filtered to that company.
  • πŸ“ Notes β€” private notes per company, and Delete to remove one permanently.

Last login and brokers online/total also show in the table for at-a-glance health.

FAQ & troubleshooting

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:

  • CPU: a modern 4-core / 8-thread or better (recent Intel i5/i7 or Ryzen 5/7). Each MT5 terminal is light, but you run one per broker plus the worker.
  • RAM: 16 GB recommended (8 GB minimum). Each MT5 terminal uses roughly 300–600 MB; budget for all your brokers plus the operating system.
  • Storage: an SSD/NVMe β€” keeps MT5 and Windows responsive. Avoid spinning hard disks.
  • Network: use wired Ethernet, not Wi-Fi β€” far less jitter. Quotes are tiny, so a stable, low-latency line matters far more than bandwidth. For the absolute lowest latency, run the collector on a VPS in the same region as your brokers' servers (e.g. a London or New York datacentre), so it's only milliseconds from the MT5 servers.
  • Keep the clock synced (Windows automatic time / NTP). The "stale" flag compares against the backend clock, so a drifting clock causes false stale warnings.
  • Uptime & power: set the Windows High-performance power plan; disable sleep, hibernate and display-sleep; turn off the network adapter's power-saving; and in the BIOS set "restore on AC power loss" so it reboots after an outage. A small UPS avoids dirty shutdowns, and turning off automatic Windows-update reboots stops surprise restarts.
  • Keep it dedicated β€” fewer background apps means fewer hiccups in quote capture.

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.