How to Monitor Spreads Across Brokers in Real-Time
Build a spread monitoring system that tracks bid/ask spreads across multiple brokers, detects anomalies, and alerts you when trading conditions deteriorate.
Why Spreads Matter
The spread is the hidden cost of every trade. A 1.2-pip spread on EURUSD might seem trivial, but if you trade 10 times a day, that is 12 pips of pure cost. Over a month, it adds up to hundreds of pips -- often the difference between a profitable and unprofitable strategy.
Spreads are not fixed. They widen during news events, low-liquidity sessions, and weekends. Monitoring spreads in real-time tells you when conditions favor your strategy and when to sit out.
EURUSD typical spread (London)
EURUSD during NFP release
Sunday night rollover
Fetching Spread Data
curl -H "X-API-Key: YOUR_API_KEY" \
"https://tickatlas.com/v1/spread?symbol=EURUSD"
Response:
{
"success": true,
"data": {
"symbol": "EURUSD",
"bid": 1.08542,
"ask": 1.08551,
"spread_points": 9,
"spread_pips": 0.9,
"timestamp": "2026-03-28T14:30:00Z"
}
} Python: Spread Monitor
import requests
import time
import logging
from collections import deque
from datetime import datetime
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("spread_monitor")
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://tickatlas.com/v1"
class SpreadMonitor:
def __init__(self, symbols: list[str], alert_multiplier: float = 2.0):
self.symbols = symbols
self.alert_multiplier = alert_multiplier
# Track recent spreads for each symbol (rolling window)
self.history: dict[str, deque] = {
sym: deque(maxlen=100) for sym in symbols
}
def fetch_spread(self, symbol: str) -> dict:
resp = requests.get(
f"{BASE_URL}/spread",
headers={"X-API-Key": API_KEY},
params={"symbol": symbol},
)
resp.raise_for_status()
return resp.json()["data"]
def check_all(self) -> list[dict]:
"""Check spreads for all symbols. Return any alerts."""
alerts = []
for symbol in self.symbols:
data = self.fetch_spread(symbol)
spread = data["spread_pips"]
self.history[symbol].append(spread)
# Calculate rolling average
history = list(self.history[symbol])
if len(history) < 10:
continue # Need enough data
avg_spread = sum(history) / len(history)
threshold = avg_spread * self.alert_multiplier
if spread > threshold:
alert = {
"symbol": symbol,
"current_spread": spread,
"average_spread": round(avg_spread, 2),
"multiplier": round(spread / avg_spread, 1),
"timestamp": data["timestamp"],
}
alerts.append(alert)
logger.warning(
f"SPREAD ALERT: {symbol} at {spread} pips "
f"({alert['multiplier']}x average)"
)
return alerts
# Usage
monitor = SpreadMonitor(
["EURUSD", "GBPUSD", "USDJPY", "XAUUSD"],
alert_multiplier=2.0,
)
while True:
alerts = monitor.check_all()
for a in alerts:
print(f"WARNING: {a['symbol']} spread {a['current_spread']} pips")
time.sleep(30) # Check every 30 seconds Trading Condition Signals
Beyond alerts, use spread data to control your bot's behavior:
def should_trade(symbol: str, max_spread_pips: float) -> bool:
"""Check if spread conditions allow trading."""
resp = requests.get(
f"{BASE_URL}/spread",
headers={"X-API-Key": API_KEY},
params={"symbol": symbol},
)
spread = resp.json()["data"]["spread_pips"]
if spread > max_spread_pips:
logger.info(f"Skipping {symbol}: spread {spread} > {max_spread_pips}")
return False
return True
# In your trading bot:
if should_trade("EURUSD", max_spread_pips=2.0):
execute_strategy("EURUSD")
else:
logger.info("Waiting for better spread conditions") When Spreads Typically Widen
High-impact news events
NFP, FOMC, ECB rate decisions. Spreads can blow out to 5-10x normal levels seconds before the release. Use the /sessions endpoint to check for upcoming events.
Low-liquidity sessions
Sunday night rollover (17:00 EST), Asian session for European pairs, holidays. Plan your bot's schedule around liquidity.
Flash crashes and volatility spikes
Sudden spread widening can indicate a liquidity vacuum. If spreads spike without a scheduled event, reduce exposure immediately.
Related Reading
Try this with live data
Every account gets $2.50 in free PAYG credits. No card required — paste your API key and run the code above against live broker data.
Keep reading
All articles- Analysis 9 min read
ADX: How to Measure Trend Strength in Your Trading Bot
Learn how the ADX indicator measures trend strength, not direction, and how to use it as a filter to dramatically improve your bot's signal quality.
March 28, 2026
- Analysis 10 min read
CCI Trading Strategy: Mean Reversion with Commodity Channel Index
Build a mean reversion trading strategy using the Commodity Channel Index. Includes API integration, Python code, and signal filtering techniques.
March 28, 2026
- Analysis 13 min read
Crypto Trading API Comparison: 2026 Developer's Guide
A detailed comparison of crypto and multi-asset trading APIs for developers. Features, pricing, reliability, and code examples for the top platforms.
March 28, 2026