Win rate Hyperliquid: profit factor y expectativa (2026)
Calcula tu win rate, profit factor y expectativa en Hyperliquid con tus fills: fórmulas, tabla de equilibrio, ejemplo real fechado y script en Python.
En resumen: el win rate es el porcentaje de tus operaciones cerradas que ganaron dinero después de comisiones. En Hyperliquid puedes calcularlo con los fills públicos, pero el resultado cambia mucho según lo que llames «operación»: cada fill de cierre, cada orden de cierre o un ciclo completo de cero a cero. Además, el win rate por sí solo no dice nada sobre el beneficio. Acompáñalo de ganancia media, pérdida media, profit factor y expectativa, y recuerda que el funding y el PnL no realizado nunca aparecen en las operaciones cerradas. En nuestra captura del 26 de octubre de 2026, una wallet del leaderboard con +1,64 millones de dólares de PnL mensual tenía un win rate por fills de cierre de solo el 36,8 % y operaciones realizadas prácticamente en tablas. Su dinero venía de posiciones abiertas y del funding.
«¿Cuál es mi win rate en Hyperliquid?» parece una pregunta sencilla. La interfaz de Hyperliquid muestra el historial y el PnL, pero no el porcentaje de acierto, así que los traders exportan los fills a una hoja de cálculo o se fían de una cifra de terceros sin saber cómo se ha contado. Esta guía explica las fórmulas, las tres formas de definir una operación (y por qué dan resultados distintos), los campos de la API de Hyperliquid que necesitas, un ejemplo real con fecha y un script corto en Python que lo calcula todo para cualquier dirección pública. No hace falta ninguna API key.
Las cuatro métricas que importan
Todas se calculan sobre operaciones cerradas y con el PnL neto de comisiones.
- Win rate = operaciones ganadoras ÷ (ganadoras + perdedoras). Las que quedan exactamente en cero no cuentan.
- Ganancia media y pérdida media = total ganado ÷ número de ganadoras, y total perdido ÷ número de perdedoras. Su cociente es el ratio de beneficio/riesgo (R).
- Profit factor = beneficio bruto ÷ pérdida bruta. Por encima de 1,0 las operaciones ganaron dinero; por debajo, lo perdieron.
- Expectativa = PnL neto ÷ número de operaciones, que equivale a win rate × ganancia media − tasa de pérdidas × pérdida media. Es lo que vale en dólares una operación media.
Las une el win rate de equilibrio: pérdida media ÷ (ganancia media + pérdida media), o 1 ÷ (1 + R). Necesitas un win rate por encima de esa línea para ganar dinero.
| Ratio (ganancia media ÷ pérdida media) | Win rate de equilibrio |
|---|---|
| 0,5 | 66,7 % |
| 1,0 | 50,0 % |
| 1,5 | 40,0 % |
| 2,0 | 33,3 % |
| 3,0 | 25,0 % |
Por eso un win rate del 35 % puede ser excelente y uno del 90 % puede ser una forma lenta de quemar la cuenta: todo depende del tamaño de las ganancias frente al de las pérdidas.
¿Qué cuenta como «operación» en Hyperliquid?
Hyperliquid registra fills (ejecuciones), no operaciones. Una orden puede ejecutarse en muchos trozos, y una posición puede ampliarse y reducirse con decenas de órdenes. Así que tienes que elegir una unidad:
- Fills de cierre. Cada fill que reduce una posición y trae
closedPnl. Es lo más fácil de calcular y lo más habitual en los dashboards, pero tiene mucho ruido: una orden partida en diez fills se convierte en diez «operaciones». - Órdenes de cierre. Fills agrupados por id de orden (
oid). Se parece más a cómo piensa un trader («cogí beneficios una vez»), pero salir de una posición en tres órdenes sigue contando como tres operaciones. - Ciclos completos (round trips). Desde que una posición se abre desde cero hasta que vuelve a quedar plana (o se da la vuelta al otro lado). Encaja con la idea de «una operación, una idea» e incluye las comisiones de los fills de entrada, que los otros dos métodos ignoran.
Ninguna es incorrecta, pero no son comparables. Si alguien te da un win rate de Hyperliquid, pregunta qué unidad ha usado. Para juzgar tus decisiones, los ciclos completos suelen ser lo más honesto; para revisar la ejecución, los fills y las órdenes son útiles.
Los campos de la API que necesitas
Todo sale del endpoint público info (POST https://api.hyperliquid.xyz/info):
userFillsByTimedevuelve los fills de una dirección en un rango de tiempo. Cada fill tienecoin,side(Bcompra,Aventa),sz,px,startPosition(el tamaño de la posición antes del fill),dir(por ejemploOpen LongoClose Short),closedPnl,feeyoid. Cada respuesta trae hasta 2.000 fills, así que hay que paginar por tiempo, y por esta vía solo se pueden consultar los 10.000 fills más recientes. Las wallets muy activas llegan a ese tope en días o incluso horas.- El campo
feeva aparte declosedPnl, así que réstalo tú para obtener el PnL neto. Una comisión negativa es un rebate de maker. userFundingdevuelve los pagos de funding. El funding no forma parte de ningún fill, así que un win rate construido con fills lo ignora. Devuelve hasta 500 filas por llamada, así que también hay que paginar.clearinghouseStatedevuelve las posiciones abiertas con suunrealizedPnl, que ninguna estadística de operaciones cerradas incluye.
Si estos campos son nuevos para ti, nuestra guía de closed PnL y la guía de PnL no realizado los explican a fondo, y cómo exportar tu historial de operaciones cubre cómo llevar los fills a una hoja de cálculo.
Un ejemplo real: la misma wallet, tres win rates
Ejecutamos el script de abajo el 26 de octubre de 2026 hacia las 08:14 UTC sobre 0x541e077ac38c56d7bf590924d249c60b0c80071d, una wallet del leaderboard público de Hyperliquid, para los 30 días anteriores. El leaderboard mostraba +1.636.619 $ de PnL en el mes (ROI del 70 %) con una cuenta de unos 1,35 millones de dólares. La wallet tuvo 1.947 fills en ese periodo, 1.924 en perps. Todas las cifras de PnL son netas de comisiones.
| Unidad | Operaciones | Win rate | Ganancia media | Pérdida media | Profit factor | Neto |
|---|---|---|---|---|---|---|
| Fills de cierre | 917 | 36,8 % | 515 $ | 299 $ | 1,00 | +478 $ |
| Órdenes de cierre | 411 | 36,3 % | 1.166 $ | 661 $ | 1,00 | +478 $ |
| Ciclos completos (abiertos y cerrados en el periodo) | 12 | 41,7 % | 1.333 $ | 1.008 $ | 0,94 | −393 $ |
Saltan a la vista tres lecciones:
- El número de operaciones pasa de 917 a 12 según la definición. Las medias por operación cambian en la misma proporción, así que nunca compares una «ganancia media» entre herramientas sin saber la unidad.
- Las cifras por fill cuadran con la fórmula de equilibrio. Con una ganancia media de 515 $ y una pérdida media de 299 $, el equilibrio está en 299 ÷ (515 + 299) ≈ 36,7 %. El win rate real fue del 36,8 %, así que el profit factor sale 1,00 y las operaciones cerradas solo dejaron 478 $.
- Las operaciones cerradas no explican casi nada del PnL del mes. En el mismo periodo la wallet cobró unos 129.042 $ de funding (4.680 pagos), y sus nueve posiciones abiertas, todas cortas, acumulaban unos 1.056.140 $ de PnL no realizado en la captura. Un dashboard de win rate diría que es un trader en tablas; la cuenta ganaba siete cifras.
Estas cifras son una captura fechada de datos en vivo y serán distintas cuando ejecutes el script.
Script en Python: win rate, profit factor y expectativa para cualquier dirección
El script pagina userFillsByTime, se queda con los fills de perps (las monedas spot empiezan por @) e imprime las tres definiciones más un desglose por moneda de los ciclos completos. Los ciclos cuya entrada fue anterior al periodo se descartan, porque les faltan las comisiones de entrada y parte del PnL. Usa unas pocas peticiones ligeras, muy por debajo de los rate limits de la API.
import requests, time, collections
from datetime import datetime, timezone
API = "https://api.hyperliquid.xyz/info"
ADDRESS = "0x541e077ac38c56d7bf590924d249c60b0c80071d" # any public address, no keys needed
DAYS = 30
def fills_since(user, start_ms):
"""Page through userFillsByTime (max 2,000 rows per call, newest 10,000 reachable)."""
out, t = [], start_ms
while True:
batch = requests.post(API, json={"type": "userFillsByTime", "user": user,
"startTime": t, "aggregateByTime": True}, timeout=15).json()
if not batch:
break
out += batch
if len(batch) < 2000:
break
t = batch[-1]["time"] + 1
return out
def stats(pnls):
wins = [p for p in pnls if p > 0]
losses = [p for p in pnls if p < 0]
gw, gl = sum(wins), -sum(losses)
n = len(wins) + len(losses)
return {
"trades": n,
"win_rate": len(wins) / n if n else 0,
"avg_win": gw / len(wins) if wins else 0,
"avg_loss": gl / len(losses) if losses else 0,
"profit_factor": gw / gl if gl else float("inf"),
"expectancy": (gw - gl) / n if n else 0,
"net": gw - gl,
}
now = int(time.time() * 1000)
fills = sorted(fills_since(ADDRESS, now - DAYS * 86_400_000), key=lambda f: f["time"])
perp = [f for f in fills if not f["coin"].startswith("@")]
# 1) every closing fill counts as a "trade" (what many dashboards do)
closing = [f for f in perp if f["dir"].startswith("Close") or float(f["closedPnl"]) != 0]
per_fill = [float(f["closedPnl"]) - float(f["fee"]) for f in closing]
# 2) one closing ORDER = one trade (partial fills of the same oid merged)
by_oid = collections.defaultdict(float)
for f in closing:
by_oid[(f["coin"], f["oid"])] += float(f["closedPnl"]) - float(f["fee"])
per_order = list(by_oid.values())
# 3) round trips: a position that opens from 0 and returns to 0 (fees of every fill included)
# positions already open when the window starts are skipped (their entry is missing)
trips, open_pnl = [], {}
for f in perp:
c = f["coin"]
start = float(f["startPosition"])
signed = float(f["sz"]) * (1 if f["side"] == "B" else -1)
if start == 0:
open_pnl[c] = 0.0 # a new position starts here
if c not in open_pnl:
continue # opened before the window
open_pnl[c] += float(f["closedPnl"]) - float(f["fee"])
end = start + signed
if abs(end) < 1e-9 or (start > 0) != (end > 0): # flat again (or flipped side)
trips.append((c, open_pnl.pop(c)))
if abs(end) >= 1e-9:
open_pnl[c] = 0.0 # a flip opens the opposite side
per_trip = [p for _, p in trips]
print(f"{ADDRESS} last {DAYS} days fills={len(fills)} perp fills={len(perp)}")
if not fills:
raise SystemExit("no fills in this window")
first = datetime.fromtimestamp(fills[0]["time"] / 1000, tz=timezone.utc)
print(f"data from {first:%Y-%m-%d %H:%M} UTC" + (" (hit the 10,000-fill cap, window is shorter than asked)" if len(fills) >= 10_000 else ""))
for name, s in (("closing fills", stats(per_fill)), ("closing orders", stats(per_order)), ("round trips", stats(per_trip))):
print(f"{name:14} n={s['trades']:5} win rate {s['win_rate']:.1%} avg win ${s['avg_win']:,.0f} "
f"avg loss ${s['avg_loss']:,.0f} profit factor {s['profit_factor']:.2f} "
f"expectancy ${s['expectancy']:,.0f} net ${s['net']:,.0f}")
by_coin = collections.defaultdict(list)
for c, p in trips:
by_coin[c].append(p)
for c, ps in sorted(by_coin.items(), key=lambda kv: -len(kv[1]))[:5]:
s = stats(ps)
print(f" {c:8} trips={s['trades']:4} win rate {s['win_rate']:.1%} net ${s['net']:,.0f}")
Ideas para ampliarlo: sumar userFunding por moneda para tener ciclos ajustados por funding, separar largos y cortos con dir o agrupar operaciones por tiempo de permanencia. ¿Empiezas con la API? Mira la guía de la API de Hyperliquid con Python.
Cómo leer tus propios números
- Win rate alto, ganancias pequeñas, pérdidas grandes y escasas. Típico de quien corta pronto las ganadoras o deja correr las perdedoras. Mira la pérdida media y tu drawdown, no el win rate.
- Win rate bajo, ganancias grandes. Normal en seguimiento de tendencia y rupturas. Está bien mientras el profit factor siga por encima de 1 después de comisiones.
- Profit factor cerca de 1,0. Tu ventaja es más o menos del tamaño de tus costes. Aquí las comisiones pesan mucho: consulta la guía de comisiones de Hyperliquid y la de PnL real con comisiones y funding.
- Las muestras pequeñas engañan. Con 12 ciclos, una sola operación mueve el win rate más de 8 puntos. Espera a tener unas decenas de operaciones antes de sacar conclusiones.
- Usa el mismo periodo para todo. Compara win rate, funding y PnL no realizado en la misma ventana o la historia no cuadrará.
Apuntar por qué entraste en cada operación hace estas cifras mucho más útiles; nuestra guía de diario de trading para Hyperliquid propone un sistema sencillo.
Revisar el win rate de otros traders
Como los fills son públicos, puedes hacer el mismo análisis con cualquier wallet, incluidos los traders del leaderboard y las wallets de Smart Money. Trata sus números con el mismo cuidado: un trader que sobre todo mantiene posiciones, cobra funding o hace market making se verá muy distinto según la unidad y el periodo. Para ver el cuadro completo, mira también su curva de PnL y sus posiciones abiertas, que es justo lo que enseña un tracker de portfolio.
Sigue tu PnL sin programar
Hyperfolio es un tracker gratuito y de solo lectura para Hyperliquid. Pega una o varias direcciones y verás el PnL, los perps abiertos, el PnL no realizado y los fills recientes en un solo sitio, como PWA en ordenador o móvil. Nunca te pide una clave privada ni una firma. Si sigues varias cuentas, mira cómo seguir varias wallets de Hyperliquid.
Preguntas frecuentes
¿Hyperliquid muestra mi win rate?
No directamente. Muestra el historial de operaciones y el PnL. Puedes calcular el win rate con tus fills a través de la API pública, como se explica arriba.
¿Qué es un buen win rate en Hyperliquid?
No hay una cifra universal. Tiene que estar por encima de tu win rate de equilibrio, que depende de tu ratio: alrededor del 50 % si ganancias y pérdidas son del mismo tamaño, alrededor del 33 % si las ganancias son el doble.
¿El closedPnl ya descuenta las comisiones?
La comisión viene en su propio campo fee en cada fill, así que el script la resta del closedPnl para obtener el PnL neto. Los fills de apertura tienen closedPnl cero pero también pagan comisión, y solo el método de ciclos completos la recoge.
¿El funding cuenta en el win rate?
No si construyes el win rate con fills. El funding se paga aparte y se consulta con userFunding. En posiciones que se mantienen mucho tiempo puede superar al PnL de trading, como en el ejemplo.
¿Qué es el profit factor?
El beneficio bruto dividido entre la pérdida bruta de las operaciones cerradas. Un profit factor de 1,5 significa que ganaste 1,50 $ por cada dólar perdido.
¿Por qué mi win rate cambia de una herramienta a otra?
Normalmente porque cuentan las operaciones de forma distinta (fills, órdenes o ciclos completos), usan periodos diferentes o incluyen o no las comisiones. En nuestro ejemplo, la misma wallet tenía 917 fills de cierre pero solo 12 ciclos completos.
¿Puedo ver el win rate de una ballena?
Sí. Los fills de Hyperliquid son públicos, así que el script funciona con cualquier dirección. Las wallets muy activas pueden chocar con el límite de 10.000 fills, lo que acorta el periodo que puedes analizar.
Opera pagando menos. Si eres nuevo en Hyperliquid, usa el código de referido HYPERFOLIO para tener un 4 % de descuento en comisiones (cómo funciona el referido) y sigue gratis tu PnL, tus posiciones y tus fills en Hyperfolio.
Prueba Hyperfolio gratis
Trackea tu portfolio Hyperliquid en tiempo real con PnL, Smart Money, Markets, Perp Calculator, portfolio multi-venue y alertas push.
HYPERLIQUID
-4% feesOperar en Hyperliquid · 4% menos en fees
Hyperfolio es una app independiente, gratis y sin suscripción. Nos financiamos con referidos de Hyperliquid, espacio de publicidad y donaciones; agradecemos de verdad que operes con nuestro link.
Gratis para ti · mantiene Hyperfolio en marcha
Artículos relacionados
Mapa de liquidaciones de Hyperliquid: niveles reales (2026)
Construye un mapa de liquidaciones de Hyperliquid con posiciones reales on-chain en lugar de heatmaps estimados. Ejemplo con fecha de las 300 cuentas más grandes el 2 nov 2026, cómo leer clústeres y concentración, y un script en Python.
GuíaMejor hora para tradear en Hyperliquid: horas y días (2026)
Cuándo se concentran el volumen y la volatilidad en Hyperliquid por hora UTC y día de la semana, medido con 672 velas horarias (4 oct a 1 nov 2026) de BTC, ETH, HYPE y SOL, qué implica para slippage, stops y funding, y un script en Python.
GuíaRatio long/short en Hyperliquid: posicionamiento (2026)
Por qué el ratio long/short de todo Hyperliquid siempre es 1, cómo medirlo para un grupo de wallets con datos públicos, un ejemplo fechado con el top 100 del leaderboard y un script en Python.
GuíaRatio de Sharpe en Hyperliquid: rentabilidad ajustada (2026)
Calcula los ratios de Sharpe y Sortino de cualquier wallet o vault de Hyperliquid con el endpoint público portfolio: la trampa de depósitos y retiradas, ejemplos fechados del leaderboard y de HLP y un script en Python.
GuíaCorrelación y beta en Hyperliquid: cómo cubrir perps (2026)
Mide la correlación y la beta en Hyperliquid con la API pública de velas: matrices fechadas a 30 y 90 días de BTC, ETH, HYPE, SOL, XRP y DOGE, tres ejemplos de cartera y cobertura y un script en Python.
GuíaVolatilidad y ATR en Hyperliquid: stops, tamaño y apalancamiento
Mide tú mismo la volatilidad de Hyperliquid con la API pública de velas: volatilidad realizada y ATR de BTC, ETH, HYPE, SOL, XRP y DOGE en una captura fechada, con ejemplos de stop, tamaño y apalancamiento y un script en Python.