Hyperfolio
Guía

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.

26 de octubre de 202612 min

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,566,7 %
1,050,0 %
1,540,0 %
2,033,3 %
3,025,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:

  1. 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».
  2. Ó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.
  3. 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):

  • userFillsByTime devuelve los fills de una dirección en un rango de tiempo. Cada fill tiene coin, side (B compra, A venta), sz, px, startPosition (el tamaño de la posición antes del fill), dir (por ejemplo Open Long o Close Short), closedPnl, fee y oid. 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 fee va aparte de closedPnl, así que réstalo tú para obtener el PnL neto. Una comisión negativa es un rebate de maker.
  • userFunding devuelve 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.
  • clearinghouseState devuelve las posiciones abiertas con su unrealizedPnl, 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.

UnidadOperacionesWin rateGanancia mediaPérdida mediaProfit factorNeto
Fills de cierre91736,8 %515 $299 $1,00+478 $
Órdenes de cierre41136,3 %1.166 $661 $1,00+478 $
Ciclos completos (abiertos y cerrados en el periodo)1241,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% fees

Operar 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.

Usar referido

Gratis para ti · mantiene Hyperfolio en marcha

Artículos relacionados

Guía

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ía

Mejor 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ía

Ratio 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ía

Ratio 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ía

Correlació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ía

Volatilidad 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.