Files
resonance-engine/probe_hl_oi.py
T
2026-06-08 06:34:31 +07:00

54 lines
1.9 KiB
Python

"""Check what OI data HL exposes."""
import urllib.request, json, time, pandas as pd
URL = "https://api.hyperliquid.xyz/info"
def post(body):
req = urllib.request.Request(URL, data=json.dumps(body).encode(),
headers={"Content-Type":"application/json"})
with urllib.request.urlopen(req, timeout=30) as r:
return json.loads(r.read().decode())
# 1) Current OI
print("=== metaAndAssetCtxs (current OI snapshot) ===")
r = post({"type":"metaAndAssetCtxs"})
meta, ctxs = r[0], r[1]
btc_idx = next(i for i,c in enumerate(meta["universe"]) if c["name"]=="BTC")
print(f"BTC ctx keys: {list(ctxs[btc_idx].keys())}")
print(f"BTC current ctx: {ctxs[btc_idx]}")
# 2) Try candleSnapshot — does it expose OI per bar?
print()
print("=== candleSnapshot BTC 1h ===")
start_ms = int(pd.Timestamp("2026-04-01", tz="UTC").timestamp()*1000)
end_ms = int(pd.Timestamp("2026-04-02", tz="UTC").timestamp()*1000)
r = post({"type":"candleSnapshot","req":{"coin":"BTC","interval":"1h",
"startTime":start_ms,"endTime":end_ms}})
print(f"rows: {len(r)}")
if r:
print(f"first bar keys: {list(r[0].keys())}")
print(f"sample: {r[0]}")
# 3) Try historicalState (sometimes used for asset ctxs)
print()
print("=== try historicalAssetCtxs (BTC, 4-hour ago + now) ===")
try:
now_ms = int(time.time()*1000)
r = post({"type":"historicalAssetCtxs","coin":"BTC","startTime":now_ms-4*3600*1000,"endTime":now_ms})
print(f"type ok, rows: {len(r) if isinstance(r,list) else 'n/a'}")
if isinstance(r,list) and r:
print(f"sample: {r[0]}")
else:
print(f"resp: {str(r)[:300]}")
except Exception as e:
print(f"error: {e}")
# 4) Try the funding-style approach for OI
print()
print("=== try 'openInterest' as info type ===")
try:
r = post({"type":"openInterest","coin":"BTC"})
print(f"resp: {str(r)[:400]}")
except Exception as e:
print(f"error: {e}")