Lección 1.1.5 · 65 min

Costes, liquidación, apalancamiento y margen

Lo que cuesta operar casi nunca está en la factura del bróker: está en la horquilla, en el impacto y en el tiempo que pasa entre decidir y ejecutar. Esta lección mide esos costes con la sesión de NOVA, explica cuándo se liquida una operación y calcula a qué precio llega una llamada de margen.

Fig. — Cascada de costes de una compra de 20.000 acciones de NOVA decidida a las 15:00 de Nueva York, en puntos básicos sobre el precio de decisión
Lecciones del nivel 1
  1. 1.1 · Cómo funcionan los mercados

    1. 1.1.1 Participantes y centros de negociación
    2. 1.1.2 Sesiones, subastas, festivos y calendarios
    3. 1.1.3 Libro de órdenes: bid, ask, spread y profundidad
    4. 1.1.4 Tipos de órdenes
    5. 1.1.5 Costes, liquidación, apalancamiento y margen
  2. 1.2 · Clases de activos

    1. 1.2.1 Acciones: splits, dividendos y eventos corporativos
    2. 1.2.2 ETFs: réplica, tracking error, apalancados y UCITS
    3. 1.2.3 Futuros: especificaciones, margen, roll y contango
    4. 1.2.4 Forex: pares, pips, lotes, rollover y CFD
    5. 1.2.5 Opciones: call, put, valor intrínseco y valor temporal
    6. 1.2.6 Cripto: spot, perpetuos, funding y custodia
    7. 1.2.7 Renta fija y tipos de interés; CFDs y productos apalancados
  3. 1.3 · Fuentes de datos de mercado

    1. 1.3.1 Tipos de datos de mercado: EOD, barras, ticks, libro y referencia
    2. 1.3.2 Fuentes de datos gratuitas
    3. 1.3.3 APIs de datos retail y prosumer
    4. 1.3.4 Proveedores de datos profesionales
    5. 1.3.5 Datos de cripto y on-chain
    6. 1.3.6 Brókeres como fuente de datos
    7. 1.3.7 Licencias y términos de uso de datos
    8. 1.3.8 Cómo elegir proveedor de datos
  4. 1.4 · Ingeniería de datos financieros

    1. 1.4.1 Descarga por REST y websockets: paginación, límites y reintentos
    2. 1.4.2 Limpieza de datos: faltantes, ticks erróneos, huecos y zonas horarias
    3. 1.4.3 Ajustes por splits y dividendos: precios ajustados y sin ajustar
    4. 1.4.4 Universos sin sesgo de supervivencia: deslistados, fusiones y cambios de símbolo
    5. 1.4.5 Construcción de barras: tiempo, ticks, volumen, dólar y desequilibrio
    6. 1.4.6 Series continuas de futuros: reglas de roll, ajuste por diferencia y ajuste por ratio
    7. 1.4.7 Almacenamiento: CSV, Parquet, particionado, DuckDB, TimescaleDB y ArcticDB
    8. 1.4.8 Pipeline reproducible: descarga, validación, actualización incremental y tests de calidad
  5. 1.5 · Datos fundamentales y macro

    1. 1.5.1 Estados financieros, ratios, XBRL y SEC EDGAR
    2. 1.5.2 Datos macro, calendarios económicos, estimaciones y transcripciones
  6. 1.6 · Análisis exploratorio financiero

    1. 1.6.1 Rentabilidades, volatilidad, correlaciones móviles y drawdown
    2. 1.6.2 Hechos estilizados: colas gruesas, agrupamiento, autocorrelación y apalancamiento
    3. 1.6.3 Estacionalidad: día de la semana, mes, cambio de mes y sesiones intradía
  7. 1.7 · Análisis técnico programado

    1. 1.7.1 Indicadores técnicos en Python
    2. 1.7.2 Implementación propia frente a TA-Lib: validar resultados
    3. 1.7.3 Patrones de velas y soportes y resistencias
    4. 1.7.4 Multi-timeframe sin anticipación

Lo que cuesta una operación

El coste de una operación es la diferencia entre lo que habría ganado el sistema en un mundo sin fricciones y lo que gana de verdad. Una parte se ve en el extracto del bróker; la mayor parte, no.

