Saltar al contenido
Finance & Banking
Evolution Program
Inicio / modules / 20-tokenizacion-fx-onchain-y-mercados-programables / solutions

Solución de referencia — Laboratorio 7: FX y ventana de exposición

Material docente.

El precio mostrado esconde cuatro de los seis tramos

Es el hallazgo de la clase 11.

PAR PRINCIPAL
  mayorista   diferencial/2 0,6 + comisión 3,0  =  3,60 pb
  registro    margen 8,0 + diferencial/2 3,0
              + entrada 4,0 + salida 4,5        = 19,50 pb

  EL REGISTRO ES 5,4 VECES MÁS CARO

De los cuatro tramos del registro, solo el diferencial sería visible en el precio mostrado. El margen sobre el precio importado, la entrada y la salida no aparecen en ninguna comparación comercial.

En el par poco líquido se invierte, y por una razón concreta

PAR POCO LÍQUIDO
  mayorista   diferencial/2 22,5 + comisión 18
              + corresponsalía 22               = 62,50 pb
  registro    margen 12 + diferencial/2 9
              + entrada 4 + salida 4,5          = 29,50 pb

  AHORRO: 33,00 pb = 9 900 sobre 3 000 000

El ahorro no viene del registro: viene de eliminar dos tramos de corresponsalía. Es exactamente la conclusión de la Parte 18, clase 16, y de la ruta con stablecoin: el ahorro era de topología, no de tecnología.

La profundidad corrige el ahorro anunciado

corregido = ahorro_corregido_por_profundidad(33.0, 3_000_000, 5_200_000, 6)

assert corregido["impacto_pb"]     == pytest.approx(24.0, abs=0.2)
assert corregido["ahorro_real_pb"] == pytest.approx(9.0, abs=0.2)
DE GOLPE
  3 000 000 / 5 200 000 = 0,58 veces la profundidad
  → impacto de 58 pb: se come el ahorro entero

EN SEIS TRAMOS DE 500 000
  impacto por tramo  500 000 / 5 200 000 × 100 = 9,6 pb
  con reposición del 70 %, residuo del 30 % por tramo:
  9,6 × [1 + 5 × 0,30] = 24,0 pb

  AHORRO REAL = 33 − 24 = 9 pb = 2 700

Y con un libro de 480 000 —diez veces más fino— el ahorro real es negativo:

corregido = ahorro_corregido_por_profundidad(33.0, 3_000_000, 480_000, 6)
assert not corregido["sigue_compensando"]

De dónde sale el precio

Mecanismo ¿Forma precio?
Oráculo que importa el precio No: lo copia, con retardo y margen
Libro de órdenes propio
Fórmula automatizada No: lo deriva de sus reservas

En la práctica casi todo es la primera o la tercera. El registro no forma precio: lo consume, y le añade su propio coste.

La ventana va de irrevocable a confirmado

normal = ventana_de_exposicion(10, 16, 11)
finde  = ventana_de_exposicion(10, 16, 11, dias_no_habiles=2)

assert normal.horas == 19
assert finde.horas  == 67
DÍA NORMAL
  pago A irrevocable        10:00 hora de A
  confirmación de B         16:00 hora de B
                          = 05:00 del día siguiente en A
  VENTANA                   19 horas

VIERNES
  el sistema de B no reabre hasta el lunes
  VENTANA                   67 horas

Medir del envío a la recepción esperada subestima la exposición. Y el peor caso —el fin de semana— es recurrente, no excepcional.

Cada mecanismo contra la misma base

Es la trampa del ejercicio.

PÉRDIDA ESPERADA SIN NINGÚN MECANISMO
  días normales   40 000 000 × 0,003 % × 0,55 × 250 = 165 000
  fines de semana 40 000 000 × 0,003 % × 2,8 × 0,55 × 50 = 92 400
  TOTAL = 257 400

                        PÉRDIDA      COSTE      TOTAL
  sin mecanismo          257 400          0    257 400
  solo neteo              46 332          0     46 332
  PvP sobre el bruto           0    860 000    860 000
  PvP sobre el neteado         0    154 800    154 800

  → SOLO NETEO es la opción más barata

Si se compara el PvP con la pérdida que el neteo ya bajó a 46 332, el PvP parece no compensar, y esa conclusión es falsa: el PvP sustituye al neteo como mecanismo, no se suma a él.

Sin oponibilidad, el neteo no reduce nada

def test_sin_oponibilidad_el_neteo_no_reduce_nada_documenta_el_problema():
    assert evaluacion["neteo"]["total"] == evaluacion["ninguno"]["total"]
    assert comparacion.mejor() == MecanismoLiquidacion.NINGUNO.value

Esta prueba debe pasar. Un acuerdo firmado que no es oponible en el concurso de la contraparte no reduce la exposición, aunque el informe la declare reducida.

                        PÉRDIDA      COSTE      TOTAL
  sin mecanismo          257 400          0    257 400
  «neteo»                257 400          0    257 400
  PvP sobre el bruto           0    860 000    860 000

  → NINGÚN MECANISMO MEJORA

El límite bilateral

limite = limite_bilateral(_base(), 40_000_000, 80_000)
assert limite == pytest.approx(12_433_000, rel=0.01)

Cuando ningún mecanismo mejora, lo que procede es reducir la exposición hasta que la pérdida esperada quepa en el apetito: 12 433 000 en vez de 40 000 000.

La conclusión

La decisión no la determina el volumen sino la oponibilidad jurídica del acuerdo de neteo. Con un acuerdo válido, el neteo basta y cuesta menos; sin él, ningún mecanismo mejora y lo que procede es bajar el límite.

Errores que se penalizan

Error Por qué
Comparar precios mostrados Se ignoran cuatro tramos
Suponer profundidad El ahorro anunciado no se ejecuta
Medir la ventana del envío Subestima la exposición
Olvidar el fin de semana Es el peor caso y es recurrente
Dar el neteo por válido Está firmado y puede no ser oponible
Comparar mecanismos entre sí Cada uno contra la pérdida base

Límites