要点。面は 3 つ:POST /info(読み取り、キー不要)、POST /exchange(署名付きの書き込み)、wss://api.hyperliquid.xyz/ws(配信)。取引所型の API キーはなく、API ウォレットの秘密鍵で署名します。取引はできても出金はできません。上限は IP ごとに REST 毎分ウェイト 1,200。費用はガス代ゼロ・月額ゼロで、約定時のテイカー 0.045%/メイカー 0.015% だけ。まずテストネットで pip install hyperliquid-python-sdk から始めましょう。相場データはキー不要で、建玉と資金調達率は metaAndAssetCtxs、ローソク足(OHLCV)は candleSnapshot で取れます。約定・板・清算・現物を含む 7 種類のリクエストとウェイトはエンドポイント早見表に、各エンドポイントに残っている履歴は表にまとめました。過去データの取り方(時間足ごとの遡れる期間、S3 アーカイブ、有料プロバイダー)は英語の Hyperliquid historical data ガイドで詳しく扱っています。
Hyperliquid 公式ドキュメントの地図
公式ドキュメントは GitBook の hyperliquid.gitbook.io/hyperliquid-docs にまとまっていて、英語のみです。API のページは For developers の下にあります。最上位の全セクションと内容の一覧で、セクション名がリンクです(索引は 2026年10月19日に再確認。どのページも URL 末尾に .md を付けると Markdown になり、全ページの一覧は llms.txt):
| セクション | 内容 |
|---|---|
| About(概要) | Hyperliquid とは何か、コア開発者 |
| Onboarding(始め方) | 取引の始め方、HyperEVM のウォレット設定、HYPE のステーキング、メールウォレットの書き出し、テストネットのフォーセット |
| HyperCore | クリアリングハウス(証拠金・ポジション管理)、オラクル、板、ステーキング、ボルト、マルチシグ、API サーバー |
| HyperEVM(利用者向け) | HyperEVM の概要、HyperEVM 開発者向けツール |
| HIPs | HIP-1 トークン、HIP-2 Hyperliquidity、HIP-3 ビルダーデプロイ型無期限、HIP-4 アウトカム市場 |
| Trading(取引) | 手数料、サブアカウント、ビルダーコード、証拠金、清算、資金調達率、注文タイプ、TP/SL |
| Validators | バリデーターの運用、デリゲーションプログラム |
| Referrals(紹介) | 紹介コードと報酬:コードを使うと最初の 2,500万ドル 分の手数料が 4% 引き(マスターアカウントのみ。サブアカウントとボルトは対象外) |
| Points・Audits・Bug bounty | 終了済みのポイントプログラム、監査レポート、バグバウンティ |
| API(概要) | SDK へのリンク(公式 Python、コミュニティ製 Rust/TypeScript)、表記ルール |
| Info endpoint | 読み取りの全種類:中値、板、ローソク足、約定、注文、手数料、ボルト、ステーキング(perps/spot の下位ページあり) |
| Exchange endpoint | 発注、取消、変更、レバレッジ、TWAP、scheduleCancel、approveAgent、送金 |
| WebSocket | 購読、ソケット経由のリクエスト、タイムアウトとハートビート |
| Nonces and API wallets | API(エージェント)ウォレットが署名できる範囲、ノンスのルール、削除、ボットの設計 |
| Signing・Error responses | 2 種類の署名方式と、署名ミスで返るエラー |
| Rate limits and user limits | IP ごとのウェイト上限、WebSocket の上限、アドレス単位のアクション上限、未約定注文数の上限 |
| Asset IDs・Tick and lot size | 整数のアセット ID、有効数字 5 桁、szDecimals での丸め |
| Optimizing latency・Priority fees | 低遅延化の助言、高速キャンセル、優先手数料 |
| HyperEVM(開発者向け) | JSON-RPC、デュアルブロック構成、コントラクトから HyperCore を読む方法、送金 |
| Nodes | 非バリデーターノードの運用、L1 データのスキーマ |
| Historical data | S3 アーカイブ:L2 板スナップショット、アセット情報、約定、ノードデータ |
| Builder tools | コミュニティ製の HyperCore/HyperEVM ツール |
| Support | サポートガイドと FAQ:入出金、清算、API の質問など |
GitBook の外にあるもの:API ウォレット(=API キー)の発行は app.hyperliquid.xyz/API、公式 Python SDK(GitHub)と PyPI(v0.24.0)、メインネット入金済みのアドレスに 1,000 USDC のテスト用 USDC を配るテストネットのフォーセット、質問は Discord の #api-traders、API の告知は t.me/hyperliquid_api。
ボット用の口座をこれから作るなら。入金の前に紹介コード HOLYGRAIL で登録すると、最初の 2,500万ドル 分の取引手数料が 4% 引きになります(API 経由の注文も対象)。コード付きで Hyperliquid を開く →
1. Hyperliquid API とは — CEX の API と何が違うか
Binance や Bybit では API キーを作って取引権限だけを付け、HMAC シークレットでリクエストに署名します。Hyperliquid の板は独自 L1 上にあるため、注文・取消・変更はすべて EVM 秘密鍵で署名された「アクション」です。API サーバーは署名済みアクションをノードへ転送し、HyperBFT コンセンサスがブロックに確定させ、返ってくる HTTP レスポンスは確定したブロックでの実行結果です。一方、状態はすべて公開されているので、読み取り(info エンドポイントと WebSocket の全ストリーム)は認証なし — アドレスを渡せばその口座のデータが返ります。
チェーンには実行レイヤーが 2 つあり、一般に「Hyperliquid API」と言えば前者を指します。
| HyperCore API | HyperEVM | |
|---|---|---|
| 中身 | 板取引そのもの:無期限・現物・証拠金・ボルト・ステーキング・送金 | EVM スマートコントラクト。ガス代は HYPE |
| つなぎ方 | POST /info、POST /exchange、WebSocket /ws | 標準の Ethereum JSON-RPC(eth_call、eth_sendRawTransaction など) |
| 認証 | ウォレットまたは API ウォレットによる EIP-712 署名 | 通常の EVM トランザクション署名 |
| 公開エンドポイントの上限 | IP ごとに毎分ウェイト 1,200 | IP ごとに毎分 100 リクエスト。WebSocket の JSON-RPC はなし |
| 向いている用途 | 取引ボット、相場データ、口座監視 | DeFi コントラクト、EVM 上のトークン残高、プリコンパイル経由の HyperCore 読み取り |
ネットワーク別の接続先(テストネットはホスト名が違うだけで仕様は同じ):
| 項目 | メインネット | テストネット |
|---|---|---|
| REST(info+exchange) | https://api.hyperliquid.xyz | https://api.hyperliquid-testnet.xyz |
| WebSocket | wss://api.hyperliquid.xyz/ws | wss://api.hyperliquid-testnet.xyz/ws |
| HyperEVM JSON-RPC | https://rpc.hyperliquid.xyz/evm | https://rpc.hyperliquid-testnet.xyz/evm |
| HyperEVM チェーン ID | 999 | 998 |
| Web アプリ(API ウォレット) | app.hyperliquid.xyz/API | app.hyperliquid-testnet.xyz/API |
| Python SDK の定数 | constants.MAINNET_API_URL | constants.TESTNET_API_URL |
| hyperliquidChain(ユーザー署名) | "Mainnet" | "Testnet" |
CEX からボットを移植する人にとっての要点は 3 つ。(1) ガス代なし — 濫用は手数料ではなくレート制限で抑えられる。(2) シーケンス番号の代わりにノンス — 各アクションはミリ秒タイムスタンプを持ち、Hyperliquid は署名者ごとに上位 100 個を保持。新しいノンスはその最小値より大きく、ブロック時刻の 2日前〜1日後の範囲に収める必要がある。(3) 署名方式が 2 種類 — 取引アクションと、出金やエージェント承認などの「ユーザー署名」アクションで方式が違う(後述)。だからドキュメントは署名を自作せず SDK を使うよう勧めています。
2. Hyperliquid API ドキュメントの読み方と SDK
API の索引ページ(上の地図の「API(概要)」)は SDK へのリンクが並ぶだけで、スキーマは配下のページにあります。チュートリアルではなくリファレンスなので、最初のボットなら次の順で読むのが近道です:Nonces and API wallets(鍵で何ができるか)→ Info endpoint(読み取り)→ Exchange endpoint(発注・取消)→ WebSocket → Subscriptions → ループを短くする前に Rate limits and user limits。Signing と Error responses は SDK を使わない場合だけ必要です。英語が読みにくければ、URL 末尾に .md を付けた Markdown 版を翻訳ツールや LLM に渡すのが手軽です。
ドキュメントが案内している SDK(2026年9月26日確認、Python 版のバージョンは 2026年10月19日に再確認):
| 言語 | パッケージ | 提供元 | インストール |
|---|---|---|---|
| Python | hyperliquid-python-sdk | Hyperliquid 公式 | pip install hyperliquid-python-sdk |
| Rust | hypersdk | Infinite Field(コミュニティ製、公式ドキュメントからリンク) | cargo add hypersdk |
| TypeScript | @nktkas/hyperliquid | nktkas(コミュニティ製、公式ドキュメントからリンク) | npm i @nktkas/hyperliquid |
| TypeScript | hyperliquid | nomeida(コミュニティ製、公式ドキュメントからリンク) | npm i hyperliquid |
| Python・JS/TS・PHP・C#・Go ほか | ccxt | CCXT(複数取引所の共通 API) | pip install ccxt |
ドキュメントのもう半分は hyperliquid-python-sdk のリポジトリです。examples/ に指値・成行・取消・エージェント・サブアカウント・ボルト・TWAP・scheduleCancel・WebSocket のサンプルがあり、その署名コードが他のあらゆる実装の基準になっています。ボット基盤も同じ API を使っていて、Hummingbot の現物・無期限コネクタも、CCXT と同じくメインウォレットのアドレスと API ウォレットの秘密鍵の組み合わせで接続します。
3. 手順 1:Hyperliquid の API キー(API ウォレット)を発行する
ガイドやボット基盤が「Hyperliquid の API キー」と呼ぶものは、API ウォレット(ドキュメントではエージェントウォレットとも)の秘密鍵のことです。入金済みの(マスター)アカウントが「自分の代わりに取引アクションへ署名してよい」と承認した別の鍵ペアで、資金を持たず、資金を外へ動かすこともできません。設定は 2 分ほどです。
- まだ口座がないなら、API ウォレットを作る前に紹介コード
HOLYGRAILで口座を作る。紹介コードは取引量が 10,000ドル を超えると入力できず、ボットはすぐに超えてしまいます。登録すると最初の 2,500万ドル 分の約定手数料が 4% 引き(マスターアカウントの約定なら API 注文も対象。サブアカウントとボルトは対象外)。自己管理型ウォレットを接続して HOLYGRAIL 付きで Hyperliquid を開き、それからこの手順に戻ってください。仕組みと、先に登録すべき理由はハイパーリキッドの紹介コードで解説しています。 - 先にマスターアカウントへ入金する。app.hyperliquid.xyz でウォレット(またはメールログイン)を接続し、Enable Trading をクリックして入金します。登録元の口座に資金がなくなると API ウォレットは削除されるため、空の口座はボットの土台になりません。
- app.hyperliquid.xyz/API を開く(上部メニューの More → API)。
- ウォレットに名前を付け(例:
bot-btc-mm)、Generate をクリック。新しいアドレスと秘密鍵が表示されます。秘密鍵は今すぐパスワードマネージャー等へ — 表示されるのはこの一度きりです。 - 有効期間を選ぶ。最長 180日。実験用なら 30 日にしておきます。
- Authorize をクリックし、マスターウォレットで
approveAgentメッセージに署名。ガス代はかかりません。 - マスターアドレスを控える(右上、Deposit の隣のメニュー)。ボットには両方が必要です:署名用のエージェント秘密鍵と、照会用のマスターアドレス。