CosteTipoCuándo se pagaCómo se mide
Comisión del brókerExplícitoAl ejecutarPor acción, por operación o en % del importe
Tasas de mercado y regulatoriasExplícitoAl ejecutar (algunas solo en ventas)Según la tarifa de cada mercado y país
HorquillaImplícitoAl cruzarlaMedia horquilla por cada lado
ImpactoImplícitoAl ejecutar una orden mayor que el primer nivelPrecio medio pagado frente al mejor precio
Deslizamiento (retraso)ImplícitoEntre la decisión y la ejecuciónPrecio de ejecución frente al de decisión
FinanciaciónExplícitoCada día con la posición abiertaInterés del préstamo, coste de tomar prestados títulos
OportunidadImplícitoSi la orden no se ejecutaLo que habría ganado la parte no ejecutada

La referencia para todos los implícitos es el precio de decisión: el precio medio en el instante en que el sistema decide operar. La diferencia entre ese precio y lo que se acaba pagando, más los costes explícitos, se llama implementation shortfall. Medirlo en puntos básicos (centésimas de punto porcentual) permite sumar costes de naturaleza distinta y comparar activos de precios muy diferentes.

Horquilla efectiva y horquilla realizada

La horquilla cotizada (lección 1.1.3) es lo que cuesta cruzar el libro si la orden cabe en el primer nivel. La horquilla efectiva mide lo que se pagó de verdad en cada operación, contra el precio medio vigente justo antes:

sef=2 D P−MtMts_{\text{ef}} = 2\,D\,\frac{P - M_t}{M_t}

donde PP es el precio de la operación, MtM_t el medio vigente y D=+1D = +1 si el agresor compra y −1-1 si vende. El factor 2 la hace comparable con la horquilla cotizada, que es una ida y vuelta. La horquilla realizada usa en su lugar el medio unos segundos o minutos después, Mt+ΔM_{t+\Delta}:

sreal=2 D P−Mt+ΔMt,impacto=sef−sreals_{\text{real}} = 2\,D\,\frac{P - M_{t+\Delta}}{M_t}, \qquad \text{impacto} = s_{\text{ef}} - s_{\text{real}}

La realizada es lo que se queda quien dio la liquidez si deshace su posición al precio medio de ese momento. Si el precio se mueve en la dirección del agresor, el proveedor de liquidez pierde parte de la horquilla, o toda: es la selección adversa, y la diferencia entre las dos horquillas es el impacto en el precio de la operación.

Para calcularlas hay que unir cada operación con la cotización vigente antes de ella, con allow_exact_matches=False, como en la lección 1.1.1, y con la cotización vigente en t+Δt+\Delta:

IN [01]python
import numpy as np
import pandas as pd

op = pd.read_parquet("nova_operaciones.parquet")
cot = pd.read_parquet("nova_cotizaciones.parquet")
cot["medio"] = (cot["bid"] + cot["ask"]) / 2
medios = cot[["ts", "medio"]]

reg = op[op["condicion"] == "regular"].copy()
reg = pd.merge_asof(reg, medios, on="ts", allow_exact_matches=False)
reg["D"] = np.where(reg["agresor"] == "compra", 1, -1)

def medio_en(ts):
    """Medio vigente en cada instante de `ts` (último cambio <= ts)."""
    m = pd.merge_asof(pd.DataFrame({"ts": ts}), medios, on="ts")
    return m["medio"].to_numpy()

reg["ef_pb"] = (2e4 * reg["D"] * (reg["precio"] - reg["medio"])
                / reg["medio"])
cols = ["ts", "precio", "agresor", "centro", "medio", "ef_pb"]
reg[cols].head(3).round({"ef_pb": 3})
OUT [01]Cada operación con el medio vigente y el de después
                                ts  precio agresor     centro  medio  ef_pb
0 2025-06-02 13:30:00.301051+00:00   53.34   venta  PRINCIPAL  53.35  3.749
1 2025-06-02 13:30:00.301052+00:00   53.34   venta  PRINCIPAL  53.35  3.749
2 2025-06-02 13:30:00.407366+00:00   53.34   venta  PRINCIPAL  53.35  3.749
IN [02]python
def media_pond(g, col):
    return np.average(g[col], weights=g["tamano"])

por_centro = reg.groupby("centro").apply(
    lambda g: pd.Series({"efectiva_pb": media_pond(g, "ef_pb"),
                         "operaciones": len(g)}))
por_centro.round(3)
OUT [02]Horquilla efectiva por centro, ponderada por volumen
                efectiva_pb  operaciones
