market.sessions), so read a
market’s state rather than assume it is open.
This page gives the rules. For the states as a type, and the fields on them, see
how it works and reading
gates.
The markets
Minute rounds run on BTC, ETH, SOL and XRP (
market.minuteEnabled is true).
Only the markets in the table are open to trade. A paused market refuses new opens and adds with
MarketPaused, and closes keep working.
Markets with trading hours
No live market has trading hours. Gold (XAU/USD) follows the rules below, and it is not available
for now.
When gold trades
Gold trades in five sessions each week. Each session opens at 23:00 UTC and closes at 21:00 UTC on the next day.
Gold is closed from 21:00 to 23:00 UTC on Monday to Thursday, and from Friday 21:00 UTC to Sunday
23:00 UTC. The hours are fixed in UTC. They do not move when clocks change for daylight saving.
A scheduled event window can halt a market for a few minutes. Windows are entries on the market’s
account (
market.eventWindows), so read them there. While a window lasts, opens and adds are refused
and the market reads halted.
What happens in each gold session
The rules behind that table:
- Every gold position ends by 20:30 UTC on the day its session closes. Its life is the protocol
tenor (
config.params.tMaxSeconds) or the time left until 30 minutes before the close, whichever is shorter. The 30 minutes ismarket.sessionBufferS. The life is frozen onto the position at open;deadlines(position).tenorExpiresAtreads it. - Opens stop 35 minutes before the close. A new position must get at least five minutes of
life, so from 20:25 UTC an open is refused with
SessionEndsBeforeTenorand the market reports closing soon. Open again after 23:00 UTC. - Adds follow the position, not the clock. You can add to a live gold position until its own life ends: the venue judges an add against the position’s remaining life, not against the whole frozen tenor. An add that would outlive the session is not filled: it is returned in full, with cause 6. The SDK’s add gate refuses such an add before you send it.
- From 20:30, a gold position is closed at the market price. When its life has ended, anybody
may mark its end (
mark_expiry), and it is closed at the first price after a short delay from the mark (tenorExpiry). It is paid what it is worth, gain or loss. - A position that is not settled before its session’s close ends at par. A quote signed after
the close never prices a position from the session before. Such a position is closed with no quote (
lastResort): a live position gets its stake back with no exit fee. A position already stamped at a level is paid that level, and a target level pays the exit fee. This close is refused while the oracle is frozen. See the no-price close.
availability()
reports closing soon together with forceCloseAt, the time at which positions on that market
end. Poll it, or read the market’s calendar directly.
Holidays, early closes and pauses
The calendar is the regular weekly schedule. It has no holidays. For a holiday or an early close, the venue can pause gold for that session. The venue can also pause gold at other times. While gold is paused, opens and adds are refused withMarketPaused, and closes
continue. Read market.paused, or the market’s state, and do not assume that the weekly schedule
holds on every date.
The four states
A market is always in exactly one of four states. Branch on the state, not on a singleisOpen
boolean.
Where to go next
Reading gates
Every refusal a market with trading hours can raise, before you send.
Error handling
The refusals by name and code, and whether retrying can ever help.
Opening a position
The transaction shape, and where an availability check belongs in it.
How it works
The product mechanics this page assumes.
