17. Ruedas, horarios, subastas y negociación continua

Un mercado no está simplemente abierto o cerrado: atraviesa fases con reglas distintas para recibir órdenes, formar precios y concretar operaciones.

17.1 El tiempo también es una regla de mercado

En el tema anterior identificamos la línea negociable y sus reglas de cantidad y precio. Todavía falta una condición esencial: saber cuándo admite actividad el mercado y qué mecanismo utiliza en ese momento.

Una orden técnicamente correcta puede ser rechazada, quedar pendiente o recibir un tratamiento diferente si llega fuera de horario o durante una fase especial.

Idea central: antes de interpretar una orden hay que combinar calendario, zona horaria, sesión, segmento y estado operativo vigente.

17.2 Qué es una rueda de negociación

Una rueda es una sesión organizada en la que pueden negociarse determinados instrumentos bajo reglas y horarios definidos. Habitualmente pertenece a una fecha operativa y atraviesa varios estados.

El término no implica que toda la sesión permita ejecuciones. Puede haber períodos para cargar órdenes, momentos de cálculo, negociación continua y etapas administrativas posteriores.

17.3 Calendario de negociación

El calendario indica qué fechas son hábiles para un mercado o segmento. No basta con excluir sábados y domingos: también existen feriados, jornadas abreviadas y cierres extraordinarios.

  • Día normal: aplica el horario ordinario.
  • Jornada abreviada: una o más fases terminan antes.
  • Feriado: no se inicia la rueda prevista.
  • Cierre extraordinario: una decisión operativa modifica el calendario publicado.

Por eso una aplicación necesita un calendario versionado, no una condición fija como diaDeSemana < 6.

17.4 Zona horaria y cambio de fecha

Los horarios de una rueda se publican en una zona horaria determinada. El instante recibido por un servidor puede estar en UTC, mientras que la regla del mercado usa su hora local.

Guardar solamente «10:00» pierde la zona, la fecha y las reglas históricas de huso horario. Conviene conservar el instante de cada evento en UTC y la zona del mercado como un dato separado.

instante universal + zona del mercado → fecha y hora local de la rueda

17.5 Una sesión como máquina de estados

1Cerrado
2Preapertura
3Apertura
4Continua
5Cierre y posrueda

Modelar estados es más seguro que dispersar comparaciones horarias por el programa. Cada estado declara qué mensajes acepta y si puede producir ejecuciones.

17.6 Preapertura

Durante la preapertura el sistema puede recibir, modificar o cancelar órdenes según el reglamento, pero no necesariamente concreta operaciones de inmediato. Las intenciones se reúnen para preparar la apertura.

Algunos mercados difunden información indicativa durante esta fase. Esa información puede cambiar hasta el momento de apertura y no equivale a una operación ejecutada.

17.7 Qué hace una subasta

Una subasta acumula intenciones durante un intervalo y aplica un procedimiento conjunto para determinar un precio de cruce. Su objetivo es concentrar liquidez y formar un precio representativo en un momento señalado.

1

Acumulación

Se reciben intenciones compatibles con las reglas de la fase.

2

Cálculo

El sistema determina el resultado con criterios predefinidos.

3

Cruce

Las órdenes alcanzadas se ejecutan a un precio común.

El algoritmo exacto de selección y asignación depende del mercado. En este tema importa comprender la fase; la prioridad y las ejecuciones parciales se estudiarán en el tema 20.

17.8 Subasta de apertura

La subasta de apertura transforma las intenciones acumuladas antes del inicio en un primer precio de referencia de la rueda. Reduce la dependencia de una única orden que llegue primero.

Puede no existir precio de apertura si no hay órdenes compatibles o si se activan controles previstos por el mercado.

17.9 Negociación continua

En la negociación continua las órdenes pueden interactuar a medida que ingresan. El mercado procesa una secuencia de eventos: altas, modificaciones, cancelaciones y posibles ejecuciones.

«Continua» no significa que siempre exista una contraparte ni que toda orden se ejecute. Significa que el mecanismo intenta casar órdenes durante la fase, sin esperar a una única subasta programada.

17.10 Subasta de cierre

La subasta de cierre vuelve a concentrar intenciones al final de la rueda y puede producir un precio de cierre. Ese precio suele ser relevante para valuaciones, índices e informes, pero su definición concreta pertenece a cada mercado.

No debe confundirse el último precio de la fase continua con el precio oficial de cierre: pueden coincidir o no.

17.11 Continua y subasta no son equivalentes

Comparación conceptual entre mecanismos.
DimensiónNegociación continuaSubasta
Momento de interacciónA medida que llegan las órdenes.En un cruce conjunto.
Formación del precioSecuencial.Con intenciones acumuladas.
EjecuciónPuede ocurrir durante toda la fase.Se concentra en el cruce.
Uso frecuenteTramo principal de la rueda.Apertura, cierre o situaciones especiales.
ReglasSiempre dependen del mercado, segmento e instrumento.

17.12 Recepción, aceptación y ejecución

Son eventos distintos. El intermediario puede recibir una instrucción cuando el mercado está cerrado, guardarla para más tarde y enviarla al abrir. El mercado puede aceptarla sin que exista una ejecución.

recibida ≠ enviada ≠ aceptada ≠ ejecutada

