Forex & Multi-Asset Trading
A leveraged dealing desk you own outright — forex, metals, oil, stocks and indices, priced on your book.
This is a new release, so the first 50 customers get it below its normal price of $449. No code needed — the price you see is the price you pay. When the seats are gone the price goes back up.
- 10 seats at $21910 left
- 20 seats at $289−36%
- 20 seats at $329−27%
You save $230 at today's price. Every licence bought at launch is a full licence — same product, same updates, same support terms as it will have at $449.
- 88 seeded instruments across 5 asset classes: FX, stocks, commodities, indices, crypto
- Spread markup per symbol group — half onto the ask, half off the bid, and yours
- Server-side stop loss, take profit and trailing stops that outlive the browser
- MARKET, LIMIT, STOP and STOP_LIMIT orders with GTC, GTD or DAY time in force
- Margin call and stop-out sweeps that close the largest loser first, on their own
- Negative-balance protection writes a deficit off instead of chasing a customer
- Hedged margin charges the larger side only — a fully hedged pair costs one leg
- An immutable deals ledger storing the raw feed bid and ask beside every fill
- A risk desk showing net exposure per symbol, accounts at risk and quote health
- A per-account kill switch that stops new orders and still lets customers close
- Optional A-book routing mirrors chosen flow at OANDA or a MetaTrader broker
- Geo-block list enforced server-side, shipping with US and CA already populated
Inside Forex & Multi-Asset Trading
A dealing desk, and you are the desk
Leveraged forex, metals, oil, US equities, index ETFs and crypto CFDs in one terminal — margin, server-side stops, overnight swap and session calendars included. Orders fill against your own book at a price you set, so the spread is revenue rather than a fee somebody else collects.
In detail
Forex & Multi-Asset Trading turns your Bicrypto install into a leveraged dealing desk you run and own. Customers open a trading account, fund it from their platform wallet, and trade forex pairs, gold and silver, crude oil, US equities, index ETFs and a small set of crypto CFDs from one terminal — with streaming prices, real margin, server-side stops, overnight swap charges and session calendars. By default you are the counterparty: the spread is your revenue, and a customer's profit is your loss.
How it works
One market-data vendor streams bid and ask ticks into the tick engine, which stamps every symbol QUOTING, QUOTING_HALTED or SESSION_CLOSED. The instrument's symbol group then widens that raw quote by your spread markup — half onto the ask, half off the bid — so a customer trades your price, never the feed's. Orders fill instantly at the marked-up price and write an immutable deal carrying both the executed price and the raw feed bid/ask, your evidence in any dispute. The engine then re-marks floating P&L on every tick, moves trailing stops, fires stop loss and take profit and sweeps margin levels: at the margin-call level a customer is notified and blocked from adding risk or withdrawing; at the stop-out level positions are force-closed, largest loser first.
What ships in the box
| Surface | What you get |
|---|---|
| Catalog | 88 instruments across 5 asset classes, seeded inactive |
| Symbol groups | 7 seeded — leverage, spread, commission, swap policy |
| Calendars | 3 session calendars; holidays are yours to maintain |
| Order types | MARKET, LIMIT, STOP, STOP_LIMIT with GTC, GTD or DAY |
| Connections | 4 market-data vendors, 2 optional A-book hedge venues |
What operators control
- Spread markup, commission per lot, leverage cap and swap policy, per symbol group
- Account tiers with margin-call, stop-out and negative-balance protection — written in SQL, not in the admin panel
- A risk desk with net exposure per symbol, accounts near stop-out, quote health
- A per-account kill switch that blocks new orders while still allowing closes
- Withdrawal approvals with rolling daily and monthly limits, plus a KYC gate on live trading
- 37 permission keys over 15 admin screens, so an analyst never sees the money
Two hard requirements. A streaming market-data plan: none of the four supported vendors stream free and there is no REST fallback, so without one every open and close is refused — and every one of them treats showing their prices to your end users as redistribution, a separate licence from consuming the feed yourself. Nothing in the software enforces or waives that; it is between you and the vendor. And authorisation — leveraged CFDs are a licensed activity in most jurisdictions, which is why the geo-block list ships with US and CA populated.
You price every fill, and the markup is the business
Each symbol group carries a spread markup in pips. Half is added to the ask and half subtracted from the bid, so a customer always trades your quote instead of the feed's, and the difference is yours on every open. On a standard FX lot a one-pip markup is ten units of the quote currency, round turn — change the number and that changes with it. Leverage cap, commission per lot, swap markup and the triple-swap day sit on the same form, so what a trade costs and what it earns you are one screen.
This ships as a B-book: fills land on your balance sheet, so a customer's profit is your loss. The optional A-book layer mirrors chosen flow at OANDA or a MetaTrader broker, and it stays off until a Super Admin turns it on.
The engine closes the position before you have to
Every tick re-marks floating P&L and sweeps each account's margin level — equity divided by used margin. Cross the margin-call level and the customer is emailed, blocked from adding risk and blocked from withdrawing. Cross the stop-out level and positions are force-closed largest loser first, up to ten in a sweep, re-checking the level after each one; the row comes back LIQUIDATED with reason STOP_OUT. If the balance is still below zero when everything is shut, negative-balance protection writes it off against your P&L instead of chasing a customer for it.
Those thresholds live on account tiers, and no tier is seeded — nor is there an admin screen or write endpoint that creates one. Until you insert an fx_account_group row yourself, every account runs on the 100% / 50% fallback with no tier leverage cap.
One click tells you whether the desk can quote at all
The terminal prices from a streaming feed and from nothing else: the stream's message handler is the only thing that marks a symbol QUOTING, and every open and every close is refused while it is not. The provider console tests a key you have typed but not saved — it runs the credential check and then probes the stream as a separate verdict, because a plan with no socket passes the first and fails the desk. Nothing about that candidate value is cached, persisted or logged.
Four vendors are supported — Twelve Data, Finnhub, TraderMade and Polygon — and none of them stream on a free tier. There is no REST polling fallback, so a streaming-enabled plan is a hard cost to budget before you set a launch date. Budget for the licence as well: showing a vendor's prices to your own customers is redistribution, which every one of them sells separately from consumption, and nothing in the software enforces or waives it.
One screen answers how much of the book is yours
The risk desk aggregates every open position in SQL and reports net exposure per symbol in lots and USD notional, split into what stayed on your book and what went out to a broker. Your own floating P&L is the exact mirror of the customers' — the desk reports it as minus their equity less their balance — so the headline figure is what you lose if everything closed at the current mark. Under it sit the accounts nearest a stop-out, worst margin level first, and any account holding a position on a symbol that has stopped quoting is listed whatever its stored numbers say. It refreshes itself every ten seconds.
The at-risk list is a bounded worst-first slice: 200 accounts are examined per refresh and the payload says when it filled. The aggregate client balance and equity come from columns a five-minute reconciler refreshes, so a single account's own page can be fresher than the total — the screen names its source rather than letting the two disagree quietly.
You decide which orders you keep, before they are placed
Routing rules are priority-ordered rows matched on seven dimensions — instrument, symbol group, asset class, account tier, account, side and a size band. First match wins and any dimension left empty is a wildcard, so gold over five lots to the venue and everything else in-house is two rows. Nothing matches, and the global default decides; the venue is down, and the fallback policy either fills internally with an alert or rejects the placement outright. A dry-run tester runs the real resolver against a hypothetical order and hands back the decision plus a rule-by-rule trace saying which rule was skipped and why, without placing anything or calling a broker.
Routing is stamped once, at placement. A rule you change tomorrow never re-routes a position that is already open, and closes always follow the stamp the position was opened with. The master switch is Super Admin only and off out of the box, so an install that never touches this runs entirely on your own book.
Only free margin leaves, and it leaves in two steps
Funding a trading account from a Fiat, Spot or Eco wallet in the same currency is one atomic transfer. Coming out is deliberately not: the withdrawable amount is the smaller of the balance and equity less used margin, recomputed inside the same row lock as the debit, and margin reserved by orders still in flight at a broker is subtracted on top. The trading account is debited immediately and the wallet is credited only when you approve; rejecting refunds the account as a reversal deal and hands the customer's rolling daily and monthly allowance back. Withdrawals are refused outright below the margin-call level, and while any open position's price is stale.
Approval and rejection both take a row lock, and approving an account that has gone negative since the request was made is refused unless you confirm it explicitly. The daily and monthly ceilings default to 5,000 and 50,000 in the account currency and are editable per account; nothing charges a withdrawal fee and nothing measures how long an approval takes.
Countries you cannot serve are refused at the server
A geo-block list of ISO country codes is enforced in five places: account creation, the demo account provisioned on a first visit, deposits, order placement and modifying a resting order. The country is resolved from approved KYC data, the profile country and the CDN header, and a match on any one of them blocks — alpha-3 codes are folded to alpha-2 on both sides, so a KYC record reading USA is caught by a list entry reading US. Closing a position, cancelling an order and withdrawing are never blocked, because a policy change must not strand money that is already on the platform. The list ships populated with US and CA.
A customer whose country cannot be resolved is allowed through, deliberately — nothing captures a country before KYC and blocking unknowns would lock out every pre-verification demo user. This is a server-side gate on this extension's own routes, not a network block; for airtight coverage geo-block at your edge as well. It is also not a licence: offering leveraged CFDs to retail clients requires authorisation in most jurisdictions.
- instruments seeded
- 88
- asset classes it trades
- 5
- staff permission keys
- 37
- admin screens
- 15
Everything included
157 capabilities, in 12 areas
Every item below exists in the source you receive. Nothing here is a roadmap.
The customer terminal
One page, and everything a trader needs is on it.
- A single terminal route: markets rail, chart, order ticket and a positions dock
- Markets rail with search, asset-class tabs, sorting and keyboard stepping
- Non-quoting symbols show their state instead of a stale price
- Live candles per instrument, back-filled from history and extended from the tick stream
- Accounts, funding and the statement open as overlays without leaving the chart
- Economic calendar and market-news overlays
- Guided onboarding tour over the real controls
- A separate phone workspace with its own tab bar and sheets
- Terminal settings: font scale and an order-confirmation step
- Margin and commission read out on the ticket before the order is sent
- Every server refusal surfaced verbatim, so support reads the same words
The instrument catalog
What is tradable, what it is worth, and how a market is retired.
- 88 instruments seeded across five asset classes
- 7 FX majors, 21 FX crosses, gold, silver, WTI, Brent, 50 US large caps, 4 index ETFs, 2 crypto CFDs
- Asset classes: FOREX, STOCK, COMMODITY, INDEX, CRYPTO
- Per-instrument contract spec: contract size, pip size, point size, digits, precision
- Per-instrument size limits — minimum, maximum and step, enforced at placement and at fill
- Per-instrument stops level: the minimum distance a stop, target or pending level may sit
- Overnight swap points per instrument, separately for long and short
- Five-status lifecycle: INACTIVE, ACTIVE, CLOSE_ONLY, HALTED, DELISTED
- A guarded transition table — deactivating or delisting is refused while positions are open
- Bulk activate, close-only, halt and deactivate from the catalog table
- Per-vendor symbol mapping, so one catalog serves several feeds at once
- One-click catalog import that links the active vendor's codes and never overwrites another's
- Import report naming unmatched symbols and live instruments the new feed cannot quote
- Activation refused unless the instrument is mapped for the vendor currently active
- Trending and Hot flags that also keep a symbol streaming from process start
Pricing, financing and trading hours
Every number that decides what a fill costs and what it earns you.
- Symbol groups carrying the whole dealing-desk configuration
- 7 groups seeded: FX Majors, FX Crosses, Metals, Energy, US Stocks, Indices (ETF), Crypto CFDs
- Spread markup in pips — half onto the ask, half off the bid
- Commission per standard lot per side, charged in full at open and priced round-turn
- Maximum leverage per group
- Hedged margin rate: at 0 a fully hedged pair is charged on the larger leg only
- Swap markup percentage applied over the instrument's own swap points
- Triple-swap day chosen per group, Monday through Friday
- Weekday or seven-day swap charging, for 24/7 crypto CFD financing
- Swap-free (Islamic) accounts honoured or refused per group
- Full create, edit and delete on symbol groups
- Session calendars: a timezone, weekly open/close windows and a holiday list
- 3 calendars seeded: FX 24/5, US Stocks RTH, CME Metals & Energy
- A null calendar means 24/7 — what the crypto CFD group uses
- Session windows may cross midnight and cross days
- The calendar is authoritative: a closed market refuses fills and shows the next open time
- Deleting a calendar is refused while a symbol group still references it
- Full create, edit and delete on calendars
Quoting and market data
Where the price comes from, and how you find out it stopped.
- Four supported vendors: Twelve Data, Finnhub, TraderMade, Polygon / Massive
- One quote vendor active at a time — activating one stands the others down
- Test an unsaved API key: credential check plus a live stream probe, in one round trip
- The candidate key is never cached, persisted or logged
- Three per-symbol states: QUOTING, QUOTING_HALTED, SESSION_CLOSED
- Separate staleness thresholds for FX and commodities versus stocks and indices
- Outlier guard discards a tick that jumps too far from the last accepted one
- Per-vendor cool-off on rate limits, auth failures and plan limits
- A plan limit scopes to history only, so a 403 on one chart cannot take the price feed down
- Optional per-vendor proxy URL
- 13 chart timeframes, 1m through 1w
- Chart back-fill falls back to other keyed vendors, so a streaming feed and a history feed can be combined
- Two-layer candle cache: Redis plus gzipped files on disk
- Session-aware gap detection — a closed market is never back-filled or fabricated
- Three WebSocket channels: bulk tickers, per-symbol market data, and the caller's own orders and positions
Orders
- Four order types: MARKET, LIMIT, STOP, STOP_LIMIT
- Three times in force: GTC, GTD and DAY, which expires at the session close
- Seven order statuses, including ROUTING while a hedge is awaiting broker confirmation
- Stop loss, take profit and a trailing distance attached at placement
- Idempotent placement by request nonce — a retry returns the original order, not a second position
- Pending orders reserve no margin; the free-margin check runs at trigger instead
- Levels validated against the price the order will actually enter at, not the current market
- A pending order that would trigger instantly is refused
- Modify a resting order's prices, levels and expiry, or cancel it with no funds moving
- Rejected orders keep their reason on screen until the customer dismisses them
- Sizes entered in lots and converted against the instrument's contract size
Positions, margin and the risk engine
What runs on every tick, with nobody's browser open.
- Server-side stop loss and take profit, evaluated per tick
- Server-side trailing stops that ratchet on the best favourable price seen
- Partial closes that leave the remainder open with its levels intact
- Six close reasons recorded: MANUAL, SL, TP, TRAILING, STOP_OUT, ADMIN
- Hedging margin mode — independent long and short positions on one symbol
- Per-symbol hedged netting rather than a naive sum of position margins
- Effective leverage is the minimum of the account, the symbol group and the account tier
- Margin call: the customer is emailed, blocked from adding risk and blocked from withdrawing
- Stop-out closes the largest loser first, open sessions only, re-checking after each close
- The stop-out sweep is bounded at ten closes per pass and holds a per-account mutex
- Negative-balance protection writes the deficit off as an NBP_CORRECTION deal
- Sweeps freeze rather than liquidate when prices or conversions are unreliable
- Quote currency converted to account currency through a USD hub pair, at the live rate
Trading accounts and money movement
- DEMO and LIVE accounts, up to three of each per customer
- A demo account provisioned automatically on first visit with 10,000 units of paper money
- Account currency fixed at creation, chosen from the operator's own list
- Per-account leverage knob, defaulting to 100
- Instant atomic funding from a FIAT, SPOT or ECO platform wallet in the same currency
- Two-phase withdrawals: debited under the free-margin gate, released on approval
- Rolling daily and monthly withdrawal limits per account
- Withdrawal blocked below the margin-call level and while any open position's price is stale
- A withdrawal queue with approve and reject, both under a row lock
- Approval refused when the account went negative while the request waited
- Rejection refunds the account with a WITHDRAW_REVERSAL deal
- Per-account kill switch that blocks new orders and still allows closes
- Move a customer between account tiers, or flag them swap-free, from the account row
- Reason-coded manual adjustments booked through the ledger rather than written to a balance
The ledger and reconciliation
The record you hand a customer, and the one that proves it.
- An append-only deals ledger, eleven kinds of row
- OPEN, CLOSE, PARTIAL_CLOSE, COMMISSION, SWAP, DIVIDEND, ADJUSTMENT, NBP_CORRECTION, DEPOSIT, WITHDRAW, WITHDRAW_REVERSAL
- The raw feed bid and ask stored beside the executed price on every fill
- The conversion rate used and the balance the row left behind
- An idempotency key on every deal
- A customer statement over the same rows, in the terminal
- A five-minute reconciler proving the ledger sums to the balance, alerting on drift
- Due GTD and DAY orders expired by the same sweep on quiet symbols
- Overnight financing settled hourly against the 17:00 New York cutoff, idempotent per position per day
- Missed rollovers caught up for up to seven days after an outage
The operator risk desk
The screen you leave open on a desk carrying its own book.
- Net exposure per symbol in lots and USD notional, aggregated in SQL
- The B-book / A-book split per symbol, plus the broker-side net and the delta
- Accounts near their margin-call or stop-out level, worst first
- Accounts holding a position on a symbol that has stopped quoting, flagged separately
- Aggregate client balance against aggregate equity
- Per-symbol quoting health with the age of the last tick
- Hedge cards per venue: NAV, margin used, ratio, closeout percent, sync age, degraded flag
- Admin browsers over accounts, orders, positions and the deals ledger
- Force-close a position at market from the admin, stamped ADMIN
- Six scheduled jobs, each visible with its last run in the platform's cron monitor
A-book hedging
Optional, Super-Admin-gated, and off until you turn it on.
- Two hedge venues: OANDA v20 and MetaApi for MT4/MT5 brokers
- Several execution providers enabled at once, unlike the quote feed
- Routing rules on seven dimensions: instrument, symbol group, asset class, account tier, account, side and size band
- Priority-ordered, first match wins, a null dimension is a wildcard
- A dry-run tester that runs the real resolver and returns a rule-by-rule trace
- Routing stamped once at placement — a rule change never re-routes an open position
- A global default routing target and a bridge-down fallback of INTERNAL or REJECT
- Per-venue knobs: slippage bound, order and hard timeouts, margin buffer and alert ratios
- Stale-sync seconds that auto-suspend new routing, a financing-basis alert and an optional disaster stop
- A per-venue asset-class allowlist
- Venue symbol import that merges into the catalog instead of clobbering
- A LIVE-enable gate that fires a real alert and refuses the enable if it does not land
- An in-flight table: routing orders, unresolved rejections and pending broker closes
- A 60-second reconciler replaying the broker ledger, alert-only — it never auto-trades
- Orphan remedies in both directions: flatten a broker-side position, or book a late fill
- A per-venue, per-month revenue report: hedged volume, basis points, financing, dividends and both legs' P&L
- An alert inbox with three severities and idempotent acknowledgement
- A drain guard: disabling a venue is refused while external positions or in-flight orders reference it
- An operator runbook served from the admin panel
Compliance, alerts and access
- A geo-block list enforced in five places: account creation, the demo account provisioned on a first visit, deposits, order placement and order modification
- Exits are never geo-blocked — closing, cancelling and withdrawing always work
- Country resolved from approved KYC data, the profile country and the CDN header; any match blocks
- ISO-3 codes normalised to ISO-2 on both sides of the comparison
- A KYC feature gate on live accounts, skipped when platform KYC is off
- A blocking risk disclosure on first entry, acknowledged server-side per account
- A persistent risk notice on the order ticket
- Four notification templates: deposit confirmation, withdrawal status, margin call, stop-out
- Operator alerts fan out in-app and by email to Super Admins only, throttled per key
- 57 permission keys seeded across access, view, create, edit and delete
- The A-book master switch is rejected by the extension's own settings endpoint — Super Admin only
- Every admin write route logged to the platform audit trail
Calendar, news and introducing brokers
- An economic calendar screen with create, edit and delete
- A market-news screen with create, edit and delete
- Provider rows synced every 15 minutes; operator-authored rows are never touched
- Three impact levels, with actual, forecast and previous figures per event
- Automatic pruning — calendar after 90 days, news after 30; manual rows never
- A feed-status banner naming the last outcome per feed and which vendor served it
- Neither feed is tied to the active quote vendor
- Two IB rebate conditions: a commission share and a per-lot volume rebate
- A ten-minute rebate sweep, exactly-once by reward source id, live accounts only
- Licence
- Regular licence, activated in Bicrypto's extension manager. Full source, one production domain.
- Requires
- Bicrypto core. This is an addon — users, verification, wallets, transactions, notification templates, permissions and the scheduler all come from core.
- Stack
- MySQL or MariaDB and Redis, both of which core already needs. ScyllaDB is not used.
- Market data
- A streaming plan at Twelve Data, Finnhub, TraderMade or Polygon / Massive. One is active at a time; keys live in .env.
- Optional hedge venues
- OANDA v20, or a MetaTrader broker through MetaApi. Several can run at once, and both are off until you enable them.
- Processes
- Runs inside Bicrypto's own backend, frontend and cron processes. No extra service, no extra port.
- Counted surface
- 15 admin screens, 5 settings tabs, 86 route files (83 REST plus 3 WebSocket), 14 database tables
- Access control
- 57 permission keys seeded; 37 of them are read by a route, so that is what a staff role has to carry
- Scheduled jobs
- 6, from a 60-second hedge reconciler to a 15-minute calendar and news sync
- Seeded catalog
- 88 instruments over 5 asset classes, 7 symbol groups and 3 session calendars — all created inactive, so nothing goes live by accident
- Credentials
- Vendor and broker keys are environment-only. No endpoint returns one; the admin reports whether the variable is present and nothing more.
- No REST price fallback
- The stream is the only thing that marks a symbol quotable, and every open and every close is refused while it is not. None of the four vendors stream on a free tier, so a streaming plan is a hard cost before launch.
- Redistribution is a separate licence
- Showing a vendor's prices to your own customers is redistribution, and all four sell it apart from consumption. It is between you and the vendor — nothing in the software enforces or waives it.
- You are the counterparty by default
- Fills land on your balance sheet, so a customer's profit is your loss. A-book routing is Super-Admin-gated and off out of the box, and turning it back off never unwinds an existing hedge.
- No account tier ships, and none can be made from the panel
- There is no create, edit or delete route for account tiers. Until you insert a row yourself, every account runs the 100% margin-call / 50% stop-out fallback with no tier leverage cap.
- Instruments cannot be created or deleted
- The catalog screen has no create form and no delete action, and no route exists behind either. A symbol the import did not seed needs a SQL insert; retiring one is a lifecycle move to DELISTED.
- No order book and no depth
- Fills are at the vendor's top of book plus your markup. There is no matching engine, no level-2 and no resting liquidity from other customers.
- No MT4 or MT5 for customers
- Customers trade in your terminal. The MetaApi bridge connects your own hedge account to a MetaTrader broker; it gives a customer nothing.
- Stocks and indices are display-only until you opt in
- Every seeded stock and index instrument is flagged delayed and refuses fills until you turn the real-time opt-in on — because filling against a fifteen-minute-old price is a guaranteed loss.
- IB rebates need the MLM addon
- The two rebate conditions award through the platform's affiliate engine. Without MLM installed and active the sweep creates nothing, and both conditions ship disabled either way.
- Holidays are yours to maintain
- Nothing populates a calendar's holiday list. Leave it empty and Christmas Day is an ordinary trading day as far as the engine is concerned.
- One process runs the desk
- The tick engine, the risk engine and the reconciler all run on a single leaseholder. Putting the backend into PM2 cluster mode with more than one instance leaves some requests unable to quote.
- It is not a licence to operate
- Offering leveraged CFDs to retail clients requires authorisation in most jurisdictions. The geo-block list ships with US and CA already populated for exactly that reason.
Loved by customers
Reviews
No reviews yet. Own it? Share your experience.
Own this product? Sign in to leave a review.
Better together
Bundles containing this product
Get Forex & Multi-Asset Trading for less as part of a bundle.
Keep exploring