centro
INTERNALIZADOR        1.054       3914.0
MTF_A                 2.039       9640.0
MTF_B                 2.078       7230.0
OSCURO                0.000       4380.0
PRINCIPAL             2.074      25774.0

Los tres centros con libro cobran de media entre 2,04 y 2,08 puntos básicos de horquilla efectiva, algo más que la horquilla cotizada típica de un tick (1,9 puntos básicos, lección 1.1.3) porque algunas órdenes barren más de un nivel. El centro oscuro, que cruza al punto medio, tiene horquilla efectiva cero: ni comprador ni vendedor pagan horquilla. El internalizador, que mejora a menudo el precio del libro (lección 1.1.1), cobra la mitad que los libros visibles. Para un cliente, ese es el argumento económico de los dos.

Ahora la realizada, a varios horizontes, para las operaciones de los centros con libro:

IN [03]python
lit = reg[reg["centro"].isin(["PRINCIPAL", "MTF_A", "MTF_B"])].copy()
filas = {}
for h in ("1s", "10s", "1min", "5min"):
    m_desp = medio_en(lit["ts"] + pd.Timedelta(h))
    real = 2e4 * lit["D"] * (lit["precio"] - m_desp) / lit["medio"]
    ef = media_pond(lit, "ef_pb")
    rr = np.average(real, weights=lit["tamano"])
    filas[h] = {"efectiva": ef, "realizada": rr, "impacto": ef - rr}
pd.DataFrame(filas).T.round(2)
OUT [03]Horquilla realizada e impacto según el horizonte
      efectiva  realizada  impacto
1s        2.07       1.68     0.38
10s       2.07       0.27     1.80
1min      2.07      -6.95     9.02
5min      2.07     -14.47    16.54

A un segundo, el proveedor de liquidez conserva 1,68 de los 2,07 puntos básicos de la horquilla. A diez segundos, casi nada. A un minuto y a cinco, la realizada es negativa: el precio ha seguido al agresor tanto que quien le dio la liquidez pierde dinero si mantiene la posición. En la sesión simulada de NOVA, el flujo de órdenes agresoras es el que mueve el precio, y eso se paga en la horquilla de quien provee liquidez. En datos reales la forma suele ser la misma (la realizada cae con el horizonte), aunque las cifras dependen del valor y del día.

La curva de impacto

La horquilla efectiva media habla de órdenes pequeñas. Para una orden grande, lo que importa es cuánto libro tiene que recorrer. Con las 2.340 fotos L2 de la sesión se puede simular una compra a mercado de cada tamaño en cada foto y medir el coste medio contra el medio vigente:

IN [04]python
l2 = pd.read_parquet("nova_libro_l2.parquet")
tamanos = [100, 500, 1_000, 2_000, 5_000,
           10_000, 20_000, 30_000, 50_000]

def coste_pb(foto, n):
    a = foto[foto["lado"] == "ask"].sort_values("precio")
    b = foto[foto["lado"] == "bid"]
    medio = (a["precio"].iloc[0] + b["precio"].max()) / 2
    if a["tamano"].sum() < n:
        return np.nan                     # el libro visible no llega
    resto, gasto = n, 0.0
    for p, q in zip(a["precio"], a["tamano"]):
        t = min(resto, q)
        gasto, resto = gasto + t * p, resto - t
        if resto == 0:
            break
    return 1e4 * (gasto / n - medio) / medio

costes = {n: [] for n in tamanos}
for _, foto in l2.groupby("ts"):
    for n in tamanos:
        costes[n].append(coste_pb(foto, n))
curva = pd.DataFrame({n: pd.Series(v) for n, v in costes.items()}).T
pd.DataFrame({"coste_medio_pb": curva.mean(axis=1),
              "mediana_pb": curva.median(axis=1),
              "sin_liquidez_pct": 100 * curva.isna().mean(axis=1)}
             ).round(2)
OUT [04]Coste de una compra a mercado según su tamaño
       coste_medio_pb  mediana_pb  sin_liquidez_pct
100              0.98        0.94              0.00
500              1.04        0.94              0.00
1000             1.10        0.94              0.00
2000             1.22        0.94              0.00
5000             1.55        0.95              0.00
10000            2.02        1.68              0.17
20000            2.82        2.40              1.20
30000            3.57        3.02              5.64
50000            5.33        4.81             48.46
Fig. — Coste medio de una compra a mercado de NOVA según su tamaño, recorriendo cada una de las 2.340 fotos L2 de la sesión del 2 de junio de 2025