Una interfaz debe mostrar estados precisos. Informar «orden realizada» cuando solo fue recibida crea una expectativa incorrecta.

17.13 Vigencia de una orden

La vigencia indica hasta cuándo puede permanecer activa una instrucción. Una orden válida por el día normalmente deja de estar activa al concluir la sesión correspondiente; otras vigencias pueden abarcar más tiempo.

El horario no debe usarse para inventar una vigencia. La política elegida, el calendario y las reglas del mercado deben evaluarse en conjunto. Los tipos de orden se estudiarán específicamente en el tema 19.

17.14 Interrupciones y estados extraordinarios

Una rueda puede pausarse para todo el mercado, un segmento o un instrumento. Entre las causas posibles hay problemas operativos, anuncios relevantes o mecanismos de control ante movimientos excepcionales.

Advertencia: estar dentro del horario habitual no demuestra que el instrumento esté negociando. El estado operativo en tiempo real prevalece sobre la plantilla del día.

17.15 Laboratorio: consultar el estado de una rueda

Este mercado ficticio opera de lunes a viernes. Elegí el tipo de día, la hora local y la acción solicitada. El simulador distingue si el mensaje sería admitido y si la fase permite ejecuciones.

Rueda didáctica MIF

Horario ficticio en America/Argentina/Buenos_Aires. No representa un mercado real.

Preapertura09:30–10:00
Continua10:00–16:50
Subasta de cierre16:50–17:00
Posrueda17:00–17:15
Estado de sesiónPreapertura
¿Admite la solicitud?Sí
¿Puede ejecutar ahora?No

La orden puede ingresar, pero queda a la espera del cruce de apertura.

17.16 Implementar la clasificación horaria

Convertir la hora a minutos desde medianoche evita comparar textos y simplifica los intervalos semiabiertos: el inicio se incluye y el final pertenece a la fase siguiente.

function aMinutos(hora) {
  const [horas, minutos] = hora.split(":").map(Number);
  return horas * 60 + minutos;
}

function estadoDeSesion(hora) {
  const minuto = aMinutos(hora);

  if (minuto >= 570 && minuto < 600) return "PREAPERTURA";
  if (minuto >= 600 && minuto < 1010) return "CONTINUA";
  if (minuto >= 1010 && minuto < 1020) return "SUBASTA_CIERRE";
  if (minuto >= 1020 && minuto < 1035) return "POSRUEDA";
  return "CERRADO";
}

console.log(estadoDeSesion("09:45"));
console.log(estadoDeSesion("12:30"));
console.log(estadoDeSesion("17:05"));

17.17 Separar datos y decisiones

Los intervalos deben almacenarse como datos del calendario. La función de consulta interpreta la configuración efectiva para una fecha, en lugar de contener horarios permanentes en su código.

const rueda = {
  mercado: "MIF",
  fecha: "2026-09-14",
  zonaHoraria: "America/Argentina/Buenos_Aires",
  tipoDeJornada: "NORMAL",
  fases: [
    { estado: "PREAPERTURA", desde: "09:30", hasta: "10:00" },
    { estado: "CONTINUA", desde: "10:00", hasta: "16:50" },
    { estado: "SUBASTA_CIERRE", desde: "16:50", hasta: "17:00" },
    { estado: "POSRUEDA", desde: "17:00", hasta: "17:15" }
  ]
};

console.log(rueda.mercado, rueda.fases.length);
console.log(rueda.fases.map(fase => fase.estado));

17.18 Errores frecuentes

  • Suponer que todo día de lunes a viernes es hábil.
  • Comparar la hora del servidor con el horario local del mercado.
  • Reducir la sesión a un booleano abierto.
  • Confundir aceptación de la orden con ejecución.
  • Tratar un precio indicativo de subasta como precio operado.
  • Ignorar jornadas abreviadas, pausas y cambios reglamentarios.

17.19 Ejercicio integrador

Una rueda ficticia tiene preapertura de 08:45 a 09:15, negociación continua de 09:15 a 15:40 y subasta de cierre de 15:40 a 15:50. Implementá clasificarHora y consultá 08:30, 09:00, 12:10, 15:45 y 16:00.

Ver una solución posible
function minutos(hora) {
  const [h, m] = hora.split(":").map(Number);
  return h * 60 + m;
}

function clasificarHora(hora) {
  const t = minutos(hora);
  if (t >= 525 && t < 555) return "PREAPERTURA";
  if (t >= 555 && t < 940) return "CONTINUA";
  if (t >= 940 && t < 950) return "SUBASTA_CIERRE";
  return "CERRADO";
}

for (const hora of ["08:30", "09:00", "12:10", "15:45", "16:00"]) {
  console.log(hora, clasificarHora(hora));
}

17.20 Ideas para recordar

  • Una rueda combina fecha operativa, zona horaria, segmento y fases.
  • El calendario real incluye feriados, excepciones y jornadas abreviadas.
  • La preapertura reúne intenciones sin asegurar una ejecución inmediata.
  • La subasta concentra órdenes; la negociación continua las procesa secuencialmente.
  • Recibir, aceptar y ejecutar una orden son eventos diferentes.
  • El estado operativo vigente prevalece sobre el horario habitual.

En el próximo tema estudiaremos el libro de órdenes, las puntas compradora y vendedora y el spread.