Loading...
Loading...
Configure and run an automated grid trading bot on Hyperliquid DEX with TypeScript/Node.js, supporting perpetuals and spot markets with risk management.
npx skill4agent add aradotso/trending-skills hyperliquid-grid-trading-botSkill by ara.so — Daily 2026 Skills collection.
git clone https://github.com/PolyPulse-Analytics/hyperliquid-trading-bot.git
cd hyperliquid-trading-bot
npm installgitcp .env.example .env.env# Testnet (recommended for development)
HYPERLIQUID_TESTNET_PRIVATE_KEY=0xyour_testnet_private_key_here
HYPERLIQUID_TESTNET=true
# Mainnet (real funds — use with caution)
# HYPERLIQUID_MAINNET_PRIVATE_KEY=0xyour_mainnet_private_key_here
# HYPERLIQUID_TESTNET=falseNever commitor share your private key. Use a dedicated testnet wallet when experimenting..env
| Command | Purpose |
|---|---|
| Run bot using first |
| Validate selected YAML config (no key required) |
| Run automated tests (grid math, etc.) |
| TypeScript type check |
| Run with explicit config file |
# Validate before running live
npm run validate
# Start with auto-discovered active config
npm start
# Start with explicit config
npx tsx ts/src/runBot.ts bots/btc_conservative.yamlbots/*.yamlactive: true# bots/my_strategy.yaml
name: "btc_grid_v1"
active: true
exchange:
type: "hyperliquid"
testnet: true # Override with HYPERLIQUID_TESTNET env var
account:
max_allocation_pct: 10.0 # Use at most 10% of account balance
grid:
symbol: "BTC" # Perpetual symbol on Hyperliquid
levels: 10 # Number of grid levels (buy + sell orders)
price_range:
mode: "auto" # "auto" or "manual"
auto:
range_pct: 5.0 # ±5% around current price
# manual:
# lower: 90000
# upper: 100000
order_size_usd: 50.0 # Size per grid level in USD
risk_management:
stop_loss_enabled: false
stop_loss_pct: 10.0 # Trigger if price drops X% below entry
take_profit_enabled: false
take_profit_pct: 20.0 # Trigger if profit exceeds X%
max_drawdown_pct: 15.0 # Cancel/pause if drawdown exceeds this
max_position_size_pct: 40.0 # Max % of allocation in open position
rebalance:
enabled: true
price_move_threshold_pct: 12.0 # Rebalance grid if price moves this far
monitoring:
log_level: "INFO" # DEBUG | INFO | WARN | ERROR# bots/btc_conservative.yaml
name: "btc_conservative"
active: true
exchange:
type: "hyperliquid"
testnet: true
account:
max_allocation_pct: 5.0
grid:
symbol: "BTC"
levels: 8
price_range:
mode: "auto"
auto:
range_pct: 3.0
order_size_usd: 25.0
risk_management:
stop_loss_enabled: true
stop_loss_pct: 8.0
take_profit_enabled: false
max_drawdown_pct: 10.0
max_position_size_pct: 30.0
rebalance:
enabled: true
price_move_threshold_pct: 10.0
monitoring:
log_level: "INFO"# Sync Python dependencies
uv sync
# Validate Python bot config
uv run src/run_bot.py --validate
# Run Python bot
uv run src/run_bot.py# Real-time price feed via WebSocket
uv run learning_examples/01_websockets/realtime_prices.py
# Fetch all market prices
uv run learning_examples/02_market_data/get_all_prices.py
# Place a limit order
uv run learning_examples/04_trading/place_limit_order.pyactive: true# Run ETH strategy explicitly
npx tsx ts/src/runBot.ts bots/eth_aggressive.yaml
# In a separate terminal, run BTC strategy
npx tsx ts/src/runBot.ts bots/btc_conservative.yaml# Force testnet via env (overrides YAML)
HYPERLIQUID_TESTNET=true npm start
# Mainnet — verify YAML also has testnet: false
HYPERLIQUID_TESTNET=false npx tsx ts/src/runBot.ts bots/btc_live.yamlnpm start 2>&1 | tee bot.log
# After Ctrl+C:
grep -i "cancel" bot.lognpm run validate
# or explicitly:
npx tsx ts/src/validateConfig.ts bots/my_strategy.yamllevelsprice_upper = current_price * (1 + range_pct / 100)
price_lower = current_price * (1 - range_pct / 100)
step = (price_upper - price_lower) / levels
# Buy orders placed at: price_lower, price_lower + step, ..., current_price
# Sell orders placed at: current_price, current_price + step, ..., price_uppernpm run validate.envHYPERLIQUID_TESTNETexchange.testnetbots/*.yamlactive: truenpx tsx ts/src/runBot.ts bots/myconfig.yamlgrep -i "cancel\|error" bot.logmax_allocation_pctorder_size_usdnpx tsc --noEmit # Shows all type errors without compiling
npm test # Runs unit tests to catch logic issuesuv# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# or
pip install uvhyperliquid-trading-bot/
├── bots/ # YAML strategy configs
│ └── btc_conservative.yaml
├── ts/src/ # TypeScript source (primary)
│ ├── runBot.ts # Main entrypoint
│ └── validateConfig.ts # Config validator
├── src/ # Python legacy bot
│ └── run_bot.py
├── learning_examples/ # Educational Python scripts
│ ├── 01_websockets/
│ ├── 02_market_data/
│ └── 04_trading/
├── .env.example # Environment variable template
├── package.json
└── pyproject.toml # Python deps (uv)HYPERLIQUID_TESTNET=trueorder_size_usdmax_drawdown_pctnpm run validate.env