Hasta 2.000 acciones, el coste apenas pasa de media horquilla: poco más de un punto básico. A partir de 5.000 la orden suele salir del primer nivel y el coste se acelera: 2,0 puntos básicos con 10.000 acciones, 3,6 con 30.000. Con 50.000 la media es de 5,3, y en casi la mitad de las fotos el libro visible ni siquiera tiene tantas acciones a la venta en diez niveles. Esa es la razón por la que las órdenes grandes se parten en trozos y se reparten en el tiempo (los algoritmos TWAP y VWAP de la lección 1.1.4) o se llevan a un centro oscuro (lección 1.1.1).

Dos advertencias. La curva es optimista: supone que el libro no reacciona mientras la orden lo recorre, y en la realidad los proveedores de liquidez retiran órdenes en cuanto ven una orden grande. Y es de un solo lado: si la posición se deshace después, se paga otra vez.

Una orden, todos sus costes

La figura de la cabecera es la cascada de costes de una orden concreta. A las 15:00:00 de Nueva York un sistema decide comprar 20.000 acciones de NOVA, con el precio medio a 52,745. La orden de mercado llega al libro diez segundos después. El sistema paga una comisión supuesta de 0,005 USD por acción y financia la mitad de la compra a margen durante cinco días a un tipo supuesto del 6 % anual (base 360). Las cifras del bróker son hipotéticas; las del libro, las de la foto L2.

IN [05]python
def foto_en(ts):
    return l2[l2["ts"] == ts]

def precio_medio_compra(foto, n):
    a = foto[foto["lado"] == "ask"].sort_values("precio")
    resto, gasto = n, 0.0
    for p, q in zip(a["precio"], a["tamano"]):
        t = min(resto, q)
        gasto, resto = gasto + t * p, resto - t
        if resto == 0:
            break
    return gasto / n

def mejores(foto):
    return (foto.loc[foto["lado"] == "bid", "precio"].max(),
            foto.loc[foto["lado"] == "ask", "precio"].min())

n = 20_000
decision = sum(mejores(foto_en("2025-06-02 19:00:00+00:00"))) / 2
f10 = foto_en("2025-06-02 19:00:10+00:00")
bid10, ask10 = mejores(f10)
medio10 = (bid10 + ask10) / 2
pagado = precio_medio_compra(f10, n)

pb = lambda x: 1e4 * x / decision
cascada = pd.Series({
    "retraso": pb(medio10 - decision),
    "media_horquilla": pb(ask10 - medio10),
    "impacto": pb(pagado - ask10),
    "comision": pb(0.005),
    "financiacion": 1e4 * 0.5 * 0.06 * 5 / 360,
})
print(f"decisión {decision:.3f} · pagado {pagado:.4f}")
print(f"nominal {n * pagado:,.0f} USD")
cascada["total"] = cascada.sum()
cascada.round(2)
OUT [05]Cascada de costes de una compra de 20.000 acciones
decisión 52.745 · pagado 52.7693
nominal 1,055,386 USD
retraso            1.90
media_horquilla    0.95
impacto            1.76
comision           0.95
financiacion       4.17
total              9.72
dtype: float64

En diez segundos el precio medio sube un céntimo, de 52,745 a 52,755: 1,90 puntos básicos de retraso que se pagan antes de tocar el libro (en esa foto el primer nivel estaba muy cargado a la compra, y la lección 1.1.3 mostró que eso anticipa la subida). Después, media horquilla, 0,95, y el impacto de recorrer el libro más allá del mejor ask, 1,76. La comisión supuesta añade 0,95. Los costes de ejecución suman 5,56 puntos básicos, unos 590 USD sobre 1,06 millones. Y la financiación de cinco días a margen añade 4,17 puntos básicos más: el coste más grande de la cascada es el que no aparece en la ejecución.

Liquidación: T+1 en EE. UU., T+2 en Europa

Después de la operación, la entrega de los títulos contra el efectivo ocurre unos días hábiles más tarde: la liquidación (lección 1.1.1). Hasta entonces, comprador y vendedor tienen un compromiso, no los títulos ni el dinero.

