取引 API と SDK · SDK の準備と認証 · 1/8
Python SDK の導入
概要
hyperliquid-python-sdk は、Hyperliquid の取引所を操作するための公式の Python SDK です(ソース)。HTTP の API(読み取りは POST /info、署名付きの操作は POST /exchange)と WebSocket の配信をまとめて扱います。リクエストの署名と nonce も SDK が受け持ちます。このコースのコードは SDK v0.24.0(2026年10月)に合わせています。Python 3.9 以上が必要です。
インストール
pip install hyperliquid-python-sdk
仮想環境を使う場合(おすすめです):
python -m venv venv
source venv/bin/activate # Linux/Mac
pip install hyperliquid-python-sdk
中心になるクラス
SDK の中心は Info と Exchange の2つのクラスです。WebSocket の配信も Info から使います。
1. Info: 読み取り専用のデータ
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(base_url=constants.MAINNET_API_URL, skip_ws=True) # skip_ws=True: REST only
Info クラスで読み取れるものは次のとおりです。
- 市場データ(価格、板、ローソク足)
- 口座のデータ(残高、ポジション、未約定の注文)
- 資金調達率とオラクル価格
- 過去の売買と約定
2. Exchange: 取引の操作
import os
import eth_account
from hyperliquid.exchange import Exchange
from hyperliquid.utils import constants
wallet = eth_account.Account.from_key(os.environ["HL_PRIVATE_KEY"]) # never hardcode keys
exchange = Exchange(wallet, base_url=constants.TESTNET_API_URL) # testnet while learning
Exchange クラスは、署名が要る操作を受け持ちます。
- 注文を出す、取り消す
- 注文を変更する
- レバレッジを設定する
- 資金を移す
3. WebSocket: リアルタイムのデータ
WebSocket 専用のクラスはありません。skip_ws=True を渡さなければ、Info が wss://api.hyperliquid.xyz/ws(base_url から決まります)に接続します。購読はコールバックで行います。
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(base_url=constants.MAINNET_API_URL)
info.subscribe({"type": "allMids"}, print)
テストネットとメインネット
開発は必ずテストネットから始めます。
| 環境 | API の URL | WebSocket の URL |
|---|---|---|
| メインネット | https://api.hyperliquid.xyz | wss://api.hyperliquid.xyz/ws |
| テストネット | https://api.hyperliquid-testnet.xyz | wss://api.hyperliquid-testnet.xyz/ws |
認証
Hyperliquid では、取引所が発行する API キーの代わりに Ethereum 方式の署名 を使います。/exchange へのリクエストは、どれも秘密鍵で署名します。つまり次のようになります。
- 鍵は自分で管理します
- 読み取り(
/info)には署名がまったく要りません - bot には API wallet(agent wallet とも呼びます)を使うのがおすすめです。メインの口座が承認した別の鍵で、口座の代わりに署名します。API wallet の鍵で
Exchangeを作るときは、メインの口座のアドレスをaccount_addressに渡します。口座のデータを問い合わせるときも、API wallet ではなく必ずメインのアドレスを使います(資料)
import eth_account
# From private key
wallet = eth_account.Account.from_key("0x...")
# Your address
print(wallet.address) # 0x...
安全上の注意: 秘密鍵をコードに直接書かないでください。環境変数か、秘密情報の管理サービスを使います。