Nonces and API wallets と Exchange endpoint のページにある規則のうち、実務で効いてくるもの:
- 1 アカウントにつき 無名 1 つ+名前付き最大 3 つ、さらにサブアカウントごとに名前付き 2 つ。新しい無名エージェントを承認すると古いものは解除され、同名の名前付きエージェントを承認すると置き換わります。
- API ウォレットは署名専用。出金、他アドレスへの USDC 送金、別エージェントの承認はマスター鍵が必要なユーザー署名アクションです。唯一のエージェント用振替
agentSendAssetも、自分の無期限残高と現物残高の間しか動かせません。 - 照会は必ずマスターアドレスで。エージェントのアドレスで照会すると空の結果が返ります — ドキュメントが「よくある落とし穴」と書いているものです。
- 解除済みのエージェントアドレスを再利用しない。ノンス集合が削除されている可能性があり、過去に署名したアクションがリプレイされ得ます。毎回新しい鍵を生成してください。
- 取引プロセスごとに 1 エージェント。ノンスは署名者単位で管理されるため、1 つのエージェントで 2 つのサブアカウントに署名すると同じノンス集合を共有して衝突します。
サブアカウントごとの設定はエージェントウォレット設定ガイドで解説しています。SDK の exchange.approve_agent() で、マスター鍵を持つマシンからプログラム的に承認することもできます。本番資金なしで練習するなら、フォーセットとテストネット用 API ウォレットの作り方をHyperliquid テストネットガイドにまとめています。
API キーのセキュリティ:漏洩したら何が起きるか、どう守るか
Hyperliquid の API ウォレットには、CEX の API キーにある権限チェックボックス・出金トグル・IP 許可リスト・銘柄やサイズのスコープがありません。境界はプロトコルで固定されていて、エージェントは出金・他アドレスへの送金・HyperEVM へのブリッジ・ステーキング・新しいエージェントの承認・紹介コードやビルダー手数料の承認変更ができません(公式 SDK のサンプルも「エージェントには資金を送金・出金する権限がない」と明記)。ただし口座内の取引はすべてできるので、鍵が漏れれば資金は失われ得ます。
- 取引で残高を溶かす:最大レバレッジで建てて清算させる、または流動性の薄い市場で被害者の口座と攻撃者自身の口座を対当売買させ、不利な約定で価値を移す。どの取引所でも「取引専用キー」から抜き取る定番の手口です。
- サブアカウントにも届く:サブアカウント用にも承認されていれば、subAccountTransfer でマスターとサブアカウント間の USDC を動かせます。vaultTransfer でボルトに預けて資金を拘束することもできます。
- ノンスとリプレイ:ノンスは署名者ごとに上位100個が保存され、エージェントが解除・期限切れ・資金切れになるとその状態が消えることがあります。同じエージェントアドレスを再承認すると過去の署名がリプレイされ得るので、アドレスは再利用せず毎回新しい鍵を生成し、アクションには expiresAfter を付けます。
ローテーションは、マスターを保持しているマシン(ハードウェアウォレットやオフラインの PC。VPS ではなく)で新しい鍵を作り、置き換える鍵と同じ名前で承認します。同名の名前付きエージェントを承認すると古いものが解除されるので、切り替えはアトミックです。周期は30〜90日(上限は180日)で、担当者の離脱、PC やサーバーの紛失、ログや git 履歴への鍵の混入、身に覚えのない約定があれば即時に行います。
IP 許可リストの代わりは VPS 側で作ります:ボット専用の VPS、SSH は鍵認証のみ・root ログイン無効、内向きは自分の IP からの SSH だけ・外向きは api.hyperliquid.xyz への HTTPS/WSS だけに絞るファイアウォール、鍵は環境変数かシークレットマネージャ(リポジトリ・Docker イメージ・ログに入れない)、SDK と依存関係のバージョン固定、そして scheduleCancel の常時設定。マスターはハードウェアウォレットに置いて承認・入出金だけに使い、Hyperliquid には運用資金だけを置き、戦略ごとにサブアカウントとエージェントを分けます。別ホストで鍵なしの監視(マスターアドレスの userFills・orderUpdates を購読し、ボットが記録していない約定を通知)を動かせば、それが Hyperliquid にはない「API 利用ログ」になります。
漏洩が疑われたら:①同名で新しいエージェントを承認するか API ページで削除して失効、②マスターウォレットで未約定注文を取り消し建玉を閉じる、③不要な資金を出金(出金はマスター専用なので攻撃者は先回りできない)、④該当期間の userFills と historicalOrders を保存しクリーンなイメージからホストを再構築、⑤そのホストから見えていた SSH 鍵やほかの取引所の API キーもすべて更新、の順で対応します。なお、鍵を守っても口座の中身は非公開になりません。info エンドポイントは公開で、アドレスを知っていれば誰でも建玉や約定を照会できます。
4. 手順 2:Python SDK を入れて 2 つの値を設定する
公式 SDK は PyPI で 0.24.0、Python 3.9 以上が必要です。Info クラスが info エンドポイントと WebSocket を、Exchange クラスが署名と送信を担います。
シェル
# 1. 仮想環境を作り、公式 SDK を入れる(0.24.0、Python 3.9 以上) python3 -m venv .venv && source .venv/bin/activate pip install hyperliquid-python-sdk # 2. ボットに必要な 2 つの値。環境変数かシークレット管理へ。git には絶対に入れない export HL_ACCOUNT_ADDRESS=0xメインウォレットのアドレス # マスター口座の「公開アドレス」 export HL_SECRET_KEY=0xAPIウォレットの秘密鍵 # API ウォレットの「秘密鍵」(出金はできない)
初めての人がほぼ必ず踏むのが、SDK の README にも書かれているこの規則です:API ウォレットで署名する場合でも、account_address には API ウォレットではなくメインウォレットの公開アドレスを入れる。逆にすると注文は失敗し、照会はすべて空で返ってきます。ファイルで管理したい場合は、examples と同じく examples/config.json の secret_key と account_address に入れます。
5. 手順 3:info エンドポイントで相場と口座を読む
読み取りにキーは一切不要です。次のコードは BTC の中値、板の最良気配、指定アドレスのポジションを表示します。
Python — info.py
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True) # 読み取りにキーも署名も不要
mids = info.all_mids() # ウェイト 2:全銘柄の中値を 1 回で
print("BTC mid:", mids["BTC"])
book = info.l2_snapshot("BTC") # ウェイト 2:片側最大 20 段の板
bid, ask = book["levels"][0][0], book["levels"][1][0]
print("best bid", bid["px"], "x", bid["sz"], "| best ask", ask["px"], "x", ask["sz"])
state = info.user_state("0xメインウォレットのアドレス") # ウェイト 2:証拠金とポジション
print("account value:", state["marginSummary"]["accountValue"])
for p in state["assetPositions"]:
pos = p["position"]
print(pos["coin"], pos["szi"], "entry", pos["entryPx"], "uPnL", pos["unrealizedPnl"]) 2026年9月26日 16:30 UTC の出力
BTC mid: 84076.5 best bid 84076.0 x 5.2787 | best ask 84077.0 x 3.68416 account value: …
内部的には各呼び出しが JSON の POST で、type フィールドがクエリの種類を決めます。HTTP が使える言語なら何でも読めます。
curl
# 板(ウェイト 2)
curl -s -X POST https://api.hyperliquid.xyz/info \
-H "Content-Type: application/json" \
-d '{"type":"l2Book","coin":"BTC"}'
# 任意のアドレスのポジションと証拠金(ウェイト 2)
curl -s -X POST https://api.hyperliquid.xyz/info \
-H "Content-Type: application/json" \
-d '{"type":"clearinghouseState","user":"0xメインウォレットのアドレス"}' このときの BTC の板は 8 万 4,000 ドル台で 1 ティック幅でした。2026年9月26日時点(2026年10月19日にも同じ)で meta の universe 配列は 234 件、うち 56 件が isDelisted 付き(稼働中の無期限は 178 銘柄)。各要素のインデックスが生の注文で使う整数の asset で(BTC = 0、ETH = 1、SOL = 5)、現物ペアは 10000 + spotMeta 内のインデックスです。allMids は現物ペアも含むため、1 メッセージで 1,100 件超の価格を返しました。
よく使う info リクエスト:allMids、l2Book、candleSnapshot、meta/metaAndAssetCtxs(銘柄、資金調達率、建玉)、clearinghouseState(ポジション)、openOrders、userFills(1 回最大 2,000 件、取得できるのは直近 10,000 件まで)、orderStatus、userFees(自分の手数料ティア)、userRateLimit(アドレス枠の残量)。info リクエストはアドレスごとの制限には数えられず、IP ごとのウェイト枠だけを消費します。
Hyperliquid の建玉(オープンインタレスト)API:metaAndAssetCtxs
結論:https://api.hyperliquid.xyz/info に {"type":"metaAndAssetCtxs"} を POST します。キー不要・ウェイト 20 の 1 回で、全無期限銘柄の建玉、現在の資金調達率、マーク・オラクル・中値、プレミアム、24 時間出来高が返ります。レスポンスは 2 要素の配列で、[0] が銘柄一覧(universe)、[1] が同じ順番のアセット情報なので、ctxs[i] は universe[i] に対応します。
curl
# 全無期限銘柄の建玉・資金調達率・価格を 1 回で取得(ウェイト 20)
curl -s -X POST https://api.hyperliquid.xyz/info \
-H "Content-Type: application/json" \
-d '{"type":"metaAndAssetCtxs"}'
# HIP-3 の perp DEX(例:trade.xyz の株式・指数の無期限)も同じ形で
curl -s -X POST https://api.hyperliquid.xyz/info \
-H "Content-Type: application/json" \
-d '{"type":"metaAndAssetCtxs","dex":"xyz"}' | 項目 | 意味 | BTC(2026年10月4日) |
|---|---|---|
| openInterest | 建玉。単位はコイン数(ドルではない)。markPx を掛けるとドル換算 | 37872.65(BTC) |
| funding | 現在の 1 時間あたり資金調達率(小数。0.0000125 = 毎時 0.00125%) | 0.0000125 |
| markPx / oraclePx / midPx | マーク価格(証拠金・清算に使用)、オラクル価格、板の中値 | 85378.0 / 85400.0 / 85378.5 |
| premium | インパクト価格(impactPxs)とオラクル価格の乖離。資金調達率の計算に使う | -0.0002459016 |
| dayNtlVlm / dayBaseVlm | 24 時間出来高(ドル/コイン数) | 650802296.16 / 7654.49 |
| prevDayPx | 24 時間前の価格(騰落率の計算用) | 84798.0 |
| impactPxs | プレミアム計算に使うインパクト買い・売り価格 | ["85375.5", "85379.0"] |
つまずきやすいのは、openInterest がドルではなくコイン数だという点です。ドル換算は markPx を掛けます。次のコードは稼働中の銘柄を建玉順に並べ、毎時の資金調達率を表示します。
Python — oi.py
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True)
meta, ctxs = info.meta_and_asset_ctxs() # ウェイト 20:全無期限銘柄を 1 回で
rows = []
for asset, ctx in zip(meta["universe"], ctxs): # ctxs[i] は universe[i] に対応
if asset.get("isDelisted"):
continue
oi_coins = float(ctx["openInterest"]) # 建玉はコイン数(ドルではない)
oi_usd = oi_coins * float(ctx["markPx"])
rows.append((asset["name"], oi_usd, float(ctx["funding"]) * 100, ctx["markPx"]))
for name, oi_usd, funding_pct, mark in sorted(rows, key=lambda r: -r[1])[:5]:
print(f"{name:5} OI {oi_usd / 1e9:.2f}B USD | funding {funding_pct:.5f}% per hour | mark {mark}") 2026年10月4日 15:25 UTC の出力
ETH OI 3.28B USD | funding 0.00125% per hour | mark 2698.73 BTC OI 3.23B USD | funding 0.00125% per hour | mark 85285.0 HYPE OI 1.83B USD | funding 0.00125% per hour | mark 89.863 SOL OI 0.67B USD | funding 0.00077% per hour | mark 121.64 ZEC OI 0.61B USD | funding 0.00217% per hour | mark 1332.2743
- HIP-3 市場:
"dex":"xyz"(またはperpDexsで分かる他のデプロイヤー名)を付けると、ビルダーがデプロイした無期限が取れます。2026年10月4日時点で "xyz" は 130 銘柄。trade.xyz の解説で扱う株式・指数の無期限の建玉もこの方法で読めます。dexを省くと最初の(バリデーター運営の)perp DEX です。 - 1 銘柄をリアルタイムで:ポーリングではなく WebSocket の
activeAssetCtxを購読します。allDexsAssetCtxsなら全 DEX をまとめて配信。 - 上限に達した銘柄:
{"type":"perpsAtOpenInterestCap"}で、新規の建玉を受け付けていない無期限が分かります。 - 履歴はない:API が返すのは現在値だけです。過去の建玉は S3 アーカイブの日次アセット情報(後述)を使うか、自分で記録します。
Hyperliquid のローソク足(OHLCV)API:candleSnapshot
結論:info エンドポイントに {"type":"candleSnapshot","req":{"coin":"BTC","interval":"1h","startTime":…,"endTime":…}} を POST します(時刻はエポックミリ秒)。時間足は 14 種類(1m、3m、5m、15m、30m、1h、2h、4h、8h、12h、1d、3d、1w、1M)で、取れるのは銘柄・時間足ごとに直近 5,000 本まで。各足は t/T(足の開始・終了時刻)、o h l c、v(出来高、コイン数)、n(約定回数)を持ちます。
curl
# BTC の 1 時間足、2026年10月3日(UTC)分。時刻はエポックミリ秒
curl -s -X POST https://api.hyperliquid.xyz/info \
-H "Content-Type: application/json" \
-d '{"type":"candleSnapshot","req":{"coin":"BTC","interval":"1h","startTime":1790985600000,"endTime":1791072000000}}'
# 返却は 25 本(endTime を含むため 10月4日 00:00 の足も入る)。先頭の 1 本:
# {"t":1790985600000,"T":1790989199999,"s":"BTC","i":"1h","o":"84483.0","c":"84613.0",
# "h":"84645.0","l":"84410.0","v":"457.48006","n":7067} コストはウェイト 20 に加えて 60 本ごとの追加分なので、5,000 本を 1 回取るのは安くても、毎秒ポーリングするのは割高です。リアルタイムの足は WebSocket の candle を購読します。範囲より古い開始時刻を指定してもエラーにはならず、残っている分が返ります:2026年10月4日に 1 分足を startTime 0 で要求すると 5,061 本(3.5 日分)でした。HIP-3 の銘柄は DEX 名を前に付け(xyz:XYZ100)、Python SDK では perp_dexs を渡したときだけ名前を解決できます。
Python — 暗号資産と HIP-3 銘柄の日足
import time
from hyperliquid.info import Info
from hyperliquid.utils import constants
# perp_dexs を渡すと SDK の銘柄名解決に HIP-3 市場(ここでは trade.xyz の dex "xyz")が加わる
info = Info(constants.MAINNET_API_URL, skip_ws=True, perp_dexs=["", "xyz"])
end = int(time.time() * 1000)
start = end - 30 * 24 * 60 * 60 * 1000 # 直近 30 日
for coin in ["BTC", "xyz:XYZ100"]:
rows = info.candles_snapshot(coin, "1d", start, end) # t, T, s, i, o, c, h, l, v, n
last = rows[-1]
print(coin, len(rows), "daily candles | last close", last["c"], "| volume", last["v"], "| trades", last["n"]) 2026年10月4日の出力
BTC 31 daily candles | last close 85275.0 | volume 5280.85925 | trades 84622 xyz:XYZ100 31 daily candles | last close 30860.0 | volume 359.1197 | trades 8678
バックテスト用に CSV へ保存する方法と、5,000 本で足りないときの対処は過去データの節で説明します。
6. 手順 4:exchange エンドポイントで注文を出して取消す
最初の書き込みとして最も安全なのが、中値の 5% 下にポストオンリーの買い指値を置き、板に載ったことを確認して取消す、という流れです。テストネットで動かし、定数 1 つを変えればメインネットで動きます。
Python — order.py
import os
import eth_account
from hyperliquid.exchange import Exchange
from hyperliquid.info import Info
from hyperliquid.utils import constants
BASE = constants.TESTNET_API_URL # 本番では MAINNET_API_URL
address = os.environ["HL_ACCOUNT_ADDRESS"] # マスターの公開アドレス
agent = eth_account.Account.from_key(os.environ["HL_SECRET_KEY"]) # API ウォレットの秘密鍵
info = Info(BASE, skip_ws=True)
exchange = Exchange(agent, BASE, account_address=address)
# 中値の 5% 下にポストオンリー(ALO)の買い指値:板に残るだけで、テイカー手数料は絶対に発生しない
mid = float(info.all_mids()["ETH"])
px = round(float(f"{mid * 0.95:.5g}"), 6 - 4) # 有効数字 5 桁。無期限の小数桁は 6 - szDecimals(ETH は 4)
res = exchange.order("ETH", True, 0.01, px, {"limit": {"tif": "Alo"}})
if res["status"] != "ok": # リクエスト全体が拒否(署名・エージェント・未入金)
print("request error:", res["response"])
else:
status = res["response"]["data"]["statuses"][0]
if "resting" in status:
oid = status["resting"]["oid"]
print("resting", oid, "at", px)
print(exchange.cancel("ETH", oid))
else:
print("order error:", status.get("error")) 成行注文は「板を突き抜ける価格の IOC 指値」で、価格は SDK が計算してくれます。
Python — 成行で建てる/決済する
# 先にレバレッジ(クロス 5 倍)を設定し、IOC の「成行」で建てて決済
exchange.update_leverage(5, "ETH", is_cross=True)
res = exchange.market_open("ETH", True, 0.01, None, 0.01) # 0.01 ETH 買い、スリッページ上限 1%(SDK 既定は 5%)
print(res["response"]["data"]["statuses"][0]) # {'filled': {'totalSz': ..., 'avgPx': ..., 'oid': ...}}
exchange.market_close("ETH") # ETH ポジションを全量決済 指値注文は執行条件(TIF)を選びます。
| TIF | 挙動 | 用途 |
|---|---|---|
Alo | Add-liquidity-only(ポストオンリー)。即時約定するなら取消されるので、テイカー手数料を払うことがない。ALO だけのバッチはバリデータが優先処理。 | マーケットメイク、板に置く注文全般 |
Ioc | 即時執行、未約定分は取消。「成行」は板を食う価格で出す IOC。 | 今すぐ約定させたい、損切りの執行 |
Gtc | 取消まで有効。約定しなければ板に残る。 | 通常の指値 |
トリガー注文(損切り/利確)は limit の代わりに isMarket、triggerPx、tpsl を持つ trigger を使います。書式規則(tick-and-lot-size ページ):価格は有効数字 5 桁まで(整数価格は常に可)、小数点以下は無期限で 6 − szDecimals 桁、現物で 8 − szDecimals 桁まで。数量はその銘柄の szDecimals(BTC は 5、ETH は 4)で丸め、署名前に末尾のゼロを削る。そして無期限の注文は最低 10ドル 相当が必要です。レスポンスは、"status":"ok" の中に注文ごとの結果が入る形と、リクエスト全体が "status":"err" と文字列で返る形の 2 種類があるので、上のコードのように両方を処理してください。
レスポンスの例
// resting:板に載った(ALO や、約定しなかった GTC)
{"status":"ok","response":{"type":"order","data":{"statuses":[{"resting":{"oid":77738308}}]}}}
// filled:約定した(IOC/成行)
{"status":"ok","response":{"type":"order","data":{"statuses":[{"filled":{"totalSz":"0.02","avgPx":"1891.4","oid":77747314}}]}}}
// 注文単位のエラー:リクエストは有効だが、この注文は不可
{"status":"ok","response":{"type":"order","data":{"statuses":[{"error":"Order must have minimum value of $10."}]}}}
// リクエスト単位のエラー:2026年9月26日、未承認の API ウォレットで当サイトが実際に受け取った応答
{"status":"err","response":"User or API Wallet 0xea25…b5be does not exist."} ボットがよく使う他のアクション:cancel/cancelByCloid(遅延最適化のページは f: true の fast フラグを推奨。デメリットはトリガー注文を取消せない点だけで、将来のアップグレードでは fast 付きの取消だけがメムプールで優先される)、modify/batchModify、updateLeverage、twapOrder、そして scheduleCancel — 5 秒以上先の時刻に全注文を取消すデッドマンスイッチで、発動は UTC 日あたり 10 回まで。アクションには expiresAfter を付けて遅延した注文が後から執行されるのを防げますが、期限切れで取消されるとアドレス枠を通常の 5 倍消費します。
7. /exchange の署名のしくみ(SDK を使わない場合)
exchange へのリクエストはすべて同じ形です:action、ミリ秒の nonce、signature、そして任意の vaultAddress(サブアカウントやボルトとして動く場合)と expiresAfter。上のような ALO 注文で SDK が送る中身は次の形です(価格・ノンス・署名は説明用の値)。
生のリクエスト
POST https://api.hyperliquid.xyz/exchange
{
"action": {
"type": "order",
"orders": [{"a": 1, "b": true, "p": "2850.5", "s": "0.01", "r": false,
"t": {"limit": {"tif": "Alo"}}}],
"grouping": "na"
},
"nonce": 1790440000000,
"signature": {"r": "0x…", "s": "0x…", "v": 27},
"vaultAddress": null,
"expiresAfter": null
} 自作クライアントがつまずくのは署名で、署名方式は 2 種類あります(SDK の sign_l1_action と sign_user_signed_action)。
- L1 アクション — 注文、取消、変更、レバレッジ、TWAP、scheduleCancel。action を msgpack でエンコード(フィールド順が重要)し、ノンスとボルトアドレスと一緒にハッシュして、
Exchangeドメイン・チェーン ID 1337 の EIP-712「ファントムエージェント」メッセージとして署名します。API ウォレットで署名できます。 - ユーザー署名アクション — 出金、
usdSend、現物送金、approveAgent、ビルダー手数料の承認。HyperliquidSignTransactionドメインの素の EIP-712 で、action にhyperliquidChain("Mainnet"/"Testnet")とsignatureChainId(SDK は 0x66eee)が入ります。署名できるのはマスター鍵だけで、これが API ウォレットで出金できない理由です。
signing ページが挙げる典型的なミスは、方式の取り違え、msgpack のフィールド順、数値の末尾ゼロ、アドレスの大文字、そして「ローカルで署名者を復元したら合っていた」という思い込み(復元用のペイロードが実際と違う)です。署名が間違っていても分かりやすい失敗にはならず、別のアドレスが復元されて、見たこともないアドレスで「User or API Wallet 0x… does not exist」が返ります。
8. 手順 5:WebSocket でリアルタイム配信を受ける
info エンドポイントをループでポーリングするとウェイト枠を食い潰します。本格的なボットは WebSocket 上で動かします。SDK なら購読 1 行とコールバックだけです。
Python — ws.py(SDK)
import time
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL) # skip_ws=False でソケットを開く。SDK が 50 秒ごとに ping を送る
def on_bbo(msg):
bid, ask = msg["data"]["bbo"]
print("BTC", bid["px"], "/", ask["px"])
info.subscribe({"type": "bbo", "coin": "BTC"}, on_bbo)
info.subscribe({"type": "orderUpdates", "user": "0xメインウォレットのアドレス"}, print)
info.subscribe({"type": "userFills", "user": "0xメインウォレットのアドレス"}, print)
time.sleep(60)
info.disconnect_websocket() SDK を使わない場合は wss://api.hyperliquid.xyz/ws に接続し、購読メッセージを JSON で自分で送ります。
Python — 素の WebSocket
import json
from websocket import create_connection # websocket-client(SDK と一緒に入る)
ws = create_connection("wss://api.hyperliquid.xyz/ws")
ws.send(json.dumps({"method": "subscribe", "subscription": {"type": "l2Book", "coin": "BTC"}}))
print(ws.recv()) # {"channel":"subscriptionResponse", ...}
book = json.loads(ws.recv()) # 差分ではなく 20 段の完全なスナップショット
print(book["data"]["levels"][0][0]) # 最良買い:{'px': ..., 'sz': ..., 'n': ...}
ws.send(json.dumps({"method": "ping"})) # 静かなチャネル用のハートビート。応答は {"channel":"pong"}
while (msg := json.loads(ws.recv()))["channel"] != "pong":
pass # pong が来るまで板の更新が届き続ける
print(msg)
ws.close() 配信メッセージの channel は購読の種類名です(受付確認は subscriptionResponse)。銘柄名は meta の名前(BTC、ETH…)、現物は PURR/USDC または @index、HIP-3 は DEX 名付き(xyz:NVDA)。解除は method: "unsubscribe" に同じ購読オブジェクトを付けて送ります。ドキュメントにある購読は全 24 種類です(2026年10月19日に再確認)。
| type | パラメーター | 取れるもの | 種類 |
|---|---|---|---|
| allMids | dex(任意) | 全銘柄の中値(現物の中値は最初の perp DEX のときのみ) | 相場 |
| l2Book | coin。任意で nSigFigs、mantissa、fast | 板のスナップショット:片側 20 段、fast なら 5 段 | 相場 |
| bbo | coin | 最良気配。変化したブロックでのみ配信 | 相場 |
| trades | coin | 約定:方向、価格、数量、時刻、hash、tid、買い手と売り手のアドレス | 相場 |
| candle | coin、interval(1m〜1M) | OHLCV ローソク足の更新 | 相場 |
| activeAssetCtx | coin | マーク・中値・オラクル価格、資金調達率、建玉、24 時間出来高 | 相場 |
| fastAssetCtxs | – | 全銘柄のマーク価格(base64+raw DEFLATE 圧縮)。2 回目以降は変化した銘柄のみ | 相場 |
| allDexsAssetCtxs | – | 全 perp DEX(HIP-3 含む)のアセット情報 | 相場 |
| outcomeMetaUpdates | – | アウトカム市場のメタデータ変更 | 相場 |
| orderUpdates | user | そのアドレスの注文の状態変化 | ユーザー |
| userEvents | user | 約定、資金調達、清算、ユーザー以外による取消(チャネル名は "user") | ユーザー |
| userFills | user。任意で aggregateByTime | 約定のスナップショット、その後は手数料・確定損益・crossed(テイカー)付きの各約定 | ユーザー |
| userFundings | user | 資金調達のスナップショット、その後は毎時の支払い | ユーザー |
| userNonFundingLedgerUpdates | user | 入金、出金、振替、清算 | ユーザー |
| clearinghouseState | user。任意で dex | ポジション、証拠金サマリー、維持証拠金、出金可能額 | ユーザー |
| allDexsClearinghouseState | user | 全 DEX の口座状態 | ユーザー |
| openOrders | user。任意で dex | 未約定注文 | ユーザー |
| spotState | user。任意で isPortfolioMargin | 現物残高 | ユーザー |
| activeAssetData | user、coin(無期限のみ) | レバレッジ、最大取引サイズ、取引可能額 | ユーザー |
| twapStates | user。任意で dex | 実行中の TWAP 注文 | ユーザー |
| userTwapSliceFills | user | TWAP 子注文の約定 | ユーザー |
| userTwapHistory | user | TWAP の履歴(開始、終了、完了、エラー) | ユーザー |
| notification | user | フロントエンドの通知 | ユーザー |
| webData3 | user | フロントエンド用の口座メタデータ(エージェントのアドレスと期限、Vault フラグ、DEX ごとの状態) | ユーザー |
「dex」は HIP-3 の perp DEX を指定します。Python SDK の例にはまだ旧 webData2 がありますが、ドキュメントは webData3 に変わっており、ポジションは含まれないので clearinghouseState を使います。「ticker」チャネルはなく、24 時間の統計は activeAssetCtx、価格は allMids か bbo で取ります。
更新頻度(実測)。ドキュメントは l2Book を「前回から 0.5 秒以上たったブロックごとに配信」と書いており、これは最短間隔であって保証ではありません。2026年9月25日(08:41〜08:48 UTC)に 1 クライアントから BTC を測ると、fast: true の板は 30 秒で 58 回(平均 0.53 秒、片側 5 段)、既定の 20 段の板は 30 秒で 8 回(平均 4.7 秒)、bbo は 20 秒で 91 回でした。新しい板が必要なら fast: true と bbo を組み合わせます。
本番向けの Python クライアント。SDK のソケットは 50 秒ごとに ping を送りますが、run_forever() に再接続処理がなく、clearinghouseState や fastAssetCtxs などは扱えません。次のクライアントは BTC の板・BBO・自分の約定を購読し、50 秒ごとの ping と、ゆらぎ付きの指数バックオフ(1 秒、2 秒、4 秒…最大 60 秒)で再接続して購読を送り直します(2026年9月25日にメインネットで実行)。
Python — ws_client.py(websockets、再接続付き)
import asyncio, json, random, websockets # pip install websockets(Python 3.10 以上)
URL = "wss://api.hyperliquid.xyz/ws"
USER = "0xYourMasterOrSubAccount" # エージェント(API ウォレット)のアドレスではない
SUBS = [
dict(type="l2Book", coin="BTC", fast=True),
dict(type="bbo", coin="BTC"),
dict(type="userFills", user=USER),
]
async def heartbeat(ws):
while True:
await asyncio.sleep(50) # 60 秒無通信で切断されるので 50 秒ごとに ping
await ws.send(json.dumps(dict(method="ping")))
def handle(msg):
ch, data = msg.get("channel"), msg.get("data")
if ch == "l2Book": # 完全なスナップショット:置き換える(差分適用しない)
bids, asks = data["levels"]
print("book", data["time"], bids[0]["px"], asks[0]["px"])
elif ch == "bbo":
bid, ask = data["bbo"]
print("bbo", bid and bid["px"], ask and ask["px"])
elif ch == "userFills":
if data.get("isSnapshot"): # 購読(再購読)のたびに履歴が再送される
return
for f in data["fills"]:
print("fill", f["coin"], f["side"], f["px"], f["sz"], "fee", f["fee"])
async def run():
backoff = 1
while True:
try:
async with websockets.connect(URL, ping_interval=None) as ws:
for s in SUBS:
await ws.send(json.dumps(dict(method="subscribe", subscription=s)))
hb = asyncio.create_task(heartbeat(ws))
backoff = 1
try:
async for raw in ws:
handle(json.loads(raw))
finally:
hb.cancel()
except (OSError, websockets.ConnectionClosed) as e:
print("disconnected:", e)
await asyncio.sleep(backoff + random.random())
backoff = min(backoff * 2, 60)
asyncio.run(run()) ドキュメントが明記している挙動:l2Book はスナップショット配信で差分ではない — 毎回が完全な板なので、差分適用ではなくローカルの板を丸ごと置き換える。サーバーは60 秒間メッセージのない接続を切断するので、静かなチャネルでは ping を送る(SDK は 50 秒ごとに自動送信)。時系列の購読は直近履歴入りの isSnapshot: true メッセージから始まる。サーバー側からの切断も予告なく起こり得るので、再接続して購読を送り直し、再接続時のスナップショット(または info リクエスト)で欠けた分を埋めてください。ソケット経由で info や exchange のリクエストを post することもできます(同時 100 件まで)。ソケット経由の post は method: "post" と数値の id で包み、返信は同じ id で post チャネルに届きます(explorer リクエストは不可)。
WebSocket でよくある落とし穴:
- ユーザー系の配信が空:エージェントのアドレスを渡している。マスターかサブアカウントのアドレスを使う。
- userEvents が届かない:メッセージのチャネル名は
"userEvents"ではなく"user"。 - fastAssetCtxs が読めない:base64+raw DEFLATE。Python は
zlib.decompress(b, wbits=-15)、ブラウザーはDecompressionStream("deflate-raw")。 - 多数のウォレットを追跡したい:ユーザー指定の購読は IP ごとに 10 ユーザーまで。50 ウォレットを追うなら REST のポーリング、複数 IP、自前ノードのいずれか。
- 再起動を繰り返すと接続を拒否される:新規接続は IP ごとに毎分 30 本まで。バックオフにゆらぎを入れる。
9. エンドポイント早見表:ローソク足・約定・板・建玉ほか
相場データの読み取りは、どれも https://api.hyperliquid.xyz/info への POST 1 回で、キーも署名も要りません。変わるのは本文の type だけです。必要なデータを選び、IP ごとに毎分 1,200 のウェイト枠で収まるかを確認してください。表のリクエストはすべて 2026年10月19日にメインネットで実行して確かめました。
| データ | リクエスト(本文) | ウェイト | 遡れる範囲 | 詳しく |
|---|---|---|---|---|
| ローソク足(OHLCV) | candleSnapshot{"type":"candleSnapshot","req":{"coin":"BTC","interval":"1h","startTime":…,"endTime":…}} | 20+60 本ごとに 1(5,000 本で約 104) | 銘柄・時間足ごとに直近 5,000 本(日足は全期間) | ローソク足の節 |
| 市場全体の約定 | recentTrades/WS trades{"type":"recentTrades","coin":"BTC"} | 20+20 件ごとに 1(配信は REST ウェイトなし) | 直近 10 件(BTC、2026年10月19日)。続けて取るなら WebSocket | 約定データ(英語) |
| 板(L2) | l2Book{"type":"l2Book","coin":"BTC"} | 2 | 現在のスナップショットのみ、片側最大 20 段 | 板の履歴(英語) |
| 資金調達率の履歴 | fundingHistory{"type":"fundingHistory","coin":"BTC","startTime":…} | 20+20 行ごとに 1(500 行で約 45) | BTC は 2023年5月12日から。1 回 500 行でページ送り | 履歴の範囲 |
| 建玉・マーク・現在の資金調達率 | metaAndAssetCtxs{"type":"metaAndAssetCtxs"} | 20 | 現在値のみ(過去分は S3 の asset_ctxs) | 建玉の節 |
| 清算 | userFills/userNonFundingLedgerUpdates(startTime 必須){"type":"userFills","user":"0x…"} | 20+20 件ごとに 1 | 1 アドレスずつ。市場全体の清算を返すリクエストはない | 清算データ(英語) |
| 現物の銘柄・トークン | spotMeta/spotMetaAndAssetCtxs{"type":"spotMeta"} | 20 | 現在のメタデータ(2026年10月19日時点で現物ペア 333) | 手順 3 |
openInterest はドルではなくコイン数なので、markPx を掛けてドルに換算します(2026年10月19日の BTC は約 32.7億ドル)。現物の銘柄名は他のリクエストでは PURR/USDC か @インデックス(HYPE/USDC はメインネットで @107)。約定の side は仕掛けた側で、"B" が買い、"A" が売りです。
curl — 4 種類の実行例(2026年10月19日)
# 共通:POST https://api.hyperliquid.xyz/info(キー・署名不要)。-d の中身だけを差し替える
curl -s https://api.hyperliquid.xyz/info -H "Content-Type: application/json" \
-d '{"type":"candleSnapshot","req":{"coin":"BTC","interval":"1h","startTime":1792281600000,"endTime":1792368000000}}'
# → 25 本(endTime も含む):{"t":1792281600000,"T":1792285199999,"s":"BTC","i":"1h","o":"81451.0","c":"81505.0",…,"n":6052}
curl -s https://api.hyperliquid.xyz/info -H "Content-Type: application/json" \
-d '{"type":"recentTrades","coin":"BTC"}'
# → 直近 10 件:{"coin":"BTC","side":"A","px":"82644.0","sz":"0.01056",…,"users":[買い手, 売り手]}
curl -s https://api.hyperliquid.xyz/info -H "Content-Type: application/json" \
-d '{"type":"fundingHistory","coin":"BTC","startTime":1792281600000}'
# → 1 時間 1 行:{"coin":"BTC","fundingRate":"0.0000036781","premium":"-0.0004705753","time":1792281600074}
curl -s https://api.hyperliquid.xyz/info -H "Content-Type: application/json" \
-d '{"type":"userFills","user":"0x2e3d94f0562703b25c83308a05046ddaf9a8dd14"}'
# → 2,000 件、うち清算 2 件:{"coin":"HMSTR","dir":"Liquidated Isolated Short","liquidation":{"liquidatedUser":"0x…","markPx":"0.000231","method":"backstop"},…} 清算の例のアドレスは、バックストップ清算を引き受ける HLP の戦略ボールトの 1 つです(2026年10月19日 06:25 UTC 取得。下の Python 例のアドレスの約定には清算がありませんでした)。
同じ 7 種類の読み取りを公式 Python SDK(0.24.0)で。SDK にヘルパーがない recentTrades などは info.post() にそのまま本文を渡します。
Python — cookbook.py
import time
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True) # 読み取りにキーも署名も不要
now, day = int(time.time() * 1000), 86_400_000
candles = info.candles_snapshot("BTC", "1h", now - day, now) # ウェイト 20+60 本ごとに 1
trades = info.post("/info", {"type": "recentTrades", "coin": "BTC"}) # ウェイト 20+20 件ごとに 1
book = info.l2_snapshot("BTC") # ウェイト 2
funding = info.funding_history("BTC", now - day) # ウェイト 20+20 行ごとに 1
meta, ctxs = info.meta_and_asset_ctxs() # ウェイト 20
oi_usd = {a["name"]: float(c["openInterest"]) * float(c["markPx"]) for a, c in zip(meta["universe"], ctxs)}
spot = info.spot_meta() # ウェイト 20
fills = info.user_fills("0xAddressToCheck") # ウェイト 20+20 件ごとに 1
liqs = [x for x in fills if x.get("liquidation")]
print(len(candles), "candles |", len(trades), "trades | best bid", book["levels"][0][0]["px"])
print("last funding", funding[-1]["fundingRate"], "| BTC OI $", f"{oi_usd['BTC']:,.0f}")
print(len(spot["universe"]), "spot pairs |", len(fills), "fills,", len(liqs), "liquidations") 2026年10月19日 05:52 UTC の出力(約定は取引履歴に出ていた公開アドレス 1 件)
25 candles | 10 trades | best bid 82660.0 last funding 0.0000108771 | BTC OI $ 3,275,088,126 333 spot pairs | 2000 fills, 0 liquidations
API が持つ履歴は短いため、ローソク足の 5,000 本より前、板・建玉・約定の履歴は公式の S3 アーカイブから取ります。バケットの構成と時間足ごとに遡れる期間は英語の Hyperliquid historical data ガイド、手数料・資金調達・スリッページを入れた検証は英語の Hyperliquid のバックテスト解説にまとめています。
データを取ったら、次は同じ口座で取引する人へ。最初の取引の前に紹介コード HOLYGRAIL で口座を作ると、最初の 2,500万ドル 分の手数料が 4% 引きです(マスターアカウントのみ。コードは取引高が 10,000ドル を超える前に入力)。HOLYGRAIL 付きで Hyperliquid を開く →
10. 手順 6:Hyperliquid 自動売買ボットの最小構成
テストネットで放置しても安全な、いちばん小さなボットです。ETH の中値の両側にポストオンリーで指値を出し、ポジションに上限をかけ、毎ループでデッドマンスイッチをかけ直すので、プロセスが落ちても板に注文が残りません。
Python — bot.py(テストネット)
import os
import time
import eth_account
from hyperliquid.exchange import Exchange
from hyperliquid.info import Info
from hyperliquid.utils import constants
BASE = constants.TESTNET_API_URL
COIN, SIZE, EDGE, MAX_POS = "ETH", 0.01, 0.002, 0.05 # 両側に 0.2% 離して指値。保有は最大 0.05 ETH
address = os.environ["HL_ACCOUNT_ADDRESS"]
exchange = Exchange(eth_account.Account.from_key(os.environ["HL_SECRET_KEY"]), BASE, account_address=address)
info = Info(BASE, skip_ws=True)
def px5(x): # 有効数字 5 桁、ETH 無期限は小数 2 桁まで
return round(float(f"{x:.5g}"), 2)
while True:
# 1. デッドマンスイッチ:このプロセスが落ちたら 30 秒後に全注文が取消される
exchange.schedule_cancel(int(time.time() * 1000) + 30_000)
# 2. 古い指値をまとめて 1 回で取消
stale = [{"coin": COIN, "oid": o["oid"]} for o in info.open_orders(address) if o["coin"] == COIN]
if stale:
exchange.bulk_cancel(stale)
# 3. ポジションと中値を読み、上限内の側だけポストオンリーで出し直す
pos = sum(float(p["position"]["szi"]) for p in info.user_state(address)["assetPositions"]
if p["position"]["coin"] == COIN)
mid = float(info.all_mids()[COIN])
if pos < MAX_POS:
print(exchange.order(COIN, True, SIZE, px5(mid * (1 - EDGE)), {"limit": {"tif": "Alo"}}))
if pos > -MAX_POS:
print(exchange.order(COIN, False, SIZE, px5(mid * (1 + EDGE)), {"limit": {"tif": "Alo"}}))
time.sleep(10) sleep を短くする前に、2 つの枠を計算しておきましょう。IP ウェイト:1 ループで open_orders が 20、user_state と all_mids が各 2、exchange リクエストが各 1 — 毎分 1,200 に対してごくわずかです。アドレス枠:注文・取消・scheduleCancel はすべて 1 アクションなので、このループは 10 秒で最大 5 アクション、1 時間で約 1,800。新しい口座の初期バッファ 10,000 は約 5.6 時間で尽き、それ以降は約定量(1 USDC につき 1 アクション)で稼いだ分しか使えません。本格的なマーケットメイクは板を WebSocket で読み、取消+再発注ではなく modify を使います。
規模を大きくするときは、ノンスのページが推奨する構成に沿わせます。
- 取引プロセスごと(サブアカウントごと)に 1 つの API ウォレット。承認はマスター鍵を持つマシンで行い、VPS には環境変数としてエージェント鍵だけを置く。
- マーケットデータ用タスクを WebSocket 上に:取引銘柄の
l2Bookかbbo、マスターアドレスのorderUpdatesとuserFills。切断されたら再接続、静かなチャネルにはハートビート。 - 戦略タスクはフィードを受けて注文・取消の意図をキューに積むだけで、ネットワークには触れない。
- バッチ送信タスクが 100ms ごとにキューを取り出し、1 回の
orderまたはcancelにまとめて送る(ALO と IOC/GTC は別バッチ)。ノンスは現在のミリ秒へ早送りできるアトミックカウンタから取る。 - 安全タスクが
scheduleCancelをかけ直し、最大ポジション・日次最大損失・毎分の最大メッセージ数をコードで強制する。
遅延の目安(Optimizing latency ページ):取消や ALO 注文のエンドツーエンドは約 380ms。API サーバー、メムプール取り込み、ブロック確定までを含む往復だからです。ただし順序付けのばらつきはこの数字よりずっと小さく、同じ時刻に送った取消と ALO は IOC や GTC よりほぼ常に先に処理されます。コードを書かずに済ませたい場合は、標準の自動売買機能、Hyperliquid グリッドボットの設定、Hyperliquid のコピートレードも比べてみてください。代表的な戦略の型は下の自動売買の戦略パターンにまとめています。
マーケットメイク:メイカー手数料とリベートの条件
上のボットのように板の両側へ ALO で指値を置き続けるのがマーケットメイクです。メイカー手数料は直近14日間の加重取引高で下がり、ティア0の0.015%(HOLYGRAIL で0.0144%)から、1億ドル超で0.004%、5億ドル超で0%になります。マイナス手数料(リベート)は取引高ではなく、取引所全体の14日間メイカー出来高に占める自分のシェアで決まります。
| リベート段階 | 14日間メイカー出来高のシェア | メイカー手数料 |
|---|---|---|
| リベート1 | 0.5%超 | -0.001% |
| リベート2 | 1.5%超 | -0.002% |
| リベート3 | 3%超 | -0.003% |
メイカー出来高の合計はおおむね取引所の出来高と同じなので、リベート1でも1日あたり数千万ドル規模のメイカー約定が必要で、何百もの市場に24時間クオートする専業業者の領域です。個人にとって効くのは、テイカー0.045%とメイカー0.015%の差をとる「メイカー優先」の発注と、紹介割引です。自分で板に立たずにマーケットメイクの損益に参加したいなら、プロトコル自身のマーケットメイカーである HLP に USDC を預ける方法があります(ロックアップ4日、HLP とボールトの解説)。
自動売買の戦略パターン
- グリッド:一定の価格帯に指値のはしごを並べ、レンジ相場の往復で利益を積む。ハイパーリキッドには標準のグリッドボットがないので、Scale 注文か外部ボット、または上のコードで組みます(グリッドボットの設定)。
- TWAP・分割執行:大きな注文を時間で分けて価格インパクトを抑える。標準の TWAP 注文で足ります(Scale と TWAP)。
- ファンディング裁定:現物ロングと無期限ショートで価格リスクを消し、資金調達を受け取る(ファンディング裁定の組み方)。
- マーケットメイク:上の節のとおり、ALO で両側に指値を置き、在庫とポジション上限をコードで管理する。
ほかのパープ DEX の API との比較(自動売買向け)
ハイパーリキッド・ライター・アスター・エッジエックス・dYdX の5社とも、発注・取り消しと板・約定のリアルタイム受信ができる REST と WebSocket の API を公開しています。ボット用に比べるべきなのは、ボットに持たせる鍵で出金できるかどうか、送れるリクエストの数、注文が届くまでの速さ、1回の約定の手数料です。「非公開」は公式の数字が見つからなかったことを意味します。
| 取引所 | ボット用の鍵 | API と SDK | レート制限 | レイテンシ(公式) | 基本手数料 メイカー/テイカー |
|---|---|---|---|---|---|
| ハイパーリキッド | API(エージェント)ウォレット:取引のみ、出金不可。名前付きはアカウントに3つ+サブアカウントごとに2つ | REST+WebSocket。公式 Python SDK、コミュニティ製の TypeScript・Rust SDK、CCXT | IP あたり毎分1,200ウェイト+アドレスごとの枠(初期10,000) | 中央値200ms、99パーセンタイル900ms | 0.015%/0.045%(HOLYGRAIL で0.0144%/0.0432%) |
| ライター API 解説(英語) | API キー(番号ごと):取引可。出金は口座を作ったアドレスへの通常出金のみ | REST+WebSocket。公式 Python・Go SDK、CCXT、Hummingbot | Standard 毎分60リクエスト、Premium 毎分24,000ウェイト | Standard はテイカー注文300msの遅延、Premium は140ms | Standard 0%/0%、Premium 0.004%/0.028% |
| アスター API 解説 | V3 API ウォレット(EIP-712 署名)。権限をウォレットごとに設定(出金は IP ホワイトリスト必須) | Binance 形式の REST+WebSocket、公式サンプルコード、CCXT | IP あたり毎分2,400ウェイト、アカウントあたり毎分1,200注文 | 非公開 | 0%/0.04% |
| エッジエックス | API キー(HMAC)と、注文・出金に署名する Signer Key。取引専用の鍵の記載なし | V2 の REST+WebSocket。公式 Python・Go SDK | 数値の公開なし | 非公開 | 0.040%/0.045% |
| dYdX | Permissioned Keys:出金を禁止し、銘柄も絞れる取引用キー | gRPC/REST+Indexer の REST/WebSocket。公式 TypeScript・Python・Rust クライアント | 短期注文と取消が5ブロックで4,000件 | 発注から約定まで約800ms | 0.01%/0.05% |
各社の公式ドキュメントと公開 API で2026年9月26〜27日に確認。手数料は取引量割引前の最初のティア。
用途別には、総合ではハイパーリキッド(板が厚く、出金できない API ウォレットと公式 SDK がそろう)、高頻度のマーケットメイクはライター Premium、Binance 用ボットの移植はアスター(エンドポイントとエラーコードが Binance 先物とほぼ同じ)、完全オンチェーンなら dYdX です。ハイパーリキッドの紹介コードは取引量が1万ドルを超えると追加できず、ボットはすぐに超えるので、初回注文の前に HOLYGRAIL で登録しておきましょう。
コードなしで使える標準の自動売買機能
- ハイパーリキッド:TWAP(30秒以上の間隔で子注文、5分〜7日、最低100ドル)、Scale(指値のはしご)、Chase(ポストオンリーの自動再配置、ブラウザのタブで動作)。追加コストなし。標準のグリッドボットはありません。
- アスター:3社で唯一の本格的な標準グリッドボット(ニュートラル・ロング・ショート、範囲とグリッド数の自動設定)、TWAP、最大110本の Scaled Order。
- ライター:最長30日の TWAP、Scale、Chase Limit、Iceberg。Standard 口座では高度な注文に手数料(TWAP は0.01%)がかかります。
- 外部ボット:TradingView のシグナルなら WunderTrading や Bitsgap、マーケットメイクなら Hummingbot。ハイパーリキッドでは外部ボットが builder fee(パープで最大0.1%)を上乗せすることがあり、HOLYGRAIL の割引はハイパーリキッド分の手数料にだけ効きます。
11. 過去データの取得とバックテスト
API はライブ取引向けに作られているため、履歴は限られます。candleSnapshot で取れるのは銘柄・時間足ごとに直近 5,000 本まで(1m〜1M の 14 種類)— 1 分足なら約 3.5 日、15 分足なら約 52 日、1 時間足なら約 208 日分で、1 回の呼び出しで返ります。それより前を指定しても、残っている最も古い足から返るだけです。資金調達履歴など時間範囲で取るエンドポイントは 1 回 500 件まで(userFillsByTime は 2,000 件まで、そもそも残っているのは直近 10,000 件)なので、最後のタイムスタンプを次の startTime にしてページ送りします。
API で取れる履歴の範囲
下表の上限は 2026年10月19日に公式ドキュメントで確認し、記載のあるものは同日に実際の API でも確かめました。API で足りない分は、右端の列の S3 データセット(転送料は取得者負担)で補えます。
| データ | info リクエスト | 遡れる範囲 | それより古い履歴(S3) |
|---|---|---|---|
| ローソク足(OHLCV) | candleSnapshot | 銘柄・時間足ごとに直近 5,000 本。時間足は 14 種類(1m〜1M) | なし(S3 にローソク足はない) |
| 資金調達率の履歴 | fundingHistory | 1 回 500 行、最後の時刻でページ送り。BTC は 2023年5月12日まで遡れた(2026年10月19日確認) | 日次のアセット情報(asset_ctxs) |
| 自分の資金調達の支払い | userFunding | 1 回 500 行、時間範囲でページ送り | misc_events_by_block(ノードデータ) |
| 自分の約定 | userFills / userFillsByTime | 1 回 2,000 件。残っているのは直近 10,000 件のみ | node_fills_by_block(全約定) |
| 自分の注文履歴 | historicalOrders | 直近 2,000 件 | – |
| 自分の TWAP 子注文の約定 | userTwapSliceFills | 直近 2,000 件 | – |
| 市場全体の約定 | recentTrades / WebSocket trades | 直近の約定のみ(2026年10月19日の BTC は 10 件) | node_fills_by_block |
| 板 | l2Book | 現在のスナップショットのみ | 1 時間ごとの L2 スナップショット(market_data) |
| 建玉・マーク・オラクル価格 | metaAndAssetCtxs | 現在値のみ | 日次のアセット情報(asset_ctxs) |
資金調達率の履歴も他の時間範囲リクエストと同じくページ送りします。開始時刻から取得し、次の呼び出しは最後の行の 1 ミリ秒後から。2026年10月4日にはこれで BTC の 60 日分(毎時 1,440 行)を 3 回で取得できました。
Python — 資金調達率の履歴をページ送りで取得
import time
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True)
start = int(time.time() * 1000) - 60 * 24 * 60 * 60 * 1000 # 60 日分の毎時の資金調達率 = 1,440 行
rows = []
while True:
page = info.funding_history("BTC", start) # 1 回最大 500 行
rows += page
if len(page) < 500:
break
start = page[-1]["time"] + 1 # 次のページは最後の行の直後から
print(len(rows), "funding rows; latest", rows[-1]["fundingRate"]) Python — ローソク足を CSV に保存
import csv
import time
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True)
end = int(time.time() * 1000)
start = end - 200 * 24 * 60 * 60 * 1000 # 1 時間足 200 日分 = 4,800 本(取得できるのは直近 5,000 本まで)
rows = info.candles_snapshot("BTC", "1h", start, end)
with open("btc_1h.csv", "w", newline="") as fh:
w = csv.writer(fh)
w.writerow(["open_time_ms", "open", "high", "low", "close", "volume", "trades"])
for c in rows:
w.writerow([c["t"], c["o"], c["h"], c["l"], c["c"], c["v"], c["n"]])
print(len(rows), "candles written") 2026年9月26日に BTC 1 時間足を 400 日分要求したところ、返ってきたのは 5,001 行(確定済みの直近 5,000 本+進行中の 1 本)で、ウェイトは 20 に加えて 60 本ごとの追加分がかかります。さらに古いデータは、公式の Historical data ページにある S3 バケット(転送料は取得者負担)から取れます:hyperliquid-archive に 1 時間ごとの L2 板スナップショットと日次のアセット情報(おおむね月 1 回更新、欠損の可能性あり)、hl-mainnet-node-data に約定、エクスプローラーのブロック、L1 トランザクション。S3 にローソク足はないので、約定から作るか WebSocket で自分で記録します。
日足だけは全期間が返りますが、BTC の日足は 2020年8月19日から始まり、最初の 921 本は価格があるのに出来高・約定数ともゼロです(2026年10月14日確認。Hyperliquid で実際に約定があるのは 2023年2月26日から)。バックテストでは n > 0 の足だけを使ってください。時間足ごとに遡れる期間、約定・板・清算・建玉の履歴の取り方、S3 のバケット構成、有料プロバイダーの比較は、英語の Hyperliquid historical data ガイド(英語)にまとめています。
シェル — S3 アーカイブ(AWS CLI+lz4)
# 1 時間ごとの L2 板スナップショット(S3 の転送料は取得者負担、LZ4 圧縮) aws s3 cp s3://hyperliquid-archive/market_data/20230916/9/l2Book/SOL.lz4 . --request-payer requester unlz4 --rm SOL.lz4 && head -c 400 SOL
取ったデータで戦略を検証するときの落とし穴は4つです。①先読み:同じ足の終値でシグナルを出してその終値で約定させない(確定足で判断し、次の足で約定)。②コスト:テイカー0.045%の往復と1時間ごとの資金調達を必ず差し引く(2026年10月19日に BTC 4時間足の EMA20/50 を1年分検証した例では、手数料・スリッページ・資金調達を引く前の +22.75% が +16.70% に下がり、コストで年約6ポイント削られました)。③スリッページ:ローソク足は約定した価格で、あなたのサイズで取れた価格ではない(薄いアルトは数十bp)。④過剰最適化と生存者バイアス:同じ例でも EMA を10/30 に変えるだけで +16.70% が −48.48% に反転しました。期間を前半・後半に分けて前半で調整し、後半で1回だけ検証すること、上場廃止銘柄も含めることが基本です。コードを書かない検証は TradingView 連携のストラテジーテスターでもできます。
12. 設計時に必ず考慮するレート制限
| 範囲 | 上限 | 補足 |
|---|---|---|
| REST ウェイト(IP ごと) | 毎分 1,200 | info、exchange、explorer リクエストで共有 |
| Exchange アクションのウェイト | 1 + floor(バッチ長 / 40) | 注文 1 件 = 1。79 件のバッチ = 2 |
| 軽い info 呼び出し | ウェイト 2 | l2Book、allMids、clearinghouseState、orderStatus、spotClearinghouseState、exchangeStatus |
| その他の info 呼び出し | ウェイト 20 | userRole は 60。リスト系は返却 20 件ごとに加算(ローソク足は 60 本ごと)。explorer は 40 |
| WebSocket(IP ごと) | 接続 10 本・新規 毎分 30・購読 1,000・送信 毎分 2,000 | ユーザー指定の購読は最大 10 ユーザー。同時 post は 100 |
| HyperEVM 公開 RPC(IP ごと) | 毎分 100 リクエスト | rpc.hyperliquid.xyz/evm。外部 RPC は各社の上限 |
| アドレスごと(アクションのみ) | 累計取引高 1 USDC につき 1 アクション。初期バッファ 10,000 | 枯渇後は 10 秒に 1 回。取消は min(上限 + 100,000, 上限 × 2) まで別枠 |
| 未約定注文 | 1,000 + 取引高 500万ドル ごとに 1。上限 5,000 | 1,000 件超では reduce-only とトリガー注文が拒否される |
計算例を 2 つ。IP 枠:clearinghouseState(ウェイト 2)を 100 ms ごとにポーリングすると毎分 1,200 — 枠を丸ごと使い切り、注文に回す分が残りません。同じデータは WebSocket なら無料で届きます。アドレス枠:100 ドルの注文なら、消費と同じ速さでアクションを稼ぐには約 1% の約定率が必要。20 件の注文バッチは IP ウェイト 1 ですが、アドレス枠では 20 アクションです。足りなくなったら reserveRequestWeight で 1 アクション 0.0005 USDC で追加購入できます。約 100ms ごとにバッチ送信し、ALO バッチは IOC/GTC と分け、混雑時は結果がすでに返った取消を再送しないこと。バックオフと障害時の備えは次の章で。
13. よくあるエラーと API 障害(ダウン)への備え
| 症状 | 原因 | 対処 |
|---|---|---|
User or API Wallet 0x… does not exist に自分の API ウォレットのアドレスが出る | 署名は正しいが、そのネットワークで未承認:未承認・期限切れ・置き換え済み・マスター残高ゼロで削除、またはテストネット用の設定でメインネットに送信 | 正しいネットワークの app.hyperliquid.xyz/API で新しい API ウォレットを承認し直す。マスターに残高があるか確認 |
| 同じエラーで見覚えのないアドレスが出る | 署名ミス — 不正なペイロードから無関係な署名者が復元される | SDK を使う。msgpack のフィールド順、末尾ゼロ、アドレスの小文字化、取引アクションに L1 方式を使っているか確認 |
| ポジション/残高が空で返る | エージェントのアドレスで照会した | マスター(またはサブアカウント)のアドレスで照会 |
Must deposit before performing actions | マスター未入金、または署名ミス(signing ページが両方を挙げている) | 先に入金。そのうえで上記の署名チェック |
| ノンス拒否 | ノンス再利用、時計のずれ、1 エージェントを 2 プロセスで共有 | プロセスごとにミリ秒のアトミックカウンタ。プロセスごとに 1 エージェント |
| テストネットでは動くのにメインネットで失敗 | アセット ID のハードコード(ネットワークごとに異なる) | 起動時に meta/spotMeta から ID を解決 |
| 価格が拒否される | 有効数字 5 桁超、または小数桁が多すぎる | ティック規則で丸め、末尾ゼロを削る |
HTTP 429(本文は null) | IP ウェイト枠の枯渇(同じ IP のすべての処理で共有) | 読み取りを WebSocket へ。アクションをバッチ化。ジッター付きバックオフ |
| 新規口座への初回送金が 1 USDC 少ない | 新規 HyperCore 口座の一回限りのアクティベーション手数料 | 仕様どおり(activation-gas-fee ページ) |
API 障害は実際に起きています。2025年7月29日には Hyperliquid の API がダウンし、Web アプリも使えなくなりました。ブロック生成は続いていたものの、通常のフロントエンドからはポジションの決済などができない状態が続いたと報じられています。備えとしては、scheduleCancel をかけておき、ボットが API に届かなくなっても指値が予定どおり取消されるようにする、1 時間止まっても耐えられるポジションサイズにとどめる、連続したリクエスト失敗でアラートを出す、そして t.me/hyperliquid_api の告知を追うこと。ドキュメントも WebSocket の切断は「予告なく定期的に起こり得る」と明記しており、再接続処理は必須です。
14. Hyperliquid API の料金 — 実際にかかるコスト
公式 API は無料です。キーの発行料も月額も従量課金もなく、注文・取消・変更にガス代もかかりません。ボットの実コストは取引手数料で、それは流動性を「出す」か「取る」かで決まります。基本ティア(14 日間取引高 500万ドル 未満)、1 万ドルの取引あたり:
| 約定の種類 | 料率 | 1 万ドルあたり |
|---|---|---|
| テイカー(成行/約定する IOC) | 0.045% | 4.50ドル |
| メイカー(板に残る指値/ALO) | 0.015% | 1.50ドル |
| テイカー+紹介コード(4%オフ) | 0.0432% | 4.32ドル |
| メイカー+紹介コード(4%オフ) | 0.0144% | 1.44ドル |
| 注文・取消・変更ごとのガス代 | 0 | 0ドル |
月 100 万ドルを回すボットは、常にテイカーなら 450ドル、常に ALO で置くなら 150ドル — 注文種別の一語で 3 倍の差です。紹介コード経由で登録すれば、最初の 2,500万ドル 分はどちらの料率も 4% 引き(マスターアカウントのみ。サブアカウントとボルトは対象外で、コードは取引高が 10,000ドル を超える前に入力する必要があります)。100 HYPE 以上をステーキングするとさらに 10% 引き。それ以外の費用は、入金時の元チェーンのガス、USDC 出金の 0.2 USDC(+ごく少額の HyperEVM ガス代)、新規 HyperCore 口座への初回送金時に一度だけかかる 1 USDC のアクティベーション手数料だけです。料率表の全体は Hyperliquid の手数料解説へ。比較すると、Lighter のスタンダード口座は 0%/0%、Aster の板取引はテイカー 0.04%/メイカー 0% です。
有料の Hyperliquid API プロバイダーが売っているのは「アクセス」ではなく「容量」です。HypeRPC は公開 API の 1:1 レプリカを集計 10 倍の上限(REST 毎分ウェイト 12,000)と東京リージョンで月 1,999ドル、Dwellir は gRPC 配信を月 299ドル〜、板サーバーを月 199ドル〜(別途従量)、専用ノードを月 4,000ドル〜で提供、Quicknode や Chainstack なども HyperEVM の RPC や info エンドポイントを提供しています(各社価格は2026年9月26日確認)。正直なところ、大半の読者にはどれも不要です。数銘柄を扱う戦略なら公開の上限で十分回り、上限を超えるのは数千のウォレットを追跡する、数十銘柄に気配を出す、アーカイブデータが要る、といった場合だけ。まず無料 API で始めて userRateLimit を見張り、数字が必要と言ったときにインフラへ投資してください。
CCXT を使う場合は、複数取引所ボットには便利ですが、Hyperliquid クラスの既定値を 2 つ確認してください(2026年9月26日にソースを確認):初回利用時に CCXT 自身のビルダーアドレスへの 0.01% のビルダー手数料を承認しようとし、承認が成立すると builderFee を false にしない限り全注文にその手数料を付けること(この承認はユーザー署名アクションなので、privateKey がメインウォレットの鍵のときだけ通る — CCXT には API ウォレットの鍵を渡すべきもう一つの理由です)、そして紹介コード未設定の口座に独自のコードを登録しようとすること。どちらも明示的に指定しておきます(ビルダー手数料の承認・課金・取り消しの仕組みはハイパーリキッドのビルダーコードで解説しています)。サンプルには当サイトのコード HOLYGRAIL を入れています(末尾の開示を参照)。どのコードでも構いませんが、割引が付くのは取引高が 10,000ドル を超える前にコードを設定した場合だけです。
Python — CCXT
import ccxt # pip install ccxt
ex = ccxt.hyperliquid({
"walletAddress": "0xメインウォレットのアドレス", # マスターの公開アドレス
"privateKey": "0xAPIウォレットの秘密鍵", # API ウォレットの秘密鍵
"options": {
"builderFee": False, # 指定しないと CCXT 独自の 0.01% ビルダー手数料が付く
"ref": "HOLYGRAIL", # 指定しないと紹介コード未設定の口座に CCXT のコードが入る
},
})
print(ex.fetch_ticker("BTC/USDC:USDC")["last"]) ボットの手数料を 4% 安く
最初の API 注文の前に、紹介コード HOLYGRAIL で Hyperliquid アカウントを作成してください。最初の 2,500万ドル 分の取引に自動で割引が適用され、マスターアカウントの約定なら API 注文も対象です(サブアカウントとボルトは対象外)。
15. 日本から使う開発者向けの補足
- 入金ルート。国内の暗号資産交換業者で暗号資産を購入 → 自分のウォレットへ送る → Arbitrum の USDC として Hyperliquid に入金、が基本の流れです。ボット用口座も同じで、手順と最低入金額は Hyperliquid 入金ガイドにまとめています。テストネットのフォーセットはメインネット入金済みのアドレスが条件なので、少額でも先に入金しておくと開発がスムーズです。
- 税金と約定履歴の保存。ボットの利益も手動取引と同じく雑所得・総合課税の対象です。注意したいのは、API の
userFillsで取れるのが直近 10,000 件までという点で、約定数の多いボットは数日で古い履歴に届かなくなります。下のように毎日保存しておくと、確定申告の損益計算で困りません(税務の詳細は DEX の税金と確定申告ガイド、個別の判断は税理士へ)。 - 法的な位置づけ。海外サービスを日本から使う際の考え方と注意点(国内登録業者の利用者保護が及ばない、トラブル時に国内当局を頼れない など)は Hyperliquid の使い方ガイドで整理しています。本記事は法務・税務の助言ではありません。
- 英語ドキュメントの読み方。公式ドキュメントは英語のみですが、URL 末尾に
.mdを付けた Markdown を翻訳ツールや LLM に渡すと、表やコードを崩さずに読めます。
Python — 約定履歴を毎日保存
import json
import time
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True)
address = "0xメインウォレットのアドレス"
since = int(time.time() * 1000) - 7 * 24 * 60 * 60 * 1000 # 直近 7 日分(cron で毎日回す想定)
fills = info.user_fills_by_time(address, since) # 1 回最大 2,000 件。多ければ最後の time から続きを取る
with open(f"fills_{time.strftime('%Y%m%d')}.json", "w") as fh:
json.dump(fills, fh, ensure_ascii=False, indent=1)
print(len(fills), "fills saved") 16. 本番注文前のセーフティチェックリスト
- マスター鍵はボットのホストに置かない。エージェント鍵はシークレット管理へ、git には絶対に入れない。
- テストネットが先:同じコード、
api.hyperliquid-testnet.xyz、フォーセットの USDC で、発注 → 約定 → 取消 → 再接続を一巡させる。 - 実験用エージェントの有効期間は 30 日。期限前に新しい鍵でローテーションし、再利用はしない。
- デッドマンスイッチ(
scheduleCancel)を毎ループかけ直す。 - ポジション・損失・メッセージ数の上限をコードで強制 — エージェントは BTC 40倍 を開けてしまうので、ボット側で拒否させる。
- 戦略ごとに専用サブアカウント+専用エージェント — サブアカウント解説を参照。
- 法人・ファンドで運用するなら、マルチシグでの保管と記録の出し方を法人・機関投資家のDEX取引ガイドで確認。
- 最小サイズの本番注文を 1 件出し、マスターアドレス側に表示されること、手数料の行が正しいことを確認してから残りを取消す。
よくある質問
Hyperliquid API の公式ドキュメントはどこにありますか?
公式ドキュメントは GitBook の hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api です(英語のみ)。info エンドポイント、exchange エンドポイント、WebSocket、ノンスと API ウォレット、署名、エラー、レート制限のページに分かれています。各ページの URL 末尾に .md を付けると Markdown で読め、/llms.txt が全体の索引です。公式 Python SDK は github.com/hyperliquid-dex/hyperliquid-python-sdk、API ウォレットの発行は app.hyperliquid.xyz/API です。
ハイパーリキッド(Hyperliquid)に API はありますか?
あります。公開 REST API として、市場・口座データを読む POST https://api.hyperliquid.xyz/info と、注文などの署名付きアクションを送る POST https://api.hyperliquid.xyz/exchange の 2 つがあり、さらにリアルタイム配信用の WebSocket(wss://api.hyperliquid.xyz/ws)があります。同じ仕様のテストネットが api.hyperliquid-testnet.xyz で動いています。
Hyperliquid の API キーはどうやって発行しますか?
入金済みのウォレットで接続した状態で app.hyperliquid.xyz/API を開き、API ウォレットに名前を付けて Generate をクリック、表示された秘密鍵(これが「API キー」)を控え、必要なら有効期間を選んで Authorize をクリックし署名します。ボットはこの秘密鍵で署名し、データ照会にはメインウォレットのアドレスを使います。1 アカウントにつき無名 1 つ+名前付き最大 3 つ、サブアカウントごとにさらに名前付き 2 つまでで、有効期間は最長 180日 です。
Hyperliquid API の利用料金はいくらですか?
無料です。API の月額料金やプランはなく、注文・取消・変更にガス代もかかりません。約定時の取引手数料(基本ティアでテイカー 0.045%/メイカー 0.015%、紹介コードで 4% 引き)だけで、公開レート制限(IP ごとに REST 毎分ウェイト 1,200)が呼び出し量の上限です。上限を増やしたい場合の有料サービスもあり、HypeRPC の 10 倍上限のレプリカは月 1,999ドル、Dwellir の板配信は月 199ドル からです(2026年9月26日確認の各社価格)。
info エンドポイントと exchange エンドポイントの違いは?
info(POST /info)は読み取り専用で、価格、板、ローソク足、ポジション、未約定注文、約定、手数料ティアを任意のアドレスについてキーも署名もなしで取得できます。exchange(POST /exchange)は状態を変える側で、注文の発注・取消・変更、レバレッジ、送金、API ウォレットの承認を行います。exchange のリクエストには必ず action、nonce、ウォレットまたは承認済み API ウォレットによる EIP-712 署名が付きます。
HyperCore の API と HyperEVM の違いは?
HyperCore は Hyperliquid 本来の取引レイヤー(板、証拠金、ボルト)で、/info、/exchange、WebSocket で操作します。HyperEVM は同じ HyperBFT コンセンサスで動く EVM スマートコントラクト環境で、標準の JSON-RPC(rpc.hyperliquid.xyz/evm、チェーン ID 999、テストネットは 998)を使い、ガス代は HYPE です。取引ボットは HyperCore の API、コントラクトや EVM 上のトークンは HyperEVM を使います。
API ウォレットで出金できますか?
できません。API(エージェント)ウォレットが署名できるのは取引系のアクションだけです:注文、取消、変更、レバレッジ変更、TWAP、自分の無期限と現物残高の間の振替。出金、他アドレスへの USDC 送金、別のエージェントの承認はマスターウォレットの鍵が必要な「ユーザー署名」アクションです。API キーが盗まれると口座で不利な取引をされる恐れはありますが、資金を外へ送られることはありません。
Hyperliquid API のレート制限は?
IP ごと:REST は毎分ウェイト 1,200(バッチなしの注文は 1、ほとんどの info は 20、板や口座のスナップショットは 2)、WebSocket は接続 10 本、購読 1,000、送信毎分 2,000 メッセージ。アドレスごと:累計取引高 1 USDC につき 1 アクションで、初期バッファ 10,000 回。枯渇すると 10 秒に 1 回になりますが、取消には別枠の余裕があります。
Python 以外の SDK や CCXT は使えますか?
使えます。公式は hyperliquid-python-sdk(pip install hyperliquid-python-sdk、2026年10月19日時点で 0.24.0)で、自作すると躓きやすい msgpack と EIP-712 の署名を処理してくれます。ドキュメントからは Rust の hypersdk、TypeScript の @nktkas/hyperliquid と hyperliquid(nomeida)、CCXT がリンクされています。CCXT は walletAddress にメインのアドレス、privateKey に API ウォレットの秘密鍵を入れれば動きます。ただし既定では、CCXT 自身のビルダーアドレスへの 0.01% のビルダー手数料の承認(メインウォレットの鍵で署名したときだけ成立)と、紹介コード未設定の口座への CCXT のコード登録を試みるので、builderFee と ref のオプションを明示的に指定してください。
Hyperliquid で自動売買ボットを作るには?
メイン口座に入金し、app.hyperliquid.xyz/API で API ウォレットを発行、Python SDK を入れて Info で価格を読み、Exchange で発注します(account_address=メインのアドレス、secret_key=API ウォレットの秘密鍵)。まずテストネットで動かすこと。実運用では WebSocket でデータを受け、注文と取消を 100ms ごとにまとめて送り、可能な限りポストオンリー(ALO)を使い、scheduleCancel をデッドマンスイッチとして毎回かけ直し、ポジションと損失の上限をコードで強制します。
「L1 error: User or API Wallet 0x… does not exist」の原因は?
エラーに表示されたアドレスを自分の API ウォレットのアドレスと見比べてください。同じなら署名は正しく、そのネットワークで承認されていない状態です:未承認、期限切れ、新しい無名/同名エージェントで置き換え済み、マスター口座の残高ゼロによる削除、またはテストネット用の設定でメインネットに送っている、のいずれかです。見覚えのないアドレスなら署名が間違っていて別の署名者が復元されています。SDK を使い、アドレスを小文字にし、数値の末尾ゼロを削ってください。
バックテスト用の過去データは API で取得できますか?
一部だけです。candleSnapshot で取れるのは銘柄・時間足ごとに直近 5,000 本まで(1 時間足なら約 208 日、1 分足なら約 3.5 日)で、時間範囲指定の照会はおおむね 1 回 500 件までです(userFillsByTime は 2,000 件、保持されるのは直近 10,000 件のみ)。Hyperliquid は S3(転送料は取得者負担)に 1 時間ごとの板スナップショット、アセット情報、ノードの約定データを公開していますが、ローソク足はありません。長期間のデータは WebSocket で自分で記録するのが確実です。
Hyperliquid API で建玉(オープンインタレスト)を取得するには?
https://api.hyperliquid.xyz/info に {"type":"metaAndAssetCtxs"} を POST します(ウェイト 20、キー不要)。レスポンスは銘柄一覧(universe)と同じ順番のアセット情報の 2 要素で、各要素に openInterest、funding、markPx、oraclePx、premium、24 時間出来高が入ります。openInterest はコイン数なので、ドル換算は markPx を掛けます。HIP-3 の市場は "dex":"xyz" などを付け、1 銘柄をリアルタイムで追うなら WebSocket の activeAssetCtx を購読します。API に建玉の履歴はなく、過去分は公式 S3 アーカイブの日次アセット情報を使います。
Hyperliquid API でローソク足(OHLCV)を取得するには?
info エンドポイントに {"type":"candleSnapshot","req":{"coin":"BTC","interval":"1h","startTime":<ミリ秒>,"endTime":<ミリ秒>}} を POST するか、Python SDK の info.candles_snapshot() を使います。時間足は 1m〜1M の 14 種類で、取れるのは銘柄・時間足ごとに直近 5,000 本まで。各足は t と T(足の開始・終了時刻)、o、h、l、c、v(出来高、コイン数)、n(約定回数)を持ちます。HIP-3 の銘柄は "xyz:XYZ100" のように DEX 名を付け、リアルタイムの足は WebSocket の candle を購読します。
Hyperliquid の清算データは API で取れますか?
市場全体の清算を返すリクエストはありません。取れるのはアドレスごとで、userFills の約定のうち清算分には liquidation(清算されたユーザー、マーク価格、market か backstop か)が付き、userNonFundingLedgerUpdates(startTime の指定が必須)には種類 "liquidation" の記録が残り、WebSocket の userEvents が清算をリアルタイムで配信します。取引所全体の清算の履歴は、公式 S3 アーカイブの約定データ(node_fills_by_block)を自分で解析するか、外部のデータプロバイダーを使います。
API で自動売買できる DEX はどこですか?Hyperliquid 以外は?
主要なオーダーブック型のパープ DEX はすべて対応しています。ハイパーリキッド、ライター(Lighter)、アスター(Aster)、エッジエックス(edgeX)、dYdX はいずれも REST と WebSocket の公開 API と公式 SDK かサンプルコードを持っています。違いはボット用の鍵で出金できるかどうかとレート制限で、ハイパーリキッドの API ウォレットは出金不可、ライターは無料の Standard 口座で毎分60リクエスト、アスターは Binance 先物とほぼ同じ API です(2026年9月27日確認)。
プログラミングなしで Hyperliquid の自動売買はできますか?
できます。注文画面の TWAP(30秒以上の間隔で子注文、最長7日)、Scale(指値のはしご)、Chase(ポストオンリー注文の自動再配置)は API キーもコードも不要で、通常の取引手数料だけで使えます。標準のグリッドボットはないため、グリッドなら Scale で代用するか外部ボットを使います。外部ボットは builder fee(パープで最大0.1%)が上乗せされることがあるので、Builder Codes ページで承認を確認してください。
Hyperliquid API はテストネットでも使えますか?
使えます。接続先を https://api.hyperliquid-testnet.xyz(WebSocket は wss://api.hyperliquid-testnet.xyz/ws)にし、ユーザー署名アクションの hyperliquidChain を "Testnet" にします。フォーセットで 1,000 USDC のテスト用 USDC を受け取れますが、同じアドレスでメインネットに入金済みであることが条件です。アセット ID はネットワークごとに異なる(HYPE の現物インデックスはメインネット 107、テストネット 1035。注文で使う asset は 10107 と 11035)ので、meta/spotMeta から取得し、ハードコードしないでください。
最初の本番注文の前に
入金の前に紹介コード HOLYGRAIL で口座を作成してください。コードは取引量が 10,000ドル を超えると入力できません。登録すると最初の 2,500万ドル 分の手数料が 4% 引きになり、マスターアカウントの約定なら API 注文も対象です(サブアカウントとボルトは対象外)。
開示:HOLYGRAIL は当サイトの Hyperliquid 紹介コードで、紹介したアカウントの手数料の一部を受け取ります(利用者の負担が増えることはありません)。API の挙動と上限は Hyperliquid の公式ドキュメント、公式 Python SDK、実際の API レスポンスに基づき、2026年10月19日に再確認しています。コードはテストネットでの利用を前提に現状のまま提供します。本記事は投資助言ではありません。