liquidaciónliquidaciónT: negociaciónT: compensaciónT+1: EE. UU.T+2: UE
Fuente Mermaid
flowchart LR
  T[T: negociación] --> C[T: compensación]
  C -->|liquidación| L1[T+1: EE. UU.]
  C -->|liquidación| L2[T+2: UE]
  • EE. UU. liquida las acciones en T+1, el día hábil siguiente, desde el 28 de mayo de 2024, fecha de cumplimiento de las normas que la SEC aprobó en febrero de 20231Nota 1 · SEC, nota de prensa 2023-29, «SEC Finalizes Rules to Reduce Risks in Clearance and Settlement», 15 de febrero de 2023: «The compliance date for the final rules is May 28, 2024»..
  • La Unión Europea liquida en T+2 las operaciones sobre valores negociables ejecutadas en centros de negociación. El Reglamento (UE) 2025/2075, de 8 de octubre de 2025, que modifica el reglamento de depositarios centrales (CSDR), las pasa a T+1 a partir del 11 de octubre de 20272Nota 2 · AMF, «Transition to T+1 settlement of transactions» (actualizada el 23 de abril de 2026). El texto del reglamento en EUR-Lex no se pudo leer de forma automática al preparar esta lección..

Los días hábiles se cuentan con un calendario, no sumando días naturales:

IN [06]python
import exchange_calendars as xcals

nyse = xcals.get_calendar("XNYS")
bme = xcals.get_calendar("XMAD")

for cal, n_dias, fechas in ((nyse, 1, ["2025-07-03", "2025-11-26",
                                       "2025-12-31"]),
                            (bme, 2, ["2025-04-16", "2025-12-23"])):
    for f in fechas:
        liq = cal.session_offset(f, n_dias)
        print(f"{cal.name}  operación {f} ({pd.Timestamp(f):%a})"
              f"  ->  T+{n_dias} {liq.date()} ({liq:%a})")
OUT [06]Fechas de liquidación con un calendario de bolsa
XNYS  operación 2025-07-03 (Thu)  ->  T+1 2025-07-07 (Mon)
XNYS  operación 2025-11-26 (Wed)  ->  T+1 2025-11-28 (Fri)
XNYS  operación 2025-12-31 (Wed)  ->  T+1 2026-01-02 (Fri)
XMAD  operación 2025-04-16 (Wed)  ->  T+2 2025-04-22 (Tue)
XMAD  operación 2025-12-23 (Tue)  ->  T+2 2025-12-29 (Mon)

El 3 de julio de 2025 se liquida el lunes 7, porque el 4 la NYSE cierra; el 26 de noviembre, el viernes 28, saltando Acción de Gracias. En Madrid, una venta del miércoles 16 de abril de 2025 se liquida el martes 22, porque Viernes Santo y Lunes de Pascua no son hábiles. El calendario de la bolsa es una aproximación: el que manda es el del depositario y el sistema de pagos, que puede no coincidir con el de la bolsa algún día del año (lección 1.1.2).

Para un sistema, la liquidación importa en tres sitios. En una cuenta de contado, el efectivo de una venta no se puede usar para comprar otra cosa hasta que se liquida (o el bróker lo adelanta con condiciones). Los dividendos los cobra quien figura como titular en la fecha de registro, así que la fecha ex depende del ciclo de liquidación (lección 1.2.1). Y en una cuenta a margen, es el bróker quien pone el efectivo que falta cuando la compra se liquida, y desde entonces cobra intereses por él.

Margen y apalancamiento

Una cuenta a margen permite comprar con dinero prestado por el bróker, con los títulos como garantía. El apalancamiento es la exposición dividida por el patrimonio propio: con 50.000 USD propios y 50.000 prestados, una posición de 100.000 tiene apalancamiento 2. Una caída del 10 % del precio se convierte en una del 20 % del patrimonio.

En EE. UU. hay dos reglas mínimas para las acciones compradas a margen:

  • Margen inicial (Regulation T). El bróker puede prestar hasta el 50 % del precio de compra: el cliente pone al menos la mitad3Nota 3 · 12 CFR 220.12 (Regulation T): «50 percent of the current market value of the security» para los valores de renta variable admitidos a margen..
  • Margen de mantenimiento (FINRA Rule 4210). El patrimonio de la cuenta debe ser al menos el 25 % del valor de mercado de los títulos en largo4Nota 4 · FINRA Rule 4210 (c)(1): «25 percent of the current market value of all margin securities … "long" in the account». FINRA recuerda que el bróker puede liquidar la cuenta en cualquier momento para cubrir una deficiencia.. Si cae por debajo, hay una llamada de margen: aportar garantías o vender.
