Claude CodeでHyperliquid自動売買ボットを作る完全手順【2026年版】Python SDK・ファンディング収益・ポジション管理まで
Claude CodeでHyperliquid自動売買ボットを作る完全手順【2026年版】Python SDK・ファンディング収益・ポジション管理まで
取引量世界第1位のパープDEX「Hyperliquid」には、公式Python SDKと充実したAPIが整備されており、Claude Codeを使えばプログラミング初心者でも数時間で自動売買ボットを構築できます。
本記事では「Hyperliquidのボットを作りたいけど何から始めればいい?」という疑問を解消します。環境構築から実際のコード生成・テスト・本番稼働まで、Claude Codeとの対話ログを交えて完全解説します。
✅ この記事でわかること
- Hyperliquid Python SDKのインストールとAPI認証セットアップ(テストネット→本番)
- Claude Codeへの指示だけでコード生成→テスト→修正を完結させる手順
- ファンディングレート監視→自動エントリー・クローズの基本ボット実装
- WebSocketでリアルタイム価格・ポジション管理を行う応用パターン
- TWAP・ScaleオーダーなどHyperliquid固有の注文タイプの使い方
- 手数料ティア・HYPEステーキング割引によるコスト最適化
⚠️ リスク注意
自動売買ボットはプログラムのバグ・ネットワーク障害・想定外の相場変動により意図しない取引が発生する可能性があります。必ずテストネットで十分に検証し、本番環境では少額から始めてください。本記事は情報提供を目的とし、投資を推奨するものではありません。
なぜClaude Code × Hyperliquidなのか?
Hyperliquidが選ばれる3つの理由
2026年5月時点でHyperliquidはDeFiLlamaの月間パープDEX取引量で世界第1位($185B超)を維持しています。個人トレーダーから機関投資家まで、なぜHyperliquidを選ぶのでしょうか。
| 月間取引量 | 世界1位($185B超) |
| 基盤 | HyperEVM(独自L1) |
| 最大レバレッジ | 50倍 |
| Maker手数料 | 0.015%(Tier 0)→ 大量取引でマイナスリベートへ |
| 公式API | Python SDK・Rust・TypeScript・CCXT対応 |
| テストネット | 完備(本番前の動作確認が可能) |
| KYC | 不要 |
Claude Codeが自動売買開発を革命的に変える
従来、ボット開発には数週間〜数ヶ月のプログラミング学習が必要でした。Claude Codeを使えば、「ファンディングレートが0.05%を超えたらBTCをショート、0.01%を下回ったらクローズするボットを作って」という日本語の指示だけでコードが生成されます。
- Hyperliquid Python SDKの使い方をClaudeが熟知しており、正確なコードを生成
- エラーが出てもClaudeがデバッグ・修正まで対応
- テストネットでの動作確認→本番移行の手順も指示通りに進む
Step 1:環境構築
必要なもの
- ☑ Python 3.10以上(インストール済みであること)
- ☑ Claude Code(
npm install -g @anthropic-ai/claude-code) - ☑ Hyperliquidアカウント(MetaMask等のウォレット接続のみ・KYC不要)
- ☑ ウォレットの秘密鍵 or APIウォレット(後述)
Python SDKのインストール
プロジェクトフォルダを作成してSDKをインストールします。
# プロジェクトフォルダ作成 mkdir hl-bot && cd hl-bot # 仮想環境作成(推奨) python -m venv venv source venv/bin/activate # Mac/Linux # venv\Scripts\activate # Windows # Hyperliquid Python SDK インストール pip install hyperliquid-python-sdk # その他必要なライブラリ pip install python-dotenv requests
APIウォレットの設定(推奨)
Hyperliquidのボット運用には、メインウォレットの秘密鍵を直接使う方法と、専用のAPIウォレットを生成する方法があります。セキュリティ上、APIウォレットを強く推奨します。
- Hyperliquid UIにアクセスし Settings → API を開く
- 「Generate API Wallet」をクリック → 新しいウォレットアドレスと秘密鍵が生成される
- メインウォレットで署名して APIウォレットに権限を付与
- APIウォレットに少額のUSDCを転送してテスト
💡 APIウォレットのメリット:万が一ボットが乗っ取られても、APIウォレットに入れた資金だけが対象。メインウォレットの全資産は安全。APIウォレットは最大$1Mのポジションを開けます。
設定ファイル(.env)を作成します。
# .env(Gitにコミットしない!) HL_ACCOUNT_ADDRESS=0xあなたのウォレットアドレス HL_SECRET_KEY=0xあなたのAPIウォレット秘密鍵 HL_USE_TESTNET=true # テスト中はtrue、本番はfalse
Step 2:Claude Codeを起動してボットを生成する
Claude Codeの起動
cd hl-bot claude
基本ボットのコード生成(プロンプト例)
Claude Codeに以下のように指示します。
💬 Claude Codeへの指示(コピーして使えます)
Hyperliquid Python SDKを使ったファンディングレート監視ボットを作成してください。
要件:
– .envファイルからHL_ACCOUNT_ADDRESS、HL_SECRET_KEY、HL_USE_TESTNETを読み込む
– テストネット/本番を環境変数で切り替え可能にする
– BTCのファンディングレートを1時間ごとに取得する
– ファンディングレートが+0.05%(年率換算+43.8%)を超えたらBTCをショート(証拠金の20%、レバレッジ3倍)
– ファンディングレートが+0.01%を下回ったらショートポジションをクローズ
– ポジション開設・クローズ・エラーをログファイルに記録する
– すでにポジションがある場合は重複エントリーしない
生成されるコードの解説
Claude Codeが生成するコード(funding_bot.py)の主要部分を確認します。
import os, time, logging, math
from dotenv import load_dotenv
from hyperliquid.info import Info
from hyperliquid.exchange import Exchange
from hyperliquid.utils import constants
from eth_account import Account
load_dotenv()
# ── 設定 ──────────────────────────────
ACCOUNT = os.getenv("HL_ACCOUNT_ADDRESS")
SECRET = os.getenv("HL_SECRET_KEY")
TESTNET = os.getenv("HL_USE_TESTNET", "true").lower() == "true"
BASE_URL = constants.TESTNET_API_URL if TESTNET else constants.MAINNET_API_URL
COIN = "BTC"
ENTRY_THRESHOLD = 0.0005 # ファンディング +0.05% でショートエントリー
EXIT_THRESHOLD = 0.0001 # ファンディング +0.01% でクローズ
MARGIN_RATIO = 0.20 # 証拠金の20%を使用
LEVERAGE = 3 # 3倍レバレッジ
BTC_MIN_SZ = 0.001 # BTC最小発注量
# ── ロギング設定 ───────────────────────
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s",
handlers=[
logging.FileHandler("bot.log"),
logging.StreamHandler()
]
)
log = logging.getLogger(__name__)
# ── SDK初期化 ──────────────────────
wallet = Account.from_key(SECRET)
info = Info(BASE_URL, skip_ws=True)
exchange = Exchange(wallet, BASE_URL, account_address=ACCOUNT)
def get_funding_rate(coin: str) -> float:
"""現在のファンディングレートを取得"""
meta = info.meta_and_asset_ctxs()
universe = meta[0]["universe"]
ctxs = meta
for i, asset in enumerate(universe):
if asset["name"] == coin:
return float(ctxs[i]["funding"])
return 0.0
def get_position(coin: str):
"""現在のポジションを取得(szi=0のクローズ済みは除外)"""
state = info.user_state(ACCOUNT)
for pos in state["assetPositions"]:
if pos["position"]["coin"] == coin:
if float(pos["position"]["szi"]) != 0: # ← szi=0除外(バグ2修正)
return pos["position"]
return None
def get_usdc_balance() -> float:
"""証拠金残高を取得"""
state = info.user_state(ACCOUNT)
return float(state["marginSummary"]["accountValue"])
def main():
log.info(f"ボット起動 | {'\u30c6\u30b9\u30c8\u30cd\u30c3\u30c8' if TESTNET else '\u672c\u756a'} | {COIN}")
while True:
try:
rate = get_funding_rate(COIN)
pos = get_position(COIN)
balance = get_usdc_balance()
log.info(f"ファンディング: {rate*100:.4f}% | 残高: ${balance:.2f}")
# エントリー条件:ファンディング高+ポジションなし
if rate >= ENTRY_THRESHOLD and pos is None:
mid_price = float(info.all_mids().get(COIN, 0)) # ← 文字列→float変換(バグ1修正)
if mid_price == 0:
log.warning(f"{COIN}の価格取得失敗 → スキップ")
time.sleep(3600)
continue
sz = (balance * MARGIN_RATIO * LEVERAGE) / mid_price
sz = math.floor(sz * 10**5) / 10**5 # ← floor+5桁精度(バグ2修正)
if sz < BTC_MIN_SZ: # ← 最小発注量チェック(バグ4修正)
log.warning(f"発注量 {sz} BTC が最小サイズ未満(最小: {BTC_MIN_SZ} BTC)→ スキップ")
time.sleep(3600)
continue
result = exchange.market_open(COIN, False, sz) # False=Short
log.info(f"ショートエントリー {sz} BTC | 結果: {result}")
# クローズ条件:ファンディング低下+ポジションあり
elif rate < EXIT_THRESHOLD and pos is not None:
result = exchange.market_close(COIN)
log.info(f"クローズ | 結果: {result}")
except Exception as e:
log.error(f"エラー: {e}")
time.sleep(3600) # 1時間待機
if __name__ == "__main__":
main()
Step 3:テストネットで動作確認
テストネット用USDCの取得
テストネットで動かすには、テスト用USDCが必要です。
- Hyperliquid テストネット(
app.hyperliquid-testnet.xyz)にアクセス - MetaMaskをArbitrum Sepoliaテストネットに切り替え
- 「Deposit」から 「Testnet USDC」を取得(フォーセットから無料取得可)
ボットの起動と確認
# テストネットで起動(.envのHL_USE_TESTNET=true を確認)
python funding_bot.py
# ログ出力例
# 2026-05-27 10:00:01 INFO ボット起動 | テストネット | BTC
# 2026-05-27 10:00:02 INFO ファンディング: +0.0312% | 残高: $1000.00
# 2026-05-27 11:00:01 INFO ファンディング: +0.0521% | 残高: $1000.00
# 2026-05-27 11:00:02 INFO ショートエントリー 0.0063 BTC | 結果: {'status': 'ok', ...}
💡 Claude Codeでのデバッグ:エラーが出たらログを貼り付けて「このエラーを修正して」と指示するだけで自動修正されます。「テスト用に閾値を0.0001に下げて動作確認できるようにして」など細かい修正も日本語で指示できます。
Step 4:応用パターン——WebSocketでリアルタイム対応
WebSocketサブスクリプション一覧
1時間ごとのポーリングより、WebSocketのリアルタイムストリームを使うとより精度の高いボットになります。
主要WebSocketチャンネル
| チャンネル | 取得できるデータ | 活用場面 |
|---|---|---|
allMids |
全アセットの中値 | リアルタイム価格監視 |
l2Book |
オーダーブックスナップショット | スプレッド・流動性確認 |
trades |
約定履歴 | 大口注文の検出 |
userFundings |
ファンディング受払い履歴 | 実際の収益確認 |
clearinghouseState |
証拠金・ポジション | リアルタイム残高監視 |
candle |
OHLCVローソク足 | テクニカル分析 |
TWAPオーダーによる大口注文の分割
一度に大量のBTCを注文するとスリッページが発生します。HyperliquidのTWAPオーダーは30秒ごとに自動分割して約定し、スリッページを3%以内に制御します。
Claude Codeへの指示例:
「BTCを$10,000分、TWAP注文で20分かけて分割してショートするコードを追加して。Hyperliquid SDKのtwap_orderメソッドを使って」
Hyperliquid 手数料ティアとコスト最適化
手数料ティア(14日間取引量ベース)
| Tier | Perps Maker | Perps Taker | 14日取引量 |
|---|---|---|---|
| Tier 0(全員) | 0.015% | 0.045% | $0〜 |
| Tier 2 | 0.008% | 0.035% | $25M〜 |
| Tier 4 | 0.000% | 0.028% | $500M〜 |
| 大量Maker (>3%) | -0.003% | — | Maker比率条件 |
HYPEステーキングによる手数料割引
$HYPEトークンをステーキングすると、手数料に割引が適用されます。
- 10 HYPE ステーク(Wood):手数料 5% OFF
- 100 HYPE ステーク(Bronze):手数料 10% OFF
- 1,000 HYPE ステーク(Silver):手数料 15% OFF
- 10,000 HYPE ステーク(Gold):手数料 20% OFF
$HYPEはBitgetで購入可能です。Hyperliquidに送金してステーキングすることで即時割引が適用されます。
注文タイプ別 Claude Codeへの指示テンプレート
ボットに実装したい機能を日本語で指示するためのテンプレートです。
📋 指示テンプレート集
スケールオーダー(複数指値を均等配置)
「BTCを現在価格の±2%の範囲に10本の指値ショートを均等に並べるScaleオーダーを実装して」
ストップロス・テイクプロフィット
「エントリー後、自動的にエントリー価格+3%にストップロス、-5%にテイクプロフィットをセットするコードを追加して」
WebSocketリアルタイム監視
「WebSocketのallMidsとuserFundingsを購読して、価格が5%急変したら自動でポジションをクローズする安全装置を追加して」
複数アセット対応
「BTC・ETH・SOLの3アセットについて同時にファンディングレートを監視して、最もレートが高いものだけにポジションを持つよう変更して」
よくある質問(FAQ)
Q. 秘密鍵を使うのが怖いです。安全ですか?
A. APIウォレットを使えばメインウォレットの秘密鍵は不要です。APIウォレットには必要最小限の資金のみ入れ、.envファイルをGitにコミットしないよう.gitignoreに追加してください。
Q. テストネットと本番で挙動は同じですか?
A. APIの仕様は同一ですが、テストネットの流動性・ファンディングレートは本番と異なります。テストネットでロジックの動作確認をしたあと、少額資金で本番テストすることを推奨します。
Q. Claude Codeなしで使えますか?
A. 使えます。Hyperliquid Python SDKの公式GitHubには豊富なサンプルコードがあります。ただしClaude Codeを使うと「英語のドキュメントを読む手間」「デバッグの時間」が大幅に削減できます。
Q. ファンディングレート以外の戦略はありますか?
A. Claude Codeへの指示を変えるだけで、①移動平均クロスオーバー②オーダーブック不均衡検出③価格帯グリッドトレード④Hyperliquidウェールのポジションコピーなど、さまざまな戦略を実装できます。まずファンディングボットで慣れてから拡張するのがおすすめです。
まとめ
Claude CodeとHyperliquid Python SDKを組み合わせれば、プログラミング初心者でも1日以内に自動売買ボットを稼働させることができます。
📌 開発ステップ まとめ
- Python環境 + SDKインストール(
pip install hyperliquid-python-sdk) - APIウォレット生成(Hyperliquid Settings → API)
.envファイルに認証情報を設定- Claude Codeに日本語でボット仕様を指示→コード生成
- テストネットで動作確認 → 本番移行
月間取引量世界1位のHyperliquidで自動売買を動かし、ファンディングレートの収益を積み上げましょう。まずはBitgetでUSDCかHYPEを購入して、Hyperliquidへの入金から始めてください。
関連記事
for i, asset in enumerate(universe):
if asset["name"] == coin:
return float(ctxs[i]["funding"])
return 0.0
def get_position(coin: str):
"""現在のポジションを取得(szi=0のクローズ済みは除外)"""
state = info.user_state(ACCOUNT)
for pos in state["assetPositions"]:
if pos["position"]["coin"] == coin:
if float(pos["position"]["szi"]) != 0: # ← szi=0除外(バグ2修正)
return pos["position"]
return None
def get_usdc_balance() -> float:
"""証拠金残高を取得"""
state = info.user_state(ACCOUNT)
return float(state["marginSummary"]["accountValue"])
def main():
log.info(f"ボット起動 | {'\u30c6\u30b9\u30c8\u30cd\u30c3\u30c8' if TESTNET else '\u672c\u756a'} | {COIN}")
while True:
try:
rate = get_funding_rate(COIN)
pos = get_position(COIN)
balance = get_usdc_balance()
log.info(f"ファンディング: {rate*100:.4f}% | 残高: ${balance:.2f}")
# エントリー条件:ファンディング高+ポジションなし
if rate >= ENTRY_THRESHOLD and pos is None:
mid_price = float(info.all_mids().get(COIN, 0)) # ← 文字列→float変換(バグ1修正)
if mid_price == 0:
log.warning(f"{COIN}の価格取得失敗 → スキップ")
time.sleep(3600)
continue
sz = (balance * MARGIN_RATIO * LEVERAGE) / mid_price
sz = math.floor(sz * 10**5) / 10**5 # ← floor+5桁精度(バグ2修正)
if sz < BTC_MIN_SZ: # ← 最小発注量チェック(バグ4修正)
log.warning(f"発注量 {sz} BTC が最小サイズ未満(最小: {BTC_MIN_SZ} BTC)→ スキップ")
time.sleep(3600)
continue
result = exchange.market_open(COIN, False, sz) # False=Short
log.info(f"ショートエントリー {sz} BTC | 結果: {result}")
# クローズ条件:ファンディング低下+ポジションあり
elif rate < EXIT_THRESHOLD and pos is not None:
result = exchange.market_close(COIN)
log.info(f"クローズ | 結果: {result}")
except Exception as e:
log.error(f"エラー: {e}")
time.sleep(3600) # 1時間待機
if __name__ == "__main__":
main()
