搭建 Hyperliquid 分析仪表盘:从零到实战
对于活跃的 Hyperliquid 交易者或量化研究员,一个实时更新的个人分析仪表盘能极大提升决策效率。本文将带你从数据采集、处理到前端可视化,搭建一套覆盖持仓监控、资金费率跟踪、盈亏分析的 Hyperliquid 仪表盘,全程使用开源工具,无需额外付费。
仪表盘应该包含哪些模块
一个实用的 Hyperliquid 仪表盘通常需要以下核心模块:
Hyperliquid 官方文档 列出了全部可用的 Info Endpoint 类型。
技术栈选型
推荐的开源技术栈:
后端数据采集:Python + requests(或 aiohttp 实现异步)
数据存储:SQLite(轻量本地)或 PostgreSQL + TimescaleDB(时序数据优化)
仪表盘框架:Grafana(功能强大,支持 SQLite/Postgres 数据源)或 Streamlit(Python 原生,适合快速原型)
实时推送:Hyperliquid WebSocket API
对于快速验证场景,Streamlit 是最佳选择;对于生产级监控,Grafana + TimescaleDB 更为稳健。
数据采集层实现
账户状态采集
import requests
import time
ENDPOINT = "https://api.hyperliquid.xyz/info"
def fetch_account_state(address: str) -> dict:
payload = {"type": "clearinghouseState", "user": address}
r = requests.post(ENDPOINT, json=payload, timeout=10)
r.raise_for_status()
return r.json()
def fetch_market_data() -> dict:
payload = {"type": "metaAndAssetCtxs"}
r = requests.post(ENDPOINT, json=payload, timeout=10)
r.raise_for_status()
return r.json()
资金费率批量采集
def fetch_all_funding_rates(coins: list, days: int = 1) -> dict:
end_ms = int(time.time() * 1000)
start_ms = end_ms - days * 24 * 3600 * 1000
results = {}
for coin in coins:
payload = {
"type": "fundingHistory",
"coin": coin,
"startTime": start_ms,
}
r = requests.post(ENDPOINT, json=payload, timeout=10)
if r.ok:
results[coin] = r.json()
return results
WebSocket 实时订阅
对于需要实时展示订单簿或最新成交的场景,使用 Hyperliquid 的 WebSocket 接口:
import asyncio
import websockets
import json
WS_URL = "wss://api.hyperliquid.xyz/ws"
async def subscribe_trades(coin: str):
async with websockets.connect(WS_URL) as ws:
sub_msg = {
"method": "subscribe",
"subscription": {"type": "trades", "coin": coin}
}
await ws.send(json.dumps(sub_msg))
while True:
msg = await ws.recv()
data = json.loads(msg)
print(data)
asyncio.run(subscribe_trades("BTC"))
WebSocket 订阅类型详见 Hyperliquid 官方文档 WebSocket 章节。
用 Streamlit 构建仪表盘 UI
import streamlit as st
import pandas as pd
import plotly.express as px
st.set_page_config(page_title="Hyperliquid Dashboard", layout="wide")
ADDRESS = st.sidebar.text_input("输入钱包地址", value="0x...")
if ADDRESS.startswith("0x"):
state = fetch_account_state(ADDRESS)
margin = state.get("marginSummary", {})
col1, col2, col3 = st.columns(3)
col1.metric("账户价值 (USDC)", f"${float(margin.get('accountValue', 0)):,.2f}")
col2.metric("可用保证金", f"${float(margin.get('withdrawable', 0)):,.2f}")
col3.metric("杠杆率", f"{float(margin.get('totalRawUsd', 0)) / max(float(margin.get('accountValue', 1)), 1):.1f}x")
positions = state.get("assetPositions", [])
if positions:
pos_data = []
for p in positions:
pos = p.get("position", {})
pos_data.append({
"币种": pos.get("coin"),
"方向": "多" if float(pos.get("szi", 0)) > 0 else "空",
"仓位大小": abs(float(pos.get("szi", 0))),
"未实现PnL": float(pos.get("unrealizedPnl", 0)),
"入场价": float(pos.get("entryPx", 0)),
})
df = pd.DataFrame(pos_data)
st.dataframe(df)
fig = px.bar(df, x="币种", y="未实现PnL", color="方向", title="各仓位未实现盈亏")
st.plotly_chart(fig, use_container_width=True)
用 Grafana 构建生产级仪表盘
若需要多人协作、历史数据告警,推荐 Grafana 方案:
启动本地 Grafana(docker run -d -p 3000:3000 grafana/grafana)
配置 PostgreSQL + TimescaleDB 数据源
编写定时 Python 脚本,每分钟将数据写入数据库
在 Grafana 中创建面板,使用 SQL 查询构建图表
配置告警规则(如资金费率超过阈值时发送通知)
Grafana 官方文档 提供了完整的面板配置指南。
OneKey 钱包:仪表盘背后的安全基础
仪表盘输入的钱包地址是只读查询,但一旦你需要根据监控结果执行交易,私钥安全就至关重要。OneKey 硬件钱包 将私钥存储在物理安全芯片中,即使你的电脑被恶意软件感染,私钥也无法被提取。
配合 OneKey Perps,你可以在仪表盘发现信号后,通过硬件签名安全执行 Hyperliquid 永续合约交易,实现"数据分析 + 安全执行"的完整闭环。
立即下载 OneKey,为你的交易系统添加硬件级安全保障。
常见问题
Q1:Hyperliquid 是否提供官方 Grafana 数据源插件?
答:目前没有官方 Grafana 插件,但可以通过 Grafana 的 JSON API 数据源或 Infinity 插件直接查询 Hyperliquid API,或通过中间数据库转存的方式实现。
Q2:WebSocket 连接会自动断开吗?
答:WebSocket 连接在长时间无活动后可能超时,建议在代码中实现心跳(ping/pong)机制和自动重连逻辑,确保数据采集的连续性。
Q3:仪表盘能否显示其他人的账户数据?
答:可以。Hyperliquid 所有账户数据均为公开链上数据,只需提供任意有效的以太坊地址即可查询。这也意味着你自己的数据对所有人可见。
Q4:如何设置资金费率异常报警?
答:可以在数据采集脚本中增加条件判断,当资金费率超过设定阈值(如 0.1% 每小时)时,通过 Telegram Bot API 或邮件发送告警。Grafana 也内置了告警功能。
Q5:Streamlit 和 Grafana 哪个更适合新手?
答:Streamlit 更适合 Python 开发者快速构建原型,几十行代码即可出图;Grafana 适合需要多人协作、长期运维的生产环境,学习曲线略陡但功能更强大。
风险提示:本文为技术教程,不构成投资建议。加密资产市场波动剧烈,仪表盘数据仅供参考,不代表未来收益预测。请在充分了解风险的前提下进行交易决策。