nosíEl precio baja¿Bajo el 25 %?Sigue la posiciónLlamada de margenAportar efectivoVender posición
Fuente Mermaid
flowchart TB
  P[El precio baja] --> E{¿Bajo el 25 %?}
  E -- no --> S[Sigue la posición]
  E -- sí --> M[Llamada de margen]
  M --> A[Aportar efectivo]
  M --> V[Vender posición]

Con un préstamo LL por cada acción y precio PP, el patrimonio por acción es P−LP - L. La llamada salta cuando el patrimonio cae al margen de mantenimiento mm del valor:

P−L=m P⟹P∗=L1−mP - L = m\,P \quad\Longrightarrow\quad P^{*} = \frac{L}{1 - m}

Si la compra se hizo a P0P_0 con el préstamo máximo de Reg T, L=(1−mi) P0L = (1 - m_i)\,P_0 con mi=0,5m_i = 0{,}5, y queda

P∗=P0 1−mi1−m=P0 0,50,75=23 P0P^{*} = P_0\,\frac{1 - m_i}{1 - m} = P_0\,\frac{0{,}5}{0{,}75} = \tfrac{2}{3}\,P_0
IN [07]python
def precio_llamada(p0, m_inicial=0.50, m_mant=0.25):
    prestamo = (1 - m_inicial) * p0
    return prestamo / (1 - m_mant)

p0 = op.loc[op["condicion"] == "subasta_cierre", "precio"].iloc[0]
acciones = 1_000
pstar = precio_llamada(p0)
print(f"compra de {acciones} acciones a {p0} USD")
print(f"préstamo: {(1 - 0.5) * p0 * acciones:,.0f} USD")
print(f"llamada de margen a {pstar:.2f} USD ({pstar / p0 - 1:.1%})")
for mm in (0.30, 0.35, 0.40):
    print(f"  mantenimiento del {mm:.0%}: llamada a "
          f"{precio_llamada(p0, m_mant=mm):.2f}")
OUT [07]Precio de la llamada de margen
compra de 1000 acciones a 53.12 USD
préstamo: 26,560 USD
llamada de margen a 35.41 USD (-33.3%)
  mantenimiento del 30%: llamada a 37.94
  mantenimiento del 35%: llamada a 40.86
  mantenimiento del 40%: llamada a 44.27
Fig. — Patrimonio de una compra de 1.000 acciones de NOVA a 53,12 USD con un préstamo del 50 % frente al mantenimiento exigido del 25 %

Con el cierre de NOVA del 2 de junio de 2025, 53,12 USD, la llamada salta a 35,41: una caída de un tercio. Parece lejos, pero con requisitos más exigentes se acerca: con un mantenimiento del 40 %, que un bróker puede imponer a valores volátiles, la llamada llega con una caída del 16,7 %. La figura dibuja el patrimonio de la cuenta frente al precio y el mantenimiento exigido: se cruzan en la llamada.

Tres cosas que el cálculo no dice. El bróker puede vender sin avisar y al precio que haya, incluido un hueco como el de la lección 1.1.4: la llamada no garantiza salir a P∗P^{*}. Los requisitos del bróker pueden ser mayores que los mínimos legales, y cambiar con la volatilidad. Y el préstamo cuesta intereses cada día, que se restan del patrimonio y acercan la llamada. Los productos apalancados para minoristas en la UE (CFD, con límites de apalancamiento de ESMA) se tratan en las lecciones 1.2.4 y 1.2.7; los márgenes de futuros, que funcionan de otra forma, en la 1.2.3.

IN [08]python
prestamo = (1 - 0.5) * p0 * acciones
for dias in (5, 30, 365):
    interes = prestamo * 0.06 * dias / 360     # tipo supuesto, base 360
    print(f"{dias:>3} días: {interes:8.2f} USD · "
          f"{1e4 * interes / (p0 * acciones):6.1f} pb de la posición")
OUT [08]Lo que cuesta financiar la posición
  5 días:    22.13 USD ·    4.2 pb de la posición
 30 días:   132.80 USD ·   25.0 pb de la posición
365 días:  1615.73 USD ·  304.2 pb de la posición

Un año a margen con un tipo del 6 % sobre la mitad de la posición cuesta 3,04 % de la posición, 6,08 % del patrimonio propio. Es una barrera de rentabilidad que la estrategia tiene que superar antes de ganar nada con el apalancamiento.

