La gestión eficiente de los pedidos es crucial para una negociación de alto rendimiento en Deribit. Este artículo explica cómo se procesan las órdenes a través del sistema de Deribit y describe las mejores prácticas para lograr la ejecución más rápida y confiable. Abordamos el proceso de envío de pedidos, las colas internas, la optimización de la latencia, las estrategias de cancelación, la modificación o sustitución de pedidos, los tipos de órdenes avanzados (como OCO/OTO) y otros consejos para desarrolladores y operadores institucionales que utilizan la API de Deribit. El objetivo es ayudarte a gestionar los pedidos de forma eficaz y, al mismo tiempo, minimizar la latencia
Cuando envías un pedido a Deribit (ya sea a través de API REST, WebSocket, o ARREGLAR), recorre una arquitectura multinodo antes de llegar al motor correspondiente. La plataforma de negociación de Deribit está construida en Erlang nodos que aceptan conexiones y solicitudes de clientes. Estos nodos de puerta de enlace se comparten entre todos los participantes; un balanceador de cargas asigna la sesión a un nodo en función de la carga y la ubicación de la red. Cada nodo se comunica con una central nodo maestro o un clúster de motores correspondiente para determinar el estado de las órdenes y ejecutar las operaciones. Su orden pasa del cliente a uno de los nodos de la pasarela de API de Deribit y, a continuación, al motor correspondiente, donde se compara con otras
Importante
Todas las interfaces API (REST, WebSocket, FIX) se alimentan en última instancia en el mismo motor coincidente. El uso de WebSocket o FIX proporciona una conexión persistente a estos nodos, mientras que REST establece una nueva conexión HTTP por solicitud. Los múltiples nodos de puerta de enlace garantizan la escalabilidad y la distribución de la carga, pero no alteran la equidad de la correspondencia: todas las órdenes se cumplen en un único motor de comparación para su ejecución
A lo largo del trayecto desde el sistema hasta el motor de búsqueda, es posible que los pedidos se pongan en cola en varias etapas. Comprender estas colas puede ayudar a optimizar el rendimiento
-
Cola TCP y del lado del cliente: En primer lugar, es posible que su pedido permanezca brevemente en el búfer de envío TCP de su conexión. Se trata de una cola específica de un cliente no se comparte con otros participantes. La alta latencia de la red o el envío de grandes ráfagas de datos pueden provocar que se acumule
-
Colas de nodos de entrada de Deribit: Dentro del nodo de Deribit que recibió su pedido, hay grupos de subprocesos independientes para los diferentes tipos de solicitudes. Por ejemplo, las solicitudes de datos «públicas» (como las suscripciones a datos de mercado) pueden usar un grupo compartido, mientras que las acciones «privadas» (como realizar o cancelar pedidos) usan un grupo diferente. Las solicitudes de pedidos privados de tu sesión suelen ir a una cola dedicada a tu conexión (no se comparten con otras personas), mientras que algunos feeds públicos se procesan en colas compartidas. Este diseño evita, por ejemplo, que un feed público lento bloquee los comandos de tus pedidos privados
-
Comunicación entre nodos: Si el nodo de puerta de enlace necesita comunicarse con el motor maestro de comparación u otros nodos (mediante el protocolo de distribución de Erlang), esos mensajes pasan por un canal TCP interno. Se puede considerar este canal entre nodos compartido en el sentido de que los mensajes de muchos participantes podrían fluir a través de él, lo que podría hacer cola debido a una carga elevada.
-
Cola de bloqueo a nivel de usuario: En la capa del motor correspondiente, Deribit impone un orden de acciones por usuario y por moneda. Todas las solicitudes que afectan a la cuenta de un solo usuario para una moneda determinada se canalizan a través bloqueo del proceso de usuario. Esto significa que si envías varias acciones (pedidos, cancelaciones) en la misma cuenta y en la misma divisa, se ejecutarán de forma secuencial en el orden en que se recibieron. Si tienes varias conexiones (o claves de API) en la misma cuenta que operan en la misma divisa, seguirán compartiendo esta cola para mantener la coherencia. Esta cola está compartida entre todas las conexiones de ese usuario para esa moneda.
-
Cola de motores coincidente: Por último, el proceso de la cartera de pedidos de cada instrumento tiene su propia cola para los pedidos entrantes y las cancelaciones. Aquí es donde su pedido compite en última instancia con otros. Esto se comparte por todos los participantes que negocian ese instrumento: solo se puede procesar una acción a la vez por cartera de pedidos. Si llegan varios pedidos más o menos al mismo tiempo, pasarán a formar una cola aquí brevemente antes de ser igualados en secuencia
En resumen, algunas colas (como la cola de trabajadores privados y TCP de tu conexión) son exclusivas para ti, mientras que otras (como la cartera de pedidos global) se comparten de forma natural. Sabiendo esto, comprenderás por qué, si el sistema está sometido a una gran carga de trabajo, es posible que se produzcan pequeños retrasos o un orden no determinista (por ejemplo, si muchos mensajes llegan a la libreta del mismo instrumento a la
La API de Deribit es asíncrona y multiproceso, lo que significa que las solicitudes se pueden gestionar de forma desordenada y en paralelo siempre que sea posible. oleoductos diferentes tipos de solicitudes para maximizar el rendimiento. Por ejemplo, existen diferentes tipos de tareas internas para las distintas categorías de acciones en una conexión WebSocket: una para las acciones privadas con el motor de búsqueda de datos en BTC, otra para las acciones privadas con ETH (y del mismo modo para otras monedas), otra para las solicitudes privadas que no utilizan el motor de búsqueda de coincidencias (como las consultas de cuentas) y otra para las suscripciones de datos públicos. Debido a esta separación, las solicitudes enviadas de forma consecutiva pueden procesarse
Respuestas fuera de orden: Es normal recibir las respuestas en un orden diferente al que enviaste las solicitudes. Por ejemplo, si envías rápidamente una solicitud de suscripción (datos públicos) seguida de una solicitud de compra (operación de negociación privada), es posible que la respuesta de la suscripción llegue antes de la confirmación del pedido, aunque hayas enviado el pedido primero. Esto se debe a que las solicitudes son gestionadas por diferentes subprocesos de trabajo y no indica ningún problema. La arquitectura de Deribit garantiza que cada categoría (y los pedidos de cada moneda) se procesen en paralelo, por lo que gana la respuesta más rápida. En un ejemplo, un usuario observó que la respuesta de una suscripción llegaba antes que la respuesta de una solicitud anterior; este es el comportamiento esperado en el diseño de subprocesos múltiples
Condiciones de la carrera entre participantes: En un entorno de alta frecuencia, dos participantes pueden correr para aprovechar una oportunidad. Quién gane esta carrera depende en gran medida de factores externos (latencia de la red, temporización de los mensajes) y de un poco de suerte a la hora de programar. Desde el momento en que un pedido llega a la plataforma y entra en el motor de búsqueda, todos los pedidos de los usuarios se tratan de manera justa y por orden de llegada. Sin embargo, en un sistema distribuido de varios nodos, existe cierta falta de determinismo, ya que el orden llega primero si están muy cerca en el tiempo. Un participante un poco más lento podría conseguir que su pedido coincidiera primero si el más rápido experimentara más demoras en la red o si la programación de subprocesos provocara un breve reordenamiento. Básicamente, no hay garantía de que el participante pretendido ser el primero siempre será el ganador: el verdadero ganador es quien la solicitud llegue primero al motor correspondiente, lo que puede variar en un entorno de procesamiento paralelo.
Solicitudes cancelables en cola: Una función avanzada de la API WebSocket de Deribit es la posibilidad de cancelar o anular las solicitudes que aún están en la cola de la sesión. Por ejemplo, si lanzas una ráfaga de pedidos y, a continuación, envías un comando cancel_all, el sistema no solo cancelará los pedidos que hayan llegado a la cartera de pedidos sigues esperando en la cola de tu conexión (si lo hay). Las solicitudes canceladas antes de la ejecución devolverán 13666 (»request_cancelled_by_user«), lo que indica que la solicitud nunca llegó a la cartera de pedidos porque la cancelaste durante el vuelo. Del mismo modo, cancel_by_label puede cancelar por etiqueta un subconjunto específico de pedidos en cola antes de que se ejecuten. Este mecanismo ayuda a evitar que se ejecuten pedidos pendientes si ya no son necesarios, lo que te permite controlar de forma efectiva la eliminación de tu propia cola
Nota
El código de error 13666 no es una mala señal; indica explícitamente que una solicitud pendiente se retiró correctamente. En la práctica, es posible que veas esto si envías un lote de pedidos y luego los cancelas todos rápidamente; es posible que algunos de esos pedidos se cancelen incluso antes de que lleguen al motor correspondiente y devuelvan el error de cancelación para esas solicitudes específicas
La velocidad es con frecuencia crítica. Estas son algunas de las mejores prácticas para que tus pedidos lleguen al motor correspondiente lo antes posible:
-
Utilice WebSocket o FIX en lugar de REST: Las conexiones WebSocket (JSON-RPC) y FIX son persistentes y están optimizadas para una baja latencia, mientras que REST genera una sobrecarga adicional por solicitud. De hecho, WebSocket y FIX ofrecen una latencia casi idéntica en la mayoría de los casos. FIX puede ser ligeramente más rápido para ciertas acciones, como las cancelaciones masivas, porque evita algunas colas, pero tiene menos funciones en comparación con WebSockets. REST, por otro lado, es un poco más lento, ya que cada solicitud HTTP debe configurarse, autorizarse y procesarse En pocas palabras: si realiza pedidos frecuentes o necesita velocidad en tiempo real, prefiera WebSocket o FIX. Use REST solo para solicitudes poco frecuentes o si la simplicidad es más importante
-
Mantenga una conexión ligera: Evite enviar o recibir una cantidad excesiva de datos en la misma conexión, ya que las ráfagas grandes pueden llenar la canalización TCP y el analizador JSON. Por ejemplo, si te suscribes a todos los ticks de cientos de instrumentos en el mismo WebSocket que utilizas para operar, la avalancha de datos entrantes podría retrasar el procesamiento de tus mensajes de pedido. Puede ser una buena idea separar las suscripciones con muchos datos del mercado y colocarlas en una conexión diferente a la de entrada de órdenes o, al menos, reducir el volumen de
-
Envía ráfagas modestas de pedidos: Si tienes que enviar muchos pedidos, evita enviar lotes muy grandes de una sola vez. Si bien la canalización de Deribit puede procesar grandes volúmenes, enviar «decenas de pedidos a la vez» en una sola ráfaga con el mismo instrumento o moneda puede generar atrasos y aumentar la latencia para los pedidos posteriores (un «efecto bola de nieve»). En su lugar, considera la posibilidad de escalonar ligeramente los lotes o utilizar varias conexiones (o subprocesos) para envíos muy grandes, dividiéndolas por
Para la creación de mercado de alta frecuencia, el Cotizaciones masivas la funcionalidad ofrece un enfoque más eficiente. En lugar de enviar muchas solicitudes individuales de colocación de pedidos, Mass Quotes le permite enviar o actualizar varios pares de oferta y demanda para uno o más instrumentos en una sola llamada a la API. Esto reduce la sobrecarga por pedido, reduce el tráfico de la red y ayuda a mantener baja la latencia, incluso cuando se cotizan varios
Recuerde que dentro de una moneda única, las solicitudes se serializan por usuario. Si envías 50 pedidos de BTC de una sola vez, los pondrás en cola de forma secuencial; las cotizaciones masivas o un ritmo cuidadoso pueden ayudarte a alcanzar los mismos objetivos de cotización con menos colas y una respuesta global más rápida.
-
Optimice las condiciones de la red: Asegúrese de que su servidor comercial tenga una ruta de red rápida y confiable a los servidores de Deribit. Si eres sensible a la latencia, considera hospedarlo en una ubicación cercana al centro de datos de Deribit (la LD4 de Londres es la bolsa principal). Las conexiones externas a Internet pasan por equilibradores de carga y tienen rutas más largas, lo que añade un poco de latencia (del orden de microsegundos para el salto LB, más cualquier retraso geográfico). Algunas empresas optan colocación para reducir el tiempo de ida y vuelta. Si bien se trata de una cuestión de infraestructura que va más allá de la propia API, es un factor importante en los escenarios de carreras.
Al seguir estas prácticas (usar el protocolo correcto, administrar la carga de la conexión y optimizar la red), puede minimizar el tiempo que tardan sus pedidos en llegar al motor correspondiente.
Cada pedido que modifique una cartera (nuevos pedidos, ediciones, cierre de posiciones, etc.) debe superar primero un verificación de riesgos. Este proceso garantiza que los saldos, las posiciones y los márgenes se mantengan consistentes en toda la plataforma. Las comprobaciones de riesgo se ejecutan dentro del Cola de portafolios, donde cada solicitud espera a que se «bloquee» antes de poder actualizar el estado de la cartera.
Cuándo las comprobaciones de riesgo pueden tardar más
Las verificaciones de riesgo suelen ser rápidas, pero varios factores pueden extender su tiempo de procesamiento:
-
Portafolios de gran tamaño — Un número muy elevado de posiciones abiertas aumenta las actualizaciones y la sincronización incrementales de la cartera necesarias.
-
Actividad de alto nivel — Una gran cantidad de órdenes abiertas activas conduce a cálculos de márgenes más pesados.
-
Congestión de colas — Si hay muchas conexiones y solicitudes pendientes de acceso a la cartera, es posible que las comprobaciones se retrasen.
Tipos de pedidos y comprobaciones de riesgo
-
Todos los tipos de pedidos se procesan con las mismas comprobaciones de riesgo. Los indicadores de reducción exclusiva o las instrucciones de caducidad (p. ej., GFD o IOC) no afectan
-
Cancelar solicitudes (
cancel,cancel_all,cancel_by_label) también pasan por la lista de espera de carteras, pero se ejecutan sin comprobar el riesgo. -
Citas masivas son la única excepción: omiten la mayoría de las comprobaciones de riesgo para respaldar las cotizaciones de alto rendimiento.
Errores relacionados con las comprobaciones de riesgos
-
10047 matching_engine_queue_full: La lista de espera de Portfolio puede contener hasta 8 procesos en espera. Si está llena, las nuevas solicitudes se rechazarán con este error. En FIX, esto aparece como demasiadas solicitudes. -
10050 lock_time_exceeded: Si una solicitud no puede completar el procedimiento de bloqueo en 5 segundos, se agota el tiempo de espera, incluso si hay menos de 8 procesos en espera.
Sugerencia
Mejores prácticas
-
Mantenga el número de conexiones de cliente simultáneas por debajo del máximo de 8 para minimizar la posibilidad de que se produzca un error
10047. -
Tenga en cuenta que las acciones internas (órdenes de activación, órdenes de liquidación, órdenes de opciones avanzadas) también consumen espacios de espera, lo que deja menos espacios disponibles para la actividad de los clientes.
La gestión eficiente de las órdenes abiertas a menudo implica cancelaciones masivas, especialmente para los creadores de mercado o los operadores algorítmicos que necesitan actualizar las cotizaciones rápidamente. Deribit proporciona varios puntos finales de API para cancelar pedidos, cada uno adecuado para
-
Cancelar un solo pedido: Puedes cancelar por identificador de pedido mediante el privado/cancelar método (proporcionando lo específico
order_id). Esto es sencillo para las cancelaciones puntuales -
Cancelar por etiqueta: Si etiquetas tus pedidos con una etiqueta (una cadena de hasta 64 caracteres definida por el usuario) al realizarlos, puedes cancelar todos los pedidos con esa etiqueta en una sola llamada a través de private/cancel_by_label. Esto es útil para agrupar y gestionar los pedidos relacionados. Por ejemplo, puedes etiquetar todos los pedidos de una estrategia o instrumento en particular y, después, cancelarlos de una vez por etiqueta.
-
Cancelar todos los pedidos:privado/cancel_todos intentará cancelar cada abra órdenes en su cuenta, en todos los instrumentos y divisas. Si bien es conveniente, esta es la llamada de cancelación más pesada porque lo cubre todo
-
Cancelar todo en una moneda:privado/cancel_todo_por_divisa es una cancelación masiva más específica: cancelará todos los pedidos en una moneda determinada (por ejemplo, todos los pedidos en BTC o todos los pedidos en ETH). Incluso puedes filtrar por tipo de instrumento o tipo de orden si es necesario (por ejemplo, solo opciones o solo órdenes suspendidas).
-
Cancelar todo en un instrumento:privado/cancel_todo_por_instrumentocancelará todos los pedidos de un instrumento específico (p. ej., una opción concreta o futura).
-
Cancele cotizaciones a través de Mass Quotes: Si cotiza varios instrumentos, utilice el Cotizaciones masivas función, puede cancelar todas las cotizaciones activas en una sola llamada a la API (private/cancel_quotes). Esto es más eficaz que cancelar cada orden cotizada de forma individual y es particularmente útil para los creadores de mercado que gestionan grandes carteras de cotización con varios instrumentos
Sugerencia
¿Cuál es el más rápido?
En términos de latencia bruta, una cancelación por moneda tiende a ser más rápida que una cancelación global total. Esto se debe a que cuando se llama al genérico cancel_all, el sistema lo divide internamente en cancelaciones separadas por moneda (una para BTC, otra para ETH, etc.) más algunos gastos generales.
Si tú sabes solo necesita cancelar pedidos en, por ejemplo, BTC y ETH, puede ser más rápido llamar private/cancel_all_by_currency dos veces (una para BTC, otra para ETH) en paralelo. Esto elimina la lógica de división adicional y centra las solicitudes de cancelación directamente. El resultado es una menor latencia para las cancelaciones masivas, lo que puede resultar crucial durante los rápidos movimientos del mercado
A continuación se muestra un ejemplo del uso de la API JSON-RPC (a través de WebSocket o HTTP) para cancelar todos los pedidos de instrumentos BTC:
{
«jsonrpc»: «2.0",
«identificación»: 42,
«método»: «private/cancel_all_by_currency»,
«parámetros»: {
«moneda»: «BTC»
}
La respuesta indicará cuántos pedidos se cancelaron correctamente. Por ejemplo, un resultado de {"result": 3} significa que se cancelaron tres pedidos. Podría denominarse así para cada divisa con la que opere. Ten siempre en cuenta la posibilidad de que algunos pedidos ya se hayan tramitado o se hayan cancelado; simplemente se omitirán
Cuando necesitas cambiar los parámetros de una orden abierta (precio o tamaño), por lo general tienes dos opciones: editar el pedido en vigor, o cancelar y hacer un nuevo pedido. La API de Deribit admite la edición de pedidos y, por lo general, es más eficaz que cancelar y volver a enviar
Ventaja de rendimiento: Una edición es una sola solicitud al sistema, mientras que la cancelación y un nuevo pedido son dos solicitudes. Un menor número de solicitudes implica menos gastos en la cola de API y menos trabajo para el motor correspondiente. En la práctica, la edición de un pedido suele ser más rápida y se traduce en una menor latencia entre el inicio del cambio y el pedido que refleja los nuevos parámetros. También reduce la carga en la conexión y en la infraestructura de Deribit (análisis, puesta en cola, etc.), lo que resulta beneficioso durante los períodos de alto rendimiento.
Prioridad del libro de pedidos: Si disminuyes la cantidad del pedido o mantienes el precio igual, se realizará una modificación no cambia la prioridad del pedido en el libro: conserva su prioridad temporal a ese nivel de precios. Del mismo modo, si solo estás reduciendo el tamaño, mantendrás tu lugar en la cola para recibir la cantidad restante. Por el contrario, si cancelas y realizas un nuevo pedido, perderás por completo tu posición original en la lista de espera; el nuevo pedido se considerará nuevo al final de la cola por
Importante
Si tú aumentar la cantidad del pedido o el cambio de precio (haciéndolo más agresivo o más pasivo), la orden editada se trata como una nueva orden a ese nivel de precio, lo que significa que pasará al final de la lista por el nuevo precio. (Esto es lógico, ya que otros pedidos ya estaban en espera de ese precio). Es importante destacar que si solo editas el precio, aunque sea para mejorarlo (por ejemplo, mover una compra al alza o una venta a la baja), pierdes la prioridad temporal porque el pedido básicamente se traslada a un lugar diferente
Consideraciones sobre el llenado parcial: edición conserva el historial de todos los rellenos. Si un pedido se completó parcialmente antes de la edición, esos rellenados se contabilizan. El importe acumulado rellenado permanece igual y el tamaño restante simplemente se ajusta en función de la nueva cantidad total.
Por ejemplo, supongamos que tienes un pedido de 200 unidades y se han llenado 100 y quedan 100 sin rellenar. Si editas el pedido para aumentar el importe total a 400, las 100 completadas seguirán formando parte del historial del pedido y la cantidad restante se actualizará a 300 Los rellenados anteriores no se «restablecen» al editar un pedido.
Si, por el contrario, cancelas los 100 restantes y realizas un nuevo pedido por 300, el nuevo pedido no registrará el llenado anterior de 100 y recibirá un identificador y una marca de tiempo nuevos. La edición suele ser más limpia desde el punto de vista contable, especialmente cuando necesitas calcular los precios o tarifas de llenado promedio de ese pedido
Conclusión: Siempre que sea posible, prefiera editar un pedido en lugar de cancelarlo y volver a crearlo, siempre y cuando los cambios se ajusten a lo permitido (por ejemplo, no se puede cambiar una orden limitada por una orden suspendida mediante la edición; es para ajustar el precio o el importe). De Deribit privado/editar (por order_id) o privado/edit_by_label (si usas label) se puede utilizar para este propósito. A continuación se muestra un ejemplo de cómo editar un pedido por su etiqueta:
{
«jsonrpc»: «2.0",
«identificación»: 123,
«método»: «private/edit_by_label»,
«parámetros»: {
«instrument_name»: «BTC-PERPETUO»,
«label»: «my_order_group»,
«precio»: 50111.0,
«cantidad»: 150
}
En este ejemplo, segmentamos el pedido identificado por la etiqueta "my_order_group«y cambiar su price al 50111.0 y quantity hasta 150. La respuesta devolverá los detalles del pedido actualizados (precio nuevo, importe restante, etc.). privado/editar con un order_id si rastreas los pedidos por su identificador en lugar de por etiquetas.
Es importante entender cómo Deribit le notifica los eventos de los pedidos, especialmente en los casos de llenados parciales. Un punto de confusión habitual es ver un pedido cancelado notificación y un pedido rellenado notificación para el lo mismo orden. ¿Cómo se puede tramitar y cancelar un pedido?
Esto ocurre cuando un pedido es llenado parcialmente y luego se cancela el resto. Por ejemplo, supongamos que publicaste una orden de venta de 1000 contratos. Inmediatamente se llenó parcialmente para 500, dejando 500 sin llenar. Si luego cancelas el pedido, lo que quede (500) se eliminará del libro. Recibirás:
-
Uno o más eventos de negociación o llenado para los 500 que han negociado (a través del user.trades. * canal o informes de ejecución).
-
Un evento de cancelación de un pedido que indique que el pedido ya no está activo (a través del user.orders. * canal).
Interpretar una notificación de llenado junto con una notificación de cancelación para el mismo pedido significa reconocer que el pedido se ejecutó parcialmente y que la cantidad restante se retiró del libro. Una orden de este tipo no está totalmente tramitada ni sigue abierta; se completó parcialmente y, a continuación, se cerró.
Los sistemas de negociación siempre deben diseñarse para procesar tanto las notificaciones comerciales como las actualizaciones de las órdenes a fin de mantener un seguimiento preciso de las posiciones y los estados de las órdenes, garantizando la capacidad de decidir si es necesario tomar más medidas. Una cancelación en este contexto no anula ninguna operación ejecutada, sino que impide la ejecución ulterior de la cantidad restante, y no se debe dar por sentado que una orden es de tipo «todo o nada» a menos que se haya realizado con una instrucción específica, como
Para protegerse contra pedidos erróneos o movimientos extremos de precios, Deribit emplea precios de negociación, límites de ancho de banda en todos los instrumentos. Esto define un límite superior e inferior en torno a un precio de referencia (a menudo el índice o el precio de la última operación) dentro del cual se pueden colocar las órdenes. Si envías un pedido con un precio fuera de este rango permitido, se rechazará con un error como price_too_high o price_too_low.
Qué hacer: Si encuentras estos errores, comprueba que tu lógica de precios es correcta. Puede ser que tu fuente de precios esté obsoleta o que tengas un error. Si de forma intencionada quieres colocar una orden fuera del rango normal de negociación (por ejemplo, como una posición de alto o una cobertura extrema), simplemente no puedes hacerlo: tendrás que vigilar el mercado hasta que ese precio se sitúe dentro del rango. Este mecanismo sirve para proteger a todos los participantes de caídas repentinas o imprevistos debidos a órdenes atípicas
Para obtener información más detallada sobre los anchos de banda de precios, consulte la las especificaciones del instrumento en la base de conocimientos de Deribit. Los límites de ancho de banda pueden variar entre los diferentes tipos de instrumentos, por lo que es importante revisar las especificaciones de cada producto que comercialice.
Deribit ofrece un «Solo por correo» en los pedidos, que es una función habitual para evitar comisiones a los tomadores o ejecuciones no deseadas. A. Solo por correo El pedido solo generará liquidez; nunca tomar liquidez de la cartera de pedidos. Si envías un pedido únicamente sería si lo comparas inmediatamente con un pedido existente (lo que te convierte en un ganador), Deribit lo ajustará o rechazará en función de los ajustes:
-
De forma predeterminada, si una orden solo posterior cruzara el diferencial y se ejecutara, Deribit lo hará automáticamente ajustará el precio basta con marcar una casilla dentro del diferencial para asegurarse de que se convierte en un pedido del fabricante. Por ejemplo, supongamos que el mejor pedido es de 10.000€ y envías una orden de compra con
post_onlya 11.000. En lugar de formalizar el pedido a 10 000$, el sistema colocará tu pedido a 9.999,50$ (suponiendo una marca de 0,50$), justo por debajo de la mejor oferta, para que quede en el libro sin ejecutarse. Este comportamiento garantiza que tu intención de publicar solo se respete -
Si prefiere que la orden no se ejecute estrictamente y no ajustada, puede activar el rechazar solo por correo función. En la API JSON, esto se hace con "
reject_post_only«:true(y en FIX, usandoExecInst6Aen lugar de6). Con esta configuración, si tu pedido solo por correo provoca una coincidencia inmediata, el sistema rechazará el pedido en lugar de ajustar el precio. Esto te da más control, ya que el pedido se realiza sin modificar a tu precio (sin igualación) o no lo consigues. Algunos operadores utilizan esta opción para evitar incluso la ligera diferencia de precio, y prefieren rechazarla rotundamente si la orden no está -
Edición de órdenes solo por publicación: si editas una orden existente solo por publicación de manera que sea agresiva (por ejemplo, moviendo su precio a un nivel que se compararía con el libro actual), el comportamiento depende del modo:
-
En el modo estándar de solo publicación, el sistema ajustará el precio al editar para seguir siendo un creador (similar a la publicación inicial).
-
En modo de rechazo (
ExecInst 6A/reject_post_only:true), la solicitud de edición hará que el pedido cancelar si de lo contrario se convertiría en un tomador. Básicamente, el pedido no se mantendrá si tu cambio infringe las condiciones de venta exclusiva
-
Los pedidos únicamente por publicación son muy útiles para crear mercado y garantizar que no se quede con liquidez sin darse cuenta. Ten en cuenta el comportamiento decreciente de los precios para que no te sorprenda que una orden se mantenga a un precio ligeramente diferente al que solicitaste. Si necesitas el precio exacto o nada, usa el modo de rechazo.
Un pedido de Iceberg te permite hacer un pedido grande y mostrar solo una pequeña parte (el mostrarcantidad) en la cartera de pedidos. Una vez que se llena la parte visible, el sistema la repone automáticamente (hasta cantidad de actualización) hasta que se ejecute o cancele el tamaño total del pedido. La parte visible se comporta como una orden de un creador, mientras que las partes ocultas que se negocian se consideran tomadoras a efectos de comisiones
Al realizar o editar un pedido mediante la API (privado/comprar, privar/vender, o privado/editar), incluyen:
-
display_amount— la punta visible del pedido. -
refresh_amount— la cantidad fija utilizada para reponer la parte visible cuando se llena.
Ambos parámetros son opcionales, pero si display_amount está establecido, debe cumplir los siguientes requisitos:
-
Al menos 100 veces el tamaño mínimo de pedido del instrumento.
-
Al menos el 1% del tamaño total del pedido.
Notas adicionales
-
El
refresh_amountpermanece constante; solo eldisplay_amountcambia a medida que se completa el pedido. -
Las partes ocultas se ejecutan inmediatamente cuando se comparan e incurren Comisiones del tomador.
-
Las órdenes Iceberg son útiles para ejecutar grandes operaciones de forma discreta sin revelar su tamaño total al mercado.
Atención
Los pedidos de Iceberg son no es compatible sobre diferenciales futuros
Deribit permite vincular órdenes con relaciones condicionales, lo que puede resultar extremadamente útil para automatizar estrategias complejas. Los principales tipos de órdenes vinculadas son
-
OTO — Uno desencadena al otro: Esto implica una orden principal y una o más órdenes secundarias que permanecen inactivas hasta que se ejecute la orden principal. Cuando la orden principal se llena total o parcialmente (según la condición desencadenante) desencadena los pedidos secundarios que se van a realizar. Por ejemplo, quieres comprar 100 BTC-PERP si el precio cae a 20 000$ y, si ese pedido se completa, quieres realizar inmediatamente una orden de venta con fines de lucro a 22 000$. Se trata de una configuración de «uno desencadena a la otra»: la compra es la principal; la venta es secundaria y solo entrará en el libro una vez que se haya ejecutado
-
OCO — Uno cancela otro: Esto vincula dos órdenes de manera que si una orden se ejecuta, la otra se cancela automáticamente. Un caso de uso común es poner entre corchetes el mercado detenga las pérdidas y obtenga ganancias. Es posible que tengas una orden de cierre bursátil para vender si el precio cae a 19 000$ y una orden de venta limitada para obtener beneficios de 22 000$, ambas para el mismo tamaño de posición. Lo único que quieres es que una de ellas acabe imponiéndose: lo que ocurra primero anula la otra. Estos dos pedidos se vincularían como OCO. Si el stop se activa y se completa, la toma de ganancias se cancela y viceversa.
-
OTOCO — Uno activa, uno cancela otro: Básicamente, se trata de combinar OTO y OCO. Tiene una orden principal y, al ejecutarla, activa dos órdenes secundarias que, a su vez, están en una relación de OCO. Este es el clásico entrada con corchete de salida escenario. Por ejemplo, ingresas una posición larga (orden principal). Cuando se llena, activa la colocación simultánea de una orden de stop loss y una orden de obtención de beneficios (las dos secundarias). Estas dos órdenes secundarias están vinculadas entre sí, por lo que solo una puede ejecutarse en última instancia: si se alcanza el objetivo de beneficios, se cancela el stop o, si se alcanza el stop, se cancela la orden de obtención de beneficios. De este modo, OTOCO automatiza todo el ciclo: la entrada, con una salida protegida en ambos sentidos. Es muy útil para las operaciones sin intervención, ya que garantiza la gestión del riesgo y la obtención de beneficios sin intervención manual
Estos pedidos enlazados le permiten configurar una lógica compleja en el servidor. No tienes que esperar a que se complete tu pedido principal y, a continuación, enviar manualmente los secundarios; la plataforma lo hará por ti con una sola configuración atómica. Es especialmente útil para las estrategias en las que se necesita una reacción inmediata (como entrar en una posición con condiciones de salida predeterminadas
Al utilizar los pedidos vinculados, tienes el control sobre condición de llenado eso desencadena los pedidos secundarios (o cancelaciones, en el caso de OCO). Deribit admite algunos modos de cómo y cuándo se
-
Primer golpe: En el momento en que se ejecuta cualquier parte de la orden principal (incluso si se completa parcialmente), se activa la condición. En la configuración First Hit
-
Para OTO, un parcial llenar el pedido principal activará inmediatamente la colocación completa de los pedidos secundarios.
-
Para OCO, si se llena parcialmente la primaria, se cancela inmediatamente la secundaria (en la práctica, con OCO, normalmente se espera a que se complete por completo, pero el sistema permite la lógica del primer golpe).
-
Para OTOCO, tan pronto como la principal se ejecuta por primera vez, se colocan las dos órdenes secundarias y se vinculan entre sí a través de OCO. Básicamente, las órdenes de protección se activan tan pronto como tu puesto comienza a quedar vacante, incluso antes de que esté completamente ocupado
-
-
Relleno completo: Este modo espera hasta que la orden principal se complete por completo (se ejecute por completo) antes de activar las secundarias. En Completar:
-
OTO: Solo se realizarán los pedidos secundarios después de que el primario se haya llenado por completo. Si el primario solo se llena parcialmente y luego se cancela o caduca, los secundarios nunca se activarán
-
OCO: El pedido secundario solo se cancelará cuando el principal se haya completado por completo. (Un caso un tanto extraño para OCO, ya que normalmente el llenado principal no es lo que cancela el secundario, sino que es más aplicable en el contexto de OTOCO)
-
OTOCO: Los dos pedidos secundarios se realizan solo una vez que el principal está lleno al 100%. Esto significa que tu take profit and stop no entrará en el libro hasta que tu pedido de entrada esté completo. Algunos operadores prefieren esto para evitar tener que salir del mercado por una posición que no han obtenido del todo
-
-
Incremental (proporcional): Esta es la opción predeterminada en la interfaz de usuario y es una función muy ingeniosa. En el modo incremental, los pedidos secundarios se ajustan proporcionalmente a la cantidad llenada del pedido principal
-
Para OCO: La secundaria (por ejemplo, un stop loss) se cancelará en proporción a la cantidad de la primaria ocupada. Por ejemplo, si tu primaria se llena al 50%, una secundaria vinculada a OCO podría cancelar el 50% de su tamaño. (El uso de OCO incremental es menos común; es más intuitivo en el contexto de OTOCO
-
Para OTO: El pedido secundario se colocará en incrementos proporcionales al relleno. Si el pedido principal se llena parcialmente, se colocará la fracción correspondiente del pedido secundario. Por ejemplo, el principal es comprar 100 BTC, el secundario es vender 100 BTC (obtener beneficios). Si se llenan 40 BTC de la primera opción, se emitirá inmediatamente una orden de venta de 40 BTC (o un poco menos, véase redondeo) al precio de obtención de beneficios. Si más de los valores primarios se rellenan más tarde, se añadirá un importe secundario adicional hasta el
-
Para OTOCO: Ambos secundarios (stop y take profit) se colocan de forma incremental. Siguiendo el mismo ejemplo, si se adquiere el 40% de tu posición, el sistema realizará el 40% de tu orden de obtención de beneficios y el 40% de tu orden de punto final. A medida que tu pedido principal siga ocupándose, aumentará proporcionalmente el tamaño de esos pedidos secundarios
-
Redondeo: En el modo incremental, los contratos fraccionarios o los lotes no tienen sentido, por lo que Deribit redondeará el tamaño del pedido secundario al contrato completo más cercano que no supere la proporción prevista. Esto garantiza que nunca asigne en exceso los pedidos secundarios. El importe sobrante (derivado del redondeo) solo se depositará cuando el principal se haya llenado por completo (si es que se llena). Básicamente, el sistema se equivoca por ser un poco conservador en cuanto al tamaño del secundario hasta
-
La condición de llenado que elija depende de su estrategia. Primer golpe ofrece la protección más rápida: tus secundarios entran en acción tan pronto como se reparte cualquier parte del primario. Relleno completo garantiza que solo coloques las salidas cuando tienes la posición completa, lo que evita posibles situaciones en las que una salida podría ejecutarse sin la entrada completa (aunque el sistema lo evita de todos modos al vincularlas). Incremental logra un equilibrio: sus órdenes de protección y ganancias aumentan con su posición, lo que puede resultar útil si con el tiempo se llenan parcialmente.
Para crear pedidos enlazados mediante la API, debes enviar el pedido principal junto con la configuración de los pedidos secundarios. En la API JSON-RPC, esto se hace mediante linked_order_type, trigger_fill_condition, y otoco_config parámetros al realizar el pedido principal.
-
linked_order_typeespecifica la relación entre los pedidos -
trigger_fill_conditiondetermina cuándo se realizan o cancelan los pedidos secundarios en relación con los rellenos del pedido principal (el valor predeterminado es "first_hit«) -
otoco_configes una matriz de objetos que describen las órdenes secundarias que se crearán o cancelarán cuando la orden principal cumpla la condición de activación. Cada objeto incluye los parámetros del pedido, como el nombre, el tipo, el importe y el precio del instrumento.
La API devolverá todos los ID y estados de los pedidos resultantes una vez procesados. Si bien la interfaz de usuario web puede restringir las combinaciones por motivos de simplicidad y seguridad (a menudo solo permite una parada y una opción de obtención de beneficios), la API ofrece más flexibilidad, ya que permite realizar varios pedidos secundarios de diferentes tipos. Esta flexibilidad se debe utilizar con cuidado, ya que las configuraciones incorrectas pueden provocar un comportamiento no deseado en los pedidos
Ejemplo de pedido de OTOCO:
{
"method": "private/buy",
"params": {
"instrument_name": "BTC-PERPETUAL",
"amount": 1000,
"type": "limit",
"price": 115000,
"linked_order_type": "one_triggers_one_cancels_other",
"trigger_fill_condition": "complete_fill",
"otoco_config": [
{
"amount": 1000,
"direction": "buy",
"type": "market",
"price": 100000,
"trigger": "last_price"
},
{
"amount": 1000,
"direction": "sell",
"price": 112000,
"trigger": "mark_price"
}
]
},
"jsonrpc": "2.0",
"id": 3
}
Qué significa esta solicitud
Esto envía un orden de compra con límite principal para BTC-PERPETUAL a 115.000$.
Una vez que este pedido principal sea completamente lleno (trigger_fill_condition = complete_fill), se activará dos órdenes secundarias:
-
A orden de compra de mercado del mismo tamaño, activada por el
last_pricealcanzando los 100.000 dólares. -
A orden de venta limitada a 112.000$, activada por el
mark_price.
Las dos órdenes secundarias están vinculadas en un Relación OCO, por lo que si una se ejecuta, la otra se cancela automáticamente.
Ejemplo de respuesta:
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"order": {
"label": "",
"price": 115000,
"user_id": 48595,
"direction": "buy",
"time_in_force": "good_til_cancelled",
"instrument_name": "BTC-PERPETUAL",
"api": true,
"web": false,
"amount": 1000,
"order_id": "58167917688",
"creation_timestamp": 1754907086852,
"mmp": false,
"order_type": "limit",
"order_state": "open",
"replaced": false,
"filled_amount": 0,
"trigger_fill_condition": "complete_fill",
"post_only": false,
"last_update_timestamp": 1754907086852,
"reduce_only": false,
"average_price": 0,
"contracts": 100,
"is_primary_otoco": true,
"is_liquidation": false,
"risk_reducing": false,
"oto_order_ids": [
"OTO-10838714",
"OTO-10838715"
]
},
"trades": []
}
}
Lo que confirma esta respuesta
-
La orden de límite de compra principal es ahora abierto a 115.000 dólares.
-
Está marcado como OTOCO principal (
is_primary_otoco=true) con dos configuraciones de pedido secundario ya asignadas (oto_order_ids). -
Aún no hay rellenos (
filled_amount=0), por lo que las órdenes secundarias son aún no está activo. Solo se colocarán cuando la primaria esté completamente llena, según eltrigger_fill_condition.
Nota
La API no se ocupa de tus pedidos vinculados más allá de las condiciones que has establecido.
A diferencia de la interfaz de usuario web, que puede impedir que configures combinaciones obviamente incorrectas (como un stop loss por encima de un take profit para una posición larga), la API aceptará lo que le des. Es posible crear una configuración de pedidos enlazados que se cancele inmediatamente entre sí debido a la superposición de precios o, por cualquier otro motivo, no tiene sentido. Por lo tanto, usa esta función con cuidado y, si es posible, prueba tu lógica en la red de prueba
Antes de terminar, estas son algunas de las mejores prácticas y datos adicionales que debes tener en cuenta:
-
Redondeo de los promedios de las posiciones: Cuando su posición cambia como resultado de las operaciones, Deribit calcula el nuevo precio de entrada promedio como
total_cost/total_quantity. Internamente, los costos en USD se mantienen con alta precisión (hasta 8 decimales) y los montos en BTC con hasta 12 decimales. Sin embargo, para fines de visualización, el precio promedio se redondea a 2 decimales. Esto significa que el PnL que se muestra en la interfaz de usuario se basa en el precio promedio redondeado, mientras que los cálculos internos y la liquidación final utilizan los valores exactos. Si concilias los costes de las posiciones, ten en cuenta que pueden aparecer pequeñas diferencias de redondeo entre lo que ves en la interfaz y el cálculo exacto -
Identificadores de pedidos y transacciones: Cada pedido y operación que reciba del sistema tiene un identificador único. Estos identificadores no son secuenciales a nivel mundial, pero se garantiza que son únicos y aumentan con el tiempo. Por ejemplo, sus identificadores de operaciones aumentarán, pero no se utilizarán todos los números (podrían existir lagunas, especialmente si se realizan operaciones en otras cuentas o instrumentos). Puedes confiar en el hecho de que una operación posterior tendrá un identificador más alto que una operación anterior, pero no en que sea exactamente +1. Lo mismo ocurre con los números de pedido: no son consecutivos, sino que aumentan de forma monótona en general
-
Cancelación al desconectar (CoD): Deribit ofrece una función opcional, desactivada de forma predeterminada, llamada cancelar al desconectar (CoD). Cuando está habilitada, cancela automáticamente los pedidos activos si se pierde la conexión a la API. Esto se aplica tanto a las sesiones FIX como a las de WebSocket. Si aplicas estrategias en las que una caída de conexión podría dejar sin supervisión las órdenes en el mercado, activar el CoD puede ayudar a mitigar
CoD debe habilitarse explícitamente a través de la API o en la configuración de la interfaz web. Si no está habilitada y tu conexión se interrumpe, tus pedidos permanecerán activos hasta que los canceles manualmente, se cancelen mediante otra acción, se completen por completo o caduquen.
Para obtener instrucciones detalladas sobre cómo habilitar y administrar CoD, consulte la Artículo sobre administración de conexiones o el documentación de la API.
-
Límites de tarifas: Si bien no se trata directamente en la sección anterior, recuerde que Deribit tiene Límites de velocidad de API. Los comportamientos apresurados, como enviar muchos pedidos o cancelar rápidamente, están sujetos a límites. Si alcanzas un límite de velocidad, la sesión se desconectará y podría anular tus ganancias de latencia. La mejor práctica es mantenerse dentro de los límites documentados o ponerse en contacto con Deribit si necesita umbrales más altos para
-
Prueba en el entorno Testnet: Si está implementando una lógica de pedidos compleja (como OTOCO o estrategias de alta frecuencia), realice siempre la prueba test.deribit.com primero. La API es prácticamente idéntica y puedes simular escenarios (incluidos rellenados parcialmente, cancelaciones, etc.) sin arriesgar fondos reales. Esto también puede confirmar que entiendes correctamente las llamadas a la API (especialmente en el caso de los pedidos vinculados). Por favor, consulte Artículos relacionados con Testnet para obtener más detalles.
Al incorporar las estrategias y consideraciones mencionadas anteriormente, puede mejorar significativamente la gestión de sus pedidos en Deribit. Desde reducir la latencia en el envío de pedidos hasta utilizar tipos de órdenes avanzados para la automatización, estas mejores prácticas ayudarán a garantizar que sus operaciones sean eficientes, sólidas y estén alineadas con el funcionamiento interno de la plataforma Deribit