Skip to main content
Cuando envías una orden, la cadena le asigna un ID de orden. Ese ID es el que manda, pero solo lo conoces después de que la orden sea aceptada, lo que es un problema si lo que necesitas hacer es cancelar una orden cuya aceptación nunca llegaste a ver. Un ID de orden del cliente resuelve eso. Generas el identificador tú mismo, lo adjuntas al enviar la orden y puedes actuar sobre ella con ese identificador desde el momento en que la mandas.

Por qué importa más de lo que parece

Piensa en un envío que expira por tiempo. ¿Llegó a la cadena? No lo sabes. Sin un ID de orden del cliente, tus opciones son consultar las órdenes recientes y adivinar por mercado, lado, precio y cantidad, o no hacer nada y confiar en la suerte. Con uno, la ambigüedad desaparece. Cancelas por el identificador que generaste. Si la orden existía, queda cancelada. Si nunca llegó, la cancelación no encuentra nada. En ambos casos acabas en un estado conocido, que es lo que de verdad necesita un sistema que funciona sin que ninguna persona lo vigile. Esto es también lo que hace manejable la conciliación. Tus propios registros se indexan por un identificador que asignaste tú, así que contrastar tu visión con la de la cadena es una búsqueda directa y no una heurística.

Formato

El identificador es un valor de 16 bytes, que se envía como una cadena hexadecimal en minúsculas de 32 caracteres con el prefijo 0x.
Tres reglas que el protocolo impone:
  • Solo minúsculas. El hexadecimal en mayúsculas se rechaza en lugar de normalizarse.
  • Longitud exacta. Los valores más cortos o más largos se rechazan.
  • Todo ceros está reservado. 0x00000000...0000 es el valor centinela que significa ausente y no se puede usar como identificador.
El campo es opcional. Una orden sin él se comporta con normalidad en todo: simplemente no se puede cancelar por ID de orden del cliente, solo por el ID de orden que asigna la cadena.

Unicidad

La unicidad tiene como ámbito la subcuenta: la combinación de la dirección que firma y la subcuenta que cuelga de ella. De ahí se derivan dos consecuencias. Subcuentas distintas bajo la misma dirección pueden usar el mismo identificador sin conflicto, algo útil cuando ejecutas estrategias independientes que generan cada una sus propios ID. Y dentro de una misma subcuenta, reutilizar un identificador que pertenece a una orden activa es un error, no una sustitución.
Genera los identificadores de forma aleatoria, no secuencial. Un contador resulta tentador porque hace visible el orden, pero un reinicio que pierda el contador produce colisiones con órdenes que siguen activas, y 16 bytes aleatorios no colisionan nunca en la práctica.

Qué puedes hacer con él

Vida útil

El identificador pertenece a la orden, no a tu sesión. Se puede seguir consultando después de que la orden se ejecute o se cancele, que es lo que lo hace útil para conciliar a posteriori. Vuelve a ser reutilizable en cuanto la orden que identificaba deja de estar activa. En la práctica hay pocos motivos para reutilizar uno: un valor aleatorio nuevo no cuesta nada y elimina cualquier duda sobre a qué orden se refiere un registro histórico.

Qué leer a continuación

Modificar órdenes

Cambiar una orden activa y qué ocurre con sus identificadores.

Tipos de orden

A qué puedes adjuntar un identificador.

Desarrolladores

Enviar órdenes y gestionar respuestas ambiguas desde el código.

Secuenciación de transacciones

Por qué una cancelación enviada en el mismo bloque se ejecuta antes que una orden agresora.