Ejercicios

  1. Calcula la horquilla efectiva media ponderada de las operaciones de los centros con libro en la primera media hora de la sesión (13:30 a 14:00 UTC) y en el resto del día. ¿Es más caro operar al principio de la sesión?
Solución
IN [09]python
apertura = lit["ts"] < "2025-06-02 14:00:00+00:00"
for nombre, g in (("primera media hora", lit[apertura]),
                  ("resto del día", lit[~apertura])):
    print(f"{nombre:<19} {media_pond(g, 'ef_pb'):.3f} pb"
          f" · {len(g)} operaciones")
OUT [09]Horquilla efectiva por tramo
primera media hora  2.065 pb · 6090 operaciones
resto del día       2.067 pb · 36554 operaciones

En NOVA, no: 2,065 frente a 2,067 puntos básicos, prácticamente lo mismo. Cuadra con la tabla de horquillas por media hora de la lección 1.1.3, en la que la primera media hora no destaca (solo el 2,2 % de las fotos con más de un tick) y la que sí lo hace es la última. La primera foto de la sesión tenía dos ticks de horquilla, pero se cierra en segundos. Con datos reales la medición hay que repetirla en cada valor: es la forma de decidir con números a qué hora conviene ejecutar.

  1. Repite la cascada de costes con una orden de 5.000 acciones y otra de 40.000. ¿Qué componente cambia más?
Solución
IN [10]python
for n in (5_000, 40_000):
    pagado = precio_medio_compra(f10, n)
    print(n, "acciones · impacto",
          round(1e4 * (pagado - ask10) / decision, 2), "pb")
OUT [10]Cascada para dos tamaños
5000 acciones · impacto 0.0 pb
40000 acciones · impacto 3.08 pb

Con 5.000 acciones el impacto es cero: en la foto de las 15:00:10 caben en el primer nivel de venta. Con 40.000 sube a 3,08 puntos básicos. El retraso, la media horquilla y la comisión por acción no dependen del tamaño de la orden: son los mismos puntos básicos para 5.000 que para 40.000 acciones. El impacto sí: crece con el número de niveles que hay que recorrer. Para órdenes pequeñas, lo que domina es la horquilla; para órdenes grandes, el impacto.

  1. Una cuenta con 30.000 USD propios compra 1.000 acciones de NOVA a 53,12 con el resto prestado. ¿Qué apalancamiento tiene? ¿A qué precio salta la llamada de margen con el mantenimiento del 25 %? ¿Cumple el margen inicial de Reg T?
Solución

La posición vale 53.120 USD y el préstamo es de 23.120 USD. Apalancamiento: 53.120 / 30.000 = 1,77. El préstamo por acción es 23,12, así que la llamada salta a 23,12 / 0,75 = 30,83 USD, un 42 % por debajo de la compra. Cumple Reg T: el cliente aporta el 56,5 % del precio, más del 50 % mínimo. Con menos préstamo la llamada se aleja, porque el colchón propio es mayor.

Footnotes

  1. SEC, nota de prensa 2023-29, «SEC Finalizes Rules to Reduce Risks in Clearance and Settlement», 15 de febrero de 2023: «The compliance date for the final rules is May 28, 2024». ↩

  2. AMF, «Transition to T+1 settlement of transactions» (actualizada el 23 de abril de 2026). El texto del reglamento en EUR-Lex no se pudo leer de forma automática al preparar esta lección. ↩

  3. 12 CFR 220.12 (Regulation T): «50 percent of the current market value of the security» para los valores de renta variable admitidos a margen. ↩

  4. FINRA Rule 4210 (c)(1): «25 percent of the current market value of all margin securities … "long" in the account». FINRA recuerda que el bróker puede liquidar la cuenta en cualquier momento para cubrir una deficiencia. ↩

Respuesta plegada en cada pregunta

Autoevaluación

  1. Una compra se ejecuta a 52,76 cuando el precio medio vigente es 52,755. ¿Cuál es su horquilla efectiva en puntos básicos?

    • A0,95 puntos básicos
    • B1,90 puntos básicos
    • C0,5 céntimos
    • DNo se puede calcular sin la cotización posterior
    Ver respuesta

    Respuesta B. 1,90 puntos básicos

    La horquilla efectiva es el doble de la distancia entre el precio pagado y el medio, en proporción al medio: 2 × (52,76 − 52,755) / 52,755 = 0,000190, es decir, 1,90 puntos básicos. Se multiplica por dos para compararla con la horquilla cotizada, que es la ida y vuelta.

  2. En NOVA, la horquilla realizada de las operaciones de los centros con libro es positiva a 1 segundo y negativa a 1 minuto. ¿Qué significa?

    • AQue los datos están mal
    • BQue quien da liquidez gana la horquilla si cierra enseguida, pero pierde si mantiene la posición: el flujo agresor anticipa el precio
    • CQue las comisiones son negativas
    • DQue el centro oscuro es más caro
    Ver respuesta

    Respuesta B. Que quien da liquidez gana la horquilla si cierra enseguida, pero pierde si mantiene la posición: el flujo agresor anticipa el precio

    La horquilla realizada mide lo que se queda el proveedor de liquidez después de que el precio se mueva. Si el precio sigue en la dirección del agresor, el proveedor ha vendido barato o comprado caro: es la selección adversa. La diferencia entre efectiva y realizada es el impacto en el precio.

  3. Una acción de EE. UU. se vende el jueves 3 de julio de 2025. ¿Cuándo se liquida?

    • AEl viernes 4 de julio
    • BEl lunes 7 de julio, el siguiente día hábil (T+1), porque el 4 es festivo
    • CEl martes 8 de julio (T+2)
    • DEl mismo día
    Ver respuesta

    Respuesta B. El lunes 7 de julio, el siguiente día hábil (T+1), porque el 4 es festivo

    Desde el 28 de mayo de 2024 el ciclo estándar en EE. UU. es T+1. El viernes 4 de julio de 2025 la NYSE cerró por el Día de la Independencia, así que el siguiente día hábil es el lunes 7.

  4. Compras acciones a 53,12 USD con el máximo préstamo de Reg T (50 %) y el bróker exige el mantenimiento mínimo de FINRA (25 %). ¿A qué precio salta la llamada de margen?

    • AA 39,84
    • BA 35,41
    • CA 26,56
    • DA 13,28
    Ver respuesta

    Respuesta B. A 35,41

    La llamada salta cuando el patrimonio de la cuenta cae al 25 % del valor de la posición. Con un préstamo del 50 % del precio de compra, eso ocurre a P0 × (1 − 0,50) / (1 − 0,25) = 53,12 × 2/3 = 35,41 USD, una caída del 33 %.

  5. ¿Por qué la financiación puede ser el coste mayor de una operación aunque la tasa diaria parezca pequeña?

    • APorque se cobra en cada operación
    • BPorque se paga cada día que la posición sigue abierta y sobre el importe prestado, mientras que horquilla e impacto se pagan una vez
    • CPorque es un coste implícito
    • DNo puede serlo
    Ver respuesta

    Respuesta B. Porque se paga cada día que la posición sigue abierta y sobre el importe prestado, mientras que horquilla e impacto se pagan una vez

    Horquilla, impacto y comisión se pagan al entrar y al salir. El interés del préstamo se acumula con el tiempo: en el ejemplo de la lección, cinco días a margen con un tipo supuesto del 6 % anual cuestan 4,2 puntos básicos, casi tanto como todos los costes de ejecución juntos (5,6).

Ideas clave

  • Los costes de ejecución se miden contra el precio de decisión: retraso, media horquilla, impacto y comisión. En la orden de 20.000 acciones de NOVA suman 5,6 puntos básicos, y la comisión es solo uno.
  • La horquilla efectiva mide lo pagado contra el medio vigente; la realizada, lo que se queda el proveedor tras unos segundos. La diferencia es el impacto, y su signo dice si el flujo agresor estaba informado.
  • El impacto crece con el tamaño más deprisa que de forma lineal cuando la orden pasa de los primeros niveles: de 1 punto básico con 100 acciones a 3,6 con 30.000 en el libro de NOVA.
  • EE. UU. liquida en T+1 desde el 28 de mayo de 2024; la UE pasa de T+2 a T+1 el 11 de octubre de 2027. Los días hábiles los da un calendario, no una suma de días.
  • Con Reg T (50 % inicial) y FINRA 4210 (25 % de mantenimiento), una compra a margen al máximo recibe una llamada si el precio cae un tercio. El bróker puede exigir más y liquidar sin avisar.

Recursos