openbroker
Open Broker is a Node.js CLI for Hyperliquid perpetual trading that manages wallets, config, orders, and automated strategies. It stores HYPERLIQUID_PRIVATE_KEY in ~/.openbroker/.env, instructs running commands like npm install -g openbroker/npx tsx ..., and calls https://api.hyperliquid.xyz.
Open Broker
Hyperliquid trading CLI. Execute orders, manage positions, and run trading strategies on Hyperliquid DEX.
Installation
npm install -g openbroker
Quick Start
# 1. Setup (generates wallet, creates config, approves builder fee)
openbroker setup
# 2. Fund your wallet with USDC on Arbitrum, then deposit at https://app.hyperliquid.xyz/
# 3. Start trading
openbroker account # View account info
openbroker buy --coin ETH --size 0.1 # Market buy
openbroker search --query GOLD # Find markets
Commands
Setup
openbroker setup # One-command setup (wallet + config + builder approval)
The setup command handles everything automatically:
- Generates a new wallet or accepts your existing private key
- Saves configuration to
~/.openbroker/.env(permissions0600) - Approves the builder fee (required for trading)
Info Commands
account — View Account Info
Show balance, equity, margin, and positions summary.
openbroker account # Balance, equity, margin, positions
openbroker account --orders # Also show open orders
| Flag | Description | Default |
|---|---|---|
--orders | Include open orders in the output | — |
positions — View Positions
Detailed position view with entry/mark prices, PnL, leverage, liquidation distance, and margin used.
openbroker positions # All open positions
openbroker positions --coin ETH # Single position detail
| Flag | Description | Default |
|---|---|---|
--coin | Filter to a single asset | — |
funding — Funding Rates
View funding rates sorted by annualized rate. Highlights high-funding opportunities.
openbroker funding # Top 20 by annualized rate
openbroker funding --top 50 # Top 50
openbroker funding --coin ETH # Single asset
openbroker funding --sort oi # Sort by open interest
| Flag | Description | Default |
|---|---|---|
--top | Number of results to show | 20 |
--coin | Filter to a single asset | — |
--sort | Sort by: annualized, hourly, or oi | annualized |
--all | Show all assets including low OI | — |
markets — Market Data
Market data for perpetuals. Pass --coin for a detailed single-asset view with oracle price, min size, and more.
openbroker markets # Top 30 perps by volume
openbroker markets --coin ETH # Detailed view for ETH
openbroker markets --sort change --top 10 # Top movers
| Flag | Description | Default |
|---|---|---|
--coin | Detailed view for a single asset | — |
--top | Number of results | 30 |
--sort | Sort by: volume, oi, or change | volume |
all-markets — All Markets
Browse all available markets across main perps, HIP-3 perps, and spot — grouped by type.
openbroker all-markets # Everything
openbroker all-markets --type perp # Main perps only
openbroker all-markets --type hip3 # HIP-3 perps only
openbroker all-markets --type spot # Spot only
openbroker all-markets --top 20 # Top 20 by volume
| Flag | Description | Default |
|---|---|---|
--type | Filter: perp, spot, hip3, or all | all |
--top | Limit to top N by volume | — |
--verbose | Show detailed output | — |
search — Search Markets
Search for assets by name across all providers (perps, HIP-3, spot). Shows funding comparison when an asset is listed on multiple venues.
openbroker search --query GOLD # Find all GOLD markets
openbroker search --query ETH --type perp # ETH perps only
openbroker search --query PURR --type spot # PURR spot only
| Flag | Description | Default |
|---|---|---|
--query | Search term (matches coin name) | required |
--type | Filter: perp, spot, hip3, or all | all |
--verbose | Show detailed output | — |
spot — Spot Markets & Balances
openbroker spot # All spot markets
openbroker spot --balances # Your spot token balances
openbroker spot --coin PURR # Filter by coin
openbroker spot --top 20 # Top 20 by volume
| Flag | Description | Default |
|---|---|---|
--balances | Show your spot token balances instead of markets | — |
--coin | Filter by coin symbol | — |
--top | Limit to top N by volume | — |
--verbose | Show token metadata | — |
Trading Commands
buy / sell / market — Market Orders
Execute market orders with slippage protection. buy and sell are shortcuts that set --side automatically.
openbroker buy --coin ETH --size 0.1
openbroker sell --coin BTC --size 0.01
openbroker buy --coin SOL --size 10 --slippage 100 --dry
openbroker buy --coin ETH --size 0.1 --verbose
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade (ETH, BTC, SOL, HYPE, etc.) | required |
--side | Order direction: buy or sell (auto-set by buy/sell command) | required |
--size | Order size in base asset | required |
--slippage | Slippage tolerance in bps (basis points) | 50 (0.5%) |
--reduce | Reduce-only order (won't increase position) | false |
--dry | Preview order details without executing | — |
--verbose | Show full API request/response | — |
limit — Limit Orders
Place a limit order at a specific price. Supports three time-in-force modes.
openbroker limit --coin ETH --side buy --size 1 --price 3000
openbroker limit --coin BTC --side sell --size 0.1 --price 100000 --tif ALO
openbroker limit --coin SOL --side buy --size 10 --price 150 --reduce
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade | required |
--side | buy or sell | required |
--size | Order size in base asset | required |
--price | Limit price | required |
--tif | Time in force: GTC (rest on book), IOC (fill or cancel), ALO (post-only, maker only) | GTC |
--reduce | Reduce-only order | false |
--dry | Preview without executing | — |
trigger — Trigger Orders (Conditional TP/SL)
Place conditional orders that activate when price reaches a trigger level. Used for stop losses, take profits, and conditional entries.
# Take profit: sell HYPE when price rises to $40
openbroker trigger --coin HYPE --side sell --size 0.5 --trigger 40 --type tp
# Stop loss: sell HYPE when price drops to $30
openbroker trigger --coin HYPE --side sell --size 0.5 --trigger 30 --type sl
# Buy stop: buy BTC on breakout above $75k
openbroker trigger --coin BTC --side buy --size 0.01 --trigger 75000 --type sl --reduce false
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade | required |
--side | Order side when triggered: buy or sell | required |
--size | Order size in base asset | required |
--trigger | Trigger price (order activates at this level) | required |
--type | Order type: tp (take profit) or sl (stop loss) | required |
--limit | Custom limit price when triggered (overrides auto-calculation) | auto |
--slippage | Slippage for stop loss limit price in bps | 100 (1%) |
--reduce | Reduce-only order | true |
--dry | Preview without placing | — |
--verbose | Show debug output | — |
Trigger behavior:
- TP: Limit price = trigger price (favorable fill)
- SL: Limit price = trigger ± slippage (ensures fill in fast markets)
tpsl — Set TP/SL on Existing Position
Attach take-profit and/or stop-loss trigger orders to an open position. Supports absolute prices, percentage offsets, and breakeven stops.
openbroker tpsl --coin HYPE --tp 40 --sl 30 # Absolute prices
openbroker tpsl --coin ETH --tp +10% --sl -5% # Percentage from entry
openbroker tpsl --coin HYPE --tp +10% --sl entry # Breakeven stop
openbroker tpsl --coin ETH --sl -5% # Stop loss only
openbroker tpsl --coin ETH --tp 4000 --sl 3500 --size 0.5 # Partial position
| Flag | Description | Default |
|---|---|---|
--coin | Asset with an open position | required |
--tp | Take profit price: absolute (40), percentage (+10%), or entry | — |
--sl | Stop loss price: absolute (30), percentage (-5%), or entry | — |
--size | Size to protect (for partial TP/SL) | full position |
--sl-slippage | Stop loss slippage buffer in bps | 100 (1%) |
--dry | Preview orders without placing | — |
--verbose | Show debug output | — |
Shows risk/reward ratio and potential profit/loss before placing.
cancel — Cancel Orders
openbroker cancel --all # Cancel all open orders
openbroker cancel --coin ETH # Cancel all ETH orders
openbroker cancel --coin ETH --oid 123456 # Cancel specific order
openbroker cancel --all --dry # Preview what would be cancelled
| Flag | Description | Default |
|---|---|---|
--coin | Cancel orders for a specific coin only | — |
--oid | Cancel a specific order by ID | — |
--all | Cancel all open orders | — |
--dry | Show orders without cancelling | — |
Advanced Execution
twap — Time-Weighted Average Price
Split a large order into smaller slices executed at regular intervals to minimize market impact.
# Buy 1 ETH over 1 hour (auto ~12 slices)
openbroker twap --coin ETH --side buy --size 1 --duration 3600
# Sell 0.5 BTC over 30 min, 6 slices, randomized timing
openbroker twap --coin BTC --side sell --size 0.5 --duration 1800 --intervals 6 --randomize 20
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade | required |
--side | buy or sell | required |
--size | Total order size in base asset | required |
--duration | Total execution time in seconds | required |
--intervals | Number of slices | 1 per 5 min |
--randomize | Randomize timing by ±X percent | 0 |
--slippage | Slippage per slice in bps | 50 |
--dry | Show execution plan without trading | — |
--verbose | Show debug output | — |
Reports VWAP, actual slippage, fill rate, and total execution time.
scale — Scale In/Out
Place a grid of limit orders to scale into or out of a position. Three distribution modes control how size is allocated across price levels.
openbroker scale --coin ETH --side buy --size 1 --levels 5 --range 2
openbroker scale --coin ETH --side buy --size 2 --levels 8 --range 5 --distribution exponential
openbroker scale --coin BTC --side sell --size 0.5 --levels 4 --range 3 --reduce
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade | required |
--side | buy or sell | required |
--size | Total order size in base asset | required |
--levels | Number of price levels (orders) | required |
--range | Price range from current mid in % | required |
--distribution | Size distribution: linear (more at better prices), exponential (much more), flat (equal) | linear |
--tif | Time in force: GTC or ALO | GTC |
--reduce | Reduce-only orders (for scaling out) | false |
--dry | Show order grid without placing | — |
--verbose | Show debug output | — |
bracket — Bracket Order (Entry + TP + SL)
Complete trade setup in one command. Supports market or limit entry with automatic take-profit and stop-loss trigger orders.
openbroker bracket --coin ETH --side buy --size 0.5 --tp 3 --sl 1.5
openbroker bracket --coin BTC --side sell --size 0.1 --entry limit --price 100000 --tp 5 --sl 2
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade | required |
--side | Entry direction: buy (long) or sell (short) | required |
--size | Position size in base asset | required |
--tp | Take profit distance in % from entry | required |
--sl | Stop loss distance in % from entry | required |
--entry | Entry type: market or limit | market |
--price | Entry price (required if --entry limit) | — |
--slippage | Slippage for market entry in bps | 50 |
--dry | Show bracket plan without executing | — |
--verbose | Show debug output | — |
Executes in 3 steps: Entry → TP trigger → SL trigger. Shows risk/reward ratio and potential profit/loss.
chase — Chase Order
Follow the price with ALO (post-only) limit orders to get maker fills and avoid taker fees.
openbroker chase --coin ETH --side buy --size 0.5
openbroker chase --coin SOL --side buy --size 10 --offset 1 --timeout 60 --max-chase 50
openbroker chase --coin BTC --side sell --size 0.1 --offset 2 --timeout 600
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade | required |
--side | buy or sell | required |
--size | Order size in base asset | required |
--offset | Offset from mid price in bps | 5 (0.05%) |
--timeout | Max time to chase in seconds | 300 (5 min) |
--interval | Price check / order update interval in ms | 2000 |
--max-chase | Max price to chase to in bps from start | 100 (1%) |
--reduce | Reduce-only order | — |
--dry | Show chase parameters without executing | — |
--verbose | Show debug output | — |
Uses ALO orders exclusively, guaranteeing maker rebates. Stops when filled, timed out, or max chase reached.
Strategies
funding-arb — Funding Arbitrage
Collect funding payments by taking positions opposite to the majority. Monitors funding continuously and auto-closes when rates drop.
openbroker funding-arb --coin ETH --size 5000 --min-funding 25
openbroker funding-arb --coin BTC --size 10000 --duration 24 --check 30
openbroker funding-arb --coin ETH --size 5000 --dry
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade | required |
--size | Position size in USD notional | required |
--min-funding | Minimum annualized funding rate to enter (%) | 20 |
--max-funding | Maximum rate — avoid extreme/squeeze risk (%) | 200 |
--duration | How long to run in hours | ∞ |
--check | Funding check interval in minutes | 60 |
--close-at | Close position when funding drops below X% | 5 |
--mode | perp (directional) or hedge (delta neutral — not yet implemented) | perp |
--dry | Show opportunity analysis without trading | — |
--verbose | Show debug output | — |
Note: Hyperliquid funding is paid hourly (not 8h like CEXs). Annualized = hourly × 8,760.
grid — Grid Trading
Automatically buy low and sell high within a price range. Replaces filled orders on the opposite side.
openbroker grid --coin ETH --lower 3000 --upper 4000 --grids 10 --size 0.1
openbroker grid --coin BTC --lower 90000 --upper 100000 --grids 5 --size 0.01 --mode long
| Flag | Description | Default |
|---|---|---|
--coin | Asset to trade | required |
--lower | Lower bound of grid (price) | required |
--upper | Upper bound of grid (price) | required |
--grids | Number of grid levels | 10 |
--size | Size per grid level in base asset | — |
--total-size | OR total size to distribute across grids | — |
--mode | neutral (buy+sell), long (buys only), short (sells only) | neutral |
--refresh | Rebalance check interval in seconds | 60 |
--duration | How long to run in hours | ∞ |
--dry | Show grid plan without placing orders | — |
--verbose | Show debug output | — |
Handles graceful shutdown (Ctrl+C) — cancels all grid orders and prints PnL summary.
dca — Dollar Cost Averaging
Accumulate a position over time with regular purchases at fixed USD amounts.
openbroker dca --coin ETH --amount 100 --interval 1h --count 24
openbroker dca --coin BTC --total 5000 --interval 1d --count 30
| Flag | Description | Default |
|---|---|---|
--coin | Asset to accumulate | required |
--amount | USD amount per purchase | — |
--total | OR total USD to invest (calculates per-purchase) | — |
--interval | Time between purchases: Xm, Xh, Xd, Xw | required |
--count | Number of purchases to make | required |
--slippage | Slippage tolerance in bps | 50 |
--dry | Show DCA plan and schedule without executing | — |
--verbose | Show debug output | — |
Reports running average price, total acquired, and unrealized PnL after completion.
mm-maker — Market Making (ALO / Maker-Only)
Provide liquidity using ALO (Add Liquidity Only) orders that are rejected if they would cross the spread. Guarantees you always earn the maker rebate (~0.3 bps). Reads the actual order book for pricing.
openbroker mm-maker --coin HYPE --size 1 --offset 1
openbroker mm-maker --coin ETH --size 0.1 --offset 2 --max-position 0.5
| Flag | Description | Default |
|---|---|---|
--coin | Asset to market make | required |
--size | Order size on each side (base asset) | required |
--offset | Offset from best bid/ask in bps | 1 |
--max-position | Max net position before stopping that side | 3× size |
--skew-factor | How aggressively to skew for inventory | 2.0 |
--refresh | Refresh interval in milliseconds | 2000 |
--duration | How long to run in minutes | ∞ |
--dry | Show setup without trading | — |
--verbose | Show debug output | — |
Fee structure: Taker ~2.5 bps (you pay), Maker ~0.3 bps (you earn). ALO-only = always earn.
mm-spread — Market Making (Spread-Based)
Place bid/ask quotes around the mid price, earning the spread when both sides fill. Includes inventory skewing and cooldown after fills.
openbroker mm-spread --coin ETH --size 0.1 --spread 10
openbroker mm-spread --coin BTC --size 0.01 --spread 5 --max-position 0.03 --cooldown 3000
| Flag | Description | Default |
|---|---|---|
--coin | Asset to market make | required |
--size | Order size on each side (base asset) | required |
--spread | Total spread width in bps from mid | required |
--skew-factor | How aggressively to skew for inventory | 2.0 |
--max-position | Maximum net position | 3× size |
--cooldown | Cooldown after fill before same-side requote (ms) | 5000 |
--refresh | Refresh interval in milliseconds | 2000 |
--duration | How long to run in minutes | ∞ |
--dry | Show strategy parameters without trading | — |
--verbose | Show debug output | — |
Inventory management: When LONG → bid wider, ask tighter. When SHORT → bid tighter, ask wider. At max position → stops quoting that side.
Global Options
| Flag | Description |
|---|---|
--help, -h | Show help for a command |
--dry | Preview without executing (all trading/strategy commands) |
--verbose | Show debug output including API requests/responses |
--version, -v | Print the CLI version |
Safety
Always use --dry first to preview any operation:
openbroker buy --coin ETH --size 0.1 --dry
Use testnet for testing:
export HYPERLIQUID_NETWORK="testnet"
Configuration
Config is loaded from these locations (in order of priority):
- Environment variables
.envfile in current directory~/.openbroker/.env(global config)
Run openbroker setup to create the global config, or set environment variables:
export HYPERLIQUID_PRIVATE_KEY=0x... # Required: wallet private key
export HYPERLIQUID_NETWORK=mainnet # Optional: mainnet (default) or testnet
export HYPERLIQUID_ACCOUNT_ADDRESS=0x... # Optional: for API wallets
API Wallet Setup
For automated trading, use an API wallet:
export HYPERLIQUID_PRIVATE_KEY="0x..." # API wallet private key
export HYPERLIQUID_ACCOUNT_ADDRESS="0x..." # Main account address
Note: Builder fee must be approved with the main wallet first. Sub-accounts cannot approve builder fees. After approval, you can switch to using the API wallet for trading.
Builder Fee
Open Broker charges 1 bps (0.01%) per trade to fund development. The builder fee is automatically approved during openbroker setup.
openbroker approve-builder --check # Check approval status
openbroker approve-builder # Retry approval if needed
openbroker approve-builder --max-fee "0.05%" # Custom max fee
| Flag | Description | Default |
|---|---|---|
--check | Only check current approval status, don't approve | — |
--max-fee | Maximum fee rate to approve | 0.1% |
--builder | Custom builder address (advanced) | Open Broker |
--verbose | Show debug output | — |
Development
For local development without global install:
git clone https://github.com/monemetrics/openbroker.git
cd openbroker
npm install
npx tsx scripts/info/account.ts
License
MIT