Markets & Asset Classes
The Markets page groups what the agent can see and trade into four tabs:
Crypto · Stocks · Commodities · Prediction Markets (Coming Soon!)
These tabs are views over one pooled vault. Switching tabs never moves capital between strategies, and there is no separate deposit for stocks — the summary strip above the tabs shows the single pool (account value, withdrawable cash, committed margin, unrealised P&L) that every tab draws from.
What each tab means
| Tab | What you see | Can the agent trade it? |
|---|---|---|
| Crypto | Live quotes and 24h movers for the crypto perpetuals on the network the agent trades on | Yes — BTC and ETH today |
| Stocks | Equity perpetuals listed on Hyperliquid HIP-3 builder DEXes, with their activation state | Yes on testnet (Tesla, xyz:TSLA), once activated |
| Commodities | Metals and energy perpetuals listed on the same Hyperliquid HIP-3 builder DEX (gold, silver, WTI crude, copper, natural gas, platinum), with their activation state | Yes on testnet, once activated — entries only while the underlying CME session is open |
| Prediction Markets (Coming Soon!) | Disabled tab | Not yet |
One network indicator
The chip in the top bar shows which Hyperliquid network the agent is on — Testnet or Mainnet — as reported by the API. Every price, candle and position on the site comes from that network. There is no mixing of mainnet quotes with testnet positions, and if the network is unknown the site shows "—" rather than a guess.
The price strip shows what the agent is trading
The thin price strip under the top bar lists exactly the markets the agent reports it is trading right
now (the same list the agent exposes in its status), priced from the Hyperliquid network the API
reports. It is not the governance allowlist and not the full catalog: a market appears there when the
agent has it in its live symbol list, and disappears when the agent stops trading it. The $7N7D token
price is appended from the on-chain pool, or marked "est." when only an estimate is available. If the
network is unknown, the agent is unreachable, or the feed returns no usable quote, the strip says so
instead of going blank.
Display names are not identifiers
A stock card may say "Tesla perpetual", but the agent trades an exact market: coin xyz:TSLA, DEX xyz, network hl-testnet. The catalog the API publishes is the only place that maps a ticker back to that identity; the dashboard never derives it from a label.
What a stock market page shows
- Venue session — is the Hyperliquid market open or delisted, or is its state unknown? (A venue-side halt is surfaced through the New entries line below: the agent stops opening positions and reports why.)
- Underlying session — is the stock market (NASDAQ for Tesla) in its regular session, pre-market, after hours, closed or on holiday?
- Data freshness — how old the venue and reference data are.
- New entries — whether the agent may open a new position right now, and its own reason when it may not (for example, the underlying session is closed or a reference feed is unhealthy). Exits and protective orders are never paused by this.
- Venue chart — actual perpetual candles from Hyperliquid. Where a reference feed is known (e.g. NASDAQ:TSLA) it is shown as a clearly labelled reference chart, never as a stand-in for the perp.
- Position, orders and decisions for this market only, with per-order outcomes (filled, partially filled, rejected with the reason).
Chart history and freshness
The venue chart first requests recent candles. If there are too few points to draw it, the page looks further back on the same Hyperliquid market and network and displays the latest available candles. It never fills gaps with invented prices or a different market's history. If neither request supplies enough candles, the page says so; failed requests show an error with a retry option.
The venue chart shows the last candle's timestamp and closing price. It is marked Historical venue prices when the next expected candle interval has fully elapsed without a newer candle. Refreshing the page does not make an older candle current. The current mark price above the chart can therefore differ from its last candle close, especially on a quiet testnet market.
The separately labelled reference chart is supplied by TradingView for the
underlying instrument, such as NASDAQ:TSLA. It provides context for the venue
perpetual and is independent of the agent's Polygon stock-data subscription.
Stock and volatility reference data
The agent uses external stock data and the VIX index as market context. VIX comes from an actual index observation supplied by Polygon.io (Massive). The agent retains the observation time and the provider's delay status so an older reading is identifiable as stale. Freshness is re-checked from the observation time whenever a reading is used, and a stale reading does not feed the risk regime, position sizing or social posts. Missing or invalid VIX data is reported as unavailable; a missing index entitlement does not prevent otherwise available stock reference data from being retrieved.
What a commodity market page shows
The same page as a stock. The link from a market card carries the exact coin (for example xyz:GOLD),
and the page looks that coin up in the catalog first, so two DEXes listing the same ticker never share a
page; a bare ticker in the address (older links) still resolves inside the commodity class. Two things
differ from a stock page.
There is no external reference feed for commodities: the venue oracle is the settlement reference, so
the page shows the venue quote and states that no external reference feed is known instead of a
reference chart. And the session is
the underlying futures session (CME Globex: Sunday 18:00 ET to Friday 17:00 ET with a daily break from
17:00 to 18:00 ET), not the NYSE session. The perpetual itself trades around the clock, but the oracle
only moves while the underlying trades, so the agent treats the closed hours as a closed market.
Activation is a decision, not a discovery
Seeing a market in the catalog does not mean the agent trades it. A market is tradeable only when it is discovered on the venue, configured for the agent, on the operator's symbol list, approved by governance and activated in the API. Tesla ships inactive; activating it is a deliberate human step.
For developers: market identity in the API
Every market the dashboard shows carries one structured identity, and the same identity is attached to trades, decisions and positions. Nothing is derived from a display label.
| Field | Example | Meaning |
|---|---|---|
marketId | hl-testnet:xyz:TSLA | <network>:<coin> — the only key you should store |
network | TESTNET | the Hyperliquid network the API trades on (TESTNET or MAINNET); the hl- prefix appears only in marketId |
venue | hyperliquid | execution venue |
dex | xyz | builder DEX namespace; empty for native perps |
coin | xyz:TSLA | exact venue coin (case-sensitive) |
displayTicker | TSLA | display only |
assetClass | EQUITY | CRYPTO, EQUITY, COMMODITY, PREDICTION or null when unknown |
collateral | USDC | quote/collateral asset of that market |
REST
| Endpoint | Returns |
|---|---|
GET /api/markets | the catalog: { network, dexes, markets[], count, timestamp }; ?assetClass=EQUITY filters by class, ?activeOnly=true keeps only markets the agent may trade |
GET /api/markets/:marketId | one catalog row (activation is ACTIVE, CATALOG_ONLY or DISABLED) |
GET /api/markets/:marketId/state | venue session, underlying session, data freshness and the agent's own new entries verdict with its reason |
GET /api/markets/:marketId/quote | the market's current mid/mark quote from the API's network |
GET /api/markets/:marketId/candles?interval=1h&limit=100 | venue candles (source: "hyperliquid") |
GET /api/hyperliquid/transfers | standard-mode collateral transfers in flight: { available, enabled, pending[], receivables } — available: false means the agent could not be read, never "no transfers" |
marketId values are URL-encoded (hl-testnet%3Axyz%3ATSLA). An unknown market is a 404; an
unknown assetClass is a 400, never an empty list.
GraphQL
Trade, Decision and ReasoningLog expose marketId, network, venue, dex and
assetClass (the coin and display ticker are looked up in the catalog by marketId). Rows written
before these columns existed are served with an identity derived from their symbol. Position
carries market_id, network, dex, asset_class and display_ticker on the REST
GET /api/v1/agent/positions entries; the performance and statistics types return aggregates only
and are scoped by their filter arguments.
Trades additionally carry the execution outcome: orderStatus (filled, partial, resting,
rejected, unknown), filledAmount (coin units the venue reported), rejectReason and
strategyId. A venue rejection is stored as a trade with orderStatus: "rejected" and
filledAmount: 0, is published on the errorOccurred subscription, and is excluded from
statistics and performance.
tradeHistory, trades, decisions, performance and statistics accept assetClass
(an AssetClass enum value — an invalid value is a validation error) and marketId. Filtering by
the market id also matches rows that predate the identity columns. When the API runs with
USE_BLOCKCHAIN_AS_SOURCE=true, performance, statistics, trades and tradeHistory are served
from on-chain fills and ignore the assetClass/marketId filters; only decisions honours them in
that mode.
SDK and CLI
@7n7d/sdk exposes the same catalog through api.markets() / api.market(marketId) and the
HlNetwork, MarketReference, MarketActivation and MarketQuote types; see the
SDK API reference. Position filters in the SDK are applied client-side on the
identity the API attaches.
Next: AI Trading explains the inputs behind each decision.