Real-time market data streaming is the lifeblood of modern trading applications, and we know that performance and reliability are paramount for the community. That is why we've completely redesigned TraderMade's WebSocket infrastructure from the ground up.
The result is lower latency, more flexible subscriptions, expanded symbol coverage, and a robust foundation built to scale—perfect for trading platforms, fintech apps, hedge funds, and matching engines alike.
This developer update covers everything that is new with our WebSocket server and provides a comprehensive guide on how to get connected and migrate today.
Comprehending the Redesigned Architecture
We have overhauled the core mechanics of our data delivery to ensure you get pristine, up-to-the-millisecond data exactly how you need it. Here are the major upgrades you can expect:
Latency Cut by \~40%
By optimising our internal routing and upgrading the underlying infrastructure, messages are now delivered nearly 40% faster than on the legacy server. Every millisecond counts in financial markets, and this upgrade ensures you receive quotes faster than ever.
Fully Event-Driven Architecture
The previous server pushed quotes only. The new server is fully event-driven, pushing different event types to subscribed clients. This event model also unlocks new data types on the same connection—HLOC candle events are coming soon for users who want candle-based pricing rather than raw ticks.
Method-Based Actions with Built-In Responses
You can now subscribe and unsubscribe to events while maintaining a persistent connection. Every method (we call them actions) returns an event message confirming what was completed or denied. The old WebSocket required you to disconnect and reconnect before changing subscriptions.
Market Depth with Ladder Support
The new server supports market depth data with a ladder view that can be toggled on or off per connection. When ladder mode is enabled, bid and ask levels are delivered as a full depth ladder; when disabled, you receive standard best bid/ask.
Inverse Pairs and an Expanded FX List
Inverse pairs such as USDGBP (derived from GBPUSD) now subscribe and unsubscribe exactly like any direct pair. No special handling is required on your end. We've also expanded the FX list beyond the previous limit of 60 pairs.
The inversion is computed correctly server-side—bid and ask are swapped and inverted independently. If GBPUSD is quoted at bid 1.2700 / ask 1.2703, your USDGBP stream will output bid 0.78722 / ask 0.78740.
Volume Data for FX and Crypto
Volume is now included in tick messages for FX and crypto pairs, arriving alongside bid, ask, and mid in the same price update. No additional subscription is needed. Market depth has its own separate volume, sent alongside the quote event when the ladder parameter is set to true and enabled.
Scale: Tested at 10,000+ Concurrent Connections
The new server has been load-tested at over 10,000 concurrent WebSocket connections. It is purpose-built for platforms and aggregators that need to scale rapidly without any degradation in stream quality.
Setting Up Your Connection
Getting connected to the new endpoint is straightforward. Point your WebSocket client to the new URL:
wss://stream.tradermade.com/feedAdv
Send your login request. Make sure to replace YOUR_API_KEY with your actual key from the dashboard:
{"action":"login","fmt":"JSON/CSV/SSV","key":"YOUR_API_KEY"}
A successful login returns your account details, confirming your formats and permissions:
{
"type": "login_ok",
"key": "key:YOUR_API_KEY",
"fmt":"JSON/CSV/SSV",
"symbol_limit":YOUR_SYMBOL_LIMIT,
"cfds":true/false,
"trader_ladder":true/false
}
If the key is invalid or not found, you will receive a rejection:
{"key":"YOUR_API_KEY","reason":"unknown_key","type":"login_reject"}
Managing Subscriptions Smoothly
Our new method-based actions make handling your data streams incredibly flexible without requiring connection drops.
Subscribing — and Batching
You can send multiple symbols in a single subscribe request. The server processes this as one operation regardless of how many symbols are in the list:
{
"action":"subscribe",
"symbols":["GBPUSD","EURUSD","XXXXXX"]
}
or
{
"action":"subscribe",
"symbols":["GBPUSD:QUOTE","EURUSD:QUOTE","XXXXXX:QUOTE"]
}
The server confirms with a sub_ack that tells you exactly what was accepted, what was denied (e.g., not on your plan), and what was invalid (unrecognised symbol name):
{
"accepted":["GBPUSD:QUOTE","USDGBP:QUOTE"],
"denied":["OILUSD:QUOTE"],"denied_reasons":{"OILUSD:QUOTE":"cfds_not_allowed"},
"invalid":["XXXXXX:QUOTE"],
"type":"sub_ack"
}
(Note: The rest of a batch will still subscribe successfully even if some symbols are denied or invalid.)
Unsubscribing
Remove individual symbols at any time without dropping the connection:
{"action": "unsubscribe", "symbols": ["GBPUSD"]}
The server responds with an unsub_ack confirming which symbols were removed.
Querying Available Symbols
Not sure what's available on your plan? Ask the server directly:
{"action": "symbols"}
The response is a flat, sorted list of all accessible symbols across every category:
{
"type": "symbols",
"symbols": ["BTCUSD", "EURUSD", "GBPUSD", "USDGBP", "XAUUSD", "..."]
}
What You Receive
Once subscribed, price ticks arrive as they happen. Each message contains Symbol(s), Type of Quote(t)(QUOTE/HLOC..), bid(b), ask(a), mid(m), bid_volume(bv), ask_volume(av) and a server-side millisecond timestamp(ts).
Quote in JSON format:
{
"a":"0.739486353",
"av":"100000",
"b":"0.739453544",
"bv":"100000",
"s":"USDGBP",
"t":"QUOTE",
"ts":"20260420-15:01:05.530"
}
Quote in SSV format:
# Format: [TYPE] [SYMBOL] [TIMESTAMP] [BID] [ASK] [BID_SIZE] [ASK_SIZE]
QUOTE GBPUSD 20260420-15:19:12.713 1.35285 1.35292 100000 100000
Quote in CSV format:
# Format: [TYPE] [SYMBOL] [TIMESTAMP] [BID] [ASK] [BID_SIZE] [ASK_SIZE]
QUOTE,GBPUSD,20260420-15:19:12.713,1.35285,1.35292,100000,100000
Note: The ts field is a date-time in this format YYYYMMDD-HH:MM:SS.sss as a string.
Troubleshooting and Effective Error Handling
The new server validates all JSON before processing and returns specific error codes rather than generic failures, allowing for proactive error handling.
| Scenario | Server response | What to do |
|---|---|---|
| Invalid or unknown API key | login_reject | Check your key on the dashboard |
| Symbol unavailable on your plan | sub_ack with denied list | Check denied_reasons, review your plan |
| Symbol not recognised | sub_ack with invalid list | Query symbols to see what's accessible |
| Subscription rate exceeded | error with retry_after_ms | Back off and retry after the indicated delay |
| Malformed request | error | Validate your JSON before sending |
| Connection drop | WebSocket close | Reconnect with exponential backoff |
Migrating from the Previous Endpoint
If you're currently connected to wss://marketdata.tradermade.com/feedadv, migration is quick and straightforward:
- Update your endpoint to wss://stream.tradermade.com/feedAdv
- Your existing API key works as-is — no new credentials needed. The new server is backward compatible, so changes to your code are optional for enhanced functionality.
- Update your login failure handler: the new server returns login_reject, not login_failed.
- Update your sub_ack handler: the new response uses accepted / denied / invalid fields.
Quick Start Reference
1. Connect → wss://stream.tradermade.com/feedAdv
2. Send login → {"action":"login", "key": "YOUR_API_KEY", "fmt":"JSON"}
3. Subscribe → {"action": "subscribe", "symbols": ["EURUSD", "BTCUSD"]}
4. Receive ticks → {"s": "EURUSD", "b": 1.08542, "a": 1.08545, "m": 1.085435, "bv":1, "av":1, "t":"QUOTE", "ts": "..."}
Frequently Asked Questions
- Do I need a new API key? No. Your existing key works with the new server without any changes.
- Can I still use the old endpoint? Yes, but we recommend migrating to stream.tradermade.com for lower latency and new features.
- Is volume available for all symbols? Volume is available for FX majors and crypto pairs.
- What if I need custom symbols or higher rate limits? Contact support@tradermade.com. Custom configurations are available for enterprise accounts.
- Can I use WebSocket and REST simultaneously? Yes. Both work in parallel on the same account. Use WebSocket for real-time streaming and REST for batch or historical lookups.
The Bottom Line
Our newly redesigned WebSocket infrastructure is built to empower your applications with unmatched speed, clarity, and scalability. By taking advantage of the event-driven architecture and persistent subscription management, you can build highly responsive and reliable financial platforms. For integration support, reach out to us at support@tradermade.com.