Skip to main content

Module hyperliquid

Module hyperliquid 

Source
Expand description

Hyperliquid ExecutionClient implementations for perpetual futures and spot trading.

Uses the official hyperliquid_rust_sdk crate for REST and WebSocket API access. Gated behind the “hyperliquid” feature flag.

§Modules

§Authentication

Hyperliquid uses EVM-based authentication (Ethereum private key + EIP-712 signatures) instead of traditional API key/secret. The SDK handles all signing internally.

§Architecture

  • REST (InfoClient): account_snapshot, fetch_balances, fetch_open_orders, fetch_trades
  • REST (ExchangeClient): open_order, cancel_order
  • WebSocket (InfoClient with with_reconnect): account_stream via UserFills + OrderUpdates subscriptions

§SDK Delegation Model

This client delegates connection management to the official hyperliquid_rust_sdk:

ResponsibilityImplementation
ReconnectionInfoClient::with_reconnect() handles WebSocket reconnection automatically
HeartbeatSDK manages WebSocket ping/pong internally
DeduplicationSDK-managed; no custom dedup cache needed
Fill recoveryNot implemented — use ExecutionClient::fetch_trades after reconnect if needed

Caller responsibilities:

  • If fill recovery is critical, monitor for reconnection events and call fetch_trades()
  • REST clients (InfoClient::new(), ExchangeClient::new()) do NOT auto-reconnect; only WebSocket streams via with_reconnect() do

§Conditional Orders (Stop, TakeProfit)

Hyperliquid supports conditional (trigger) orders via the ClientOrder::Trigger variant.

Supported order kinds:

  • Stop → market order triggered at stop price (tpsl: "sl", is_market: true)
  • StopLimit → limit order triggered at stop price (tpsl: "sl", is_market: false)
  • TakeProfit → market order triggered at take-profit price (tpsl: "tp", is_market: true)
  • TakeProfitLimit → limit order triggered at take-profit price (tpsl: "tp", is_market: false)

Unsupported: TrailingStop, TrailingStopLimit (Hyperliquid does not support trailing stops)

UUID requirement: Trigger orders MUST use ClientOrderId::uuid() for the client order ID. The SDK’s cancel_by_cloid() requires a valid UUID. Non-UUID client IDs will be rejected at order placement with a clear error message.

SDK limitations (hyperliquid_rust_sdk 0.6.x):

  • fetch_open_orders: Returns OpenOrdersResponse which lacks trigger fields (is_trigger, trigger_px). All orders appear as OrderKind::Limit.
  • account_stream (WebSocket): OrderUpdate uses BasicOrder which also lacks trigger fields. Downstream consumers should correlate orders by cloid and track OrderKind from the placement response.

§Limitations

  • Price precision: Hyperliquid requires 5 significant figures for prices

Re-exports§

pub use config::HyperliquidConfig;
pub use config::HyperliquidConfigError;

Modules§

common
Shared utilities for Hyperliquid execution clients (perps and spot).
config
Configuration for the Hyperliquid execution client.
error
Error mapping for Hyperliquid SDK errors to rustrade-execution error types.
spot
Hyperliquid spot trading ExecutionClient implementation.

Structs§

HyperliquidClient
Hyperliquid perpetual futures execution client.