Market Data Guide¶
This guide covers how to fetch market data from the O2 Exchange using the Python SDK.
See also
For real-time streaming, see WebSocket Streams Guide. For complete method signatures, see O2Client — High-level client.
Listing markets¶
markets = await client.get_markets()
for m in markets:
print(f"{m.pair}: base={m.base.symbol} ({m.base.decimals} decimals)")
# Get a specific market
market = await client.get_market("fFUEL/fUSDC")
print(f"Min order: {market.min_order}")
print(f"Maker fee: {market.maker_fee}")
Order book depth¶
Fetch a snapshot of the order book:
depth = await client.get_depth("fFUEL/fUSDC", precision=1)
print(f"Best bid: {depth.best_bid.price if depth.best_bid else 'empty'}")
print(f"Best ask: {depth.best_ask.price if depth.best_ask else 'empty'}")
# Iterate price levels
for level in depth.bids[:5]:
print(f" BID {level.price} x {level.quantity}")
for level in depth.asks[:5]:
print(f" ASK {level.price} x {level.quantity}")
The precision parameter controls price aggregation — lower values
produce fewer, wider price levels.
Recent trades¶
trades = await client.get_trades("fFUEL/fUSDC", count=20)
for trade in trades:
print(f"{trade.side} {trade.quantity} @ {trade.price} (id={trade.trade_id})")
OHLCV candles¶
import time
now_ms = int(time.time() * 1000)
bars = await client.get_bars(
"fFUEL/fUSDC",
resolution="1h",
from_ts=now_ms - 86_400_000, # last 24 hours
to_ts=now_ms,
)
for bar in bars:
print(
f"{bar.time}: O={bar.open} H={bar.high} "
f"L={bar.low} C={bar.close} V={bar.volume}"
)
Supported resolutions: "1m", "5m", "15m", "30m",
"1h", "4h", "1d", "1w".
Ticker data¶
ticker = await client.get_ticker("fFUEL/fUSDC")
print(ticker) # Raw dict with current market stats
Price conversion¶
Market data is returned in on-chain integer format. Use the
Market helper methods to convert to/from
human-readable floats:
market = await client.get_market("fFUEL/fUSDC")
depth = await client.get_depth("fFUEL/fUSDC")
if depth.best_ask:
chain_price = int(depth.best_ask.price)
human_price = market.format_price(chain_price)
print(f"Best ask: {human_price}")
Balances¶
balances = await client.get_balances(account)
for symbol, bal in balances.items():
print(f"{symbol}:")
print(f" Trading account: {bal.trading_account_balance}")
print(f" Locked in orders: {bal.total_locked}")
print(f" Unlocked: {bal.total_unlocked}")
Aggregated endpoints¶
The O2 API also provides aggregated market data in a format compatible
with standard crypto data aggregators. These are available on the
low-level O2Api client:
# Aggregated assets
assets = await client.api.get_aggregated_assets()
# Aggregated order book
book = await client.api.get_aggregated_orderbook("FUEL_USDC")
# Market summaries
summaries = await client.api.get_aggregated_summary()
# All tickers
tickers = await client.api.get_aggregated_ticker()