Ejecución de órdenes
La lógica de reintentos es el conjunto de reglas que decide si una solicitud fallida a un exchange o bróker se vuelve a enviar, cuántas veces, después de cuánto tiempo y, sobre todo, qué solicitudes nunca deben repetirse porque repetirlas podría colocar una segunda orden.
Las redes y las plataformas fallan de formas que parecen idénticas desde fuera: un tiempo de espera agotado (timeout) puede significar que la orden nunca llegó, o que fue aceptada y se perdió la confirmación. Reintentar una lectura (saldo, posiciones, estado de la orden) es inofensivo; reintentar la colocación de una orden después de un fallo ambiguo puede duplicar la posición, lo cual es un resultado peor que perder una operación. Los reintentos también interactúan con los límites de peticiones (rate limits): una ráfaga de reintentos durante un incidente de la plataforma puede provocar el bloqueo temporal de una IP o clave, arrastrando con ella a todas las demás cuentas de ese servidor.
AlgoVesta distingue las lecturas de las escrituras. Las solicitudes de lectura, como obtener posiciones, se reintentan una vez tras una breve espera; las colocaciones de órdenes no se reintentan a ciegas tras un timeout, porque una confirmación perdida no es prueba de que la orden se haya perdido. En su lugar, la plataforma concilia con la plataforma de negociación: se comprueban las posiciones y el historial de operaciones del exchange, y una orden que resulta haberse colocado se registra en lugar de duplicarse. Una protección contra duplicados rechaza una segunda señal idéntica para la misma cuenta, símbolo y dirección dentro de una ventana corta, de modo que un proveedor que vuelve a publicar un mensaje no abre dos posiciones. Cuando una plataforma devuelve una respuesta de límite de peticiones o de bloqueo, la clave o el servidor afectado se retiran en lugar de insistir contra la plataforma, y la condición se muestra en el panel. Las órdenes de protección que no consiguen crearse se reintentan y se verifican, y en las cuentas de forex una posición cuyo stop no puede confirmarse se cierra por diseño. Consulta idempotencia y límite de peticiones (rate limit) del exchange.
Una orden de compra de 0,05 BTC agota el tiempo de espera tras 10 segundos sin respuesta. AlgoVesta no la reenvía. Consulta las posiciones abiertas y las ejecuciones recientes de la cuenta, encuentra una nueva posición larga de 0,05 BTC que coincide con la orden, la registra con el precio de ejecución del exchange, y coloca el stop y el objetivo para ella. Si la consulta no hubiera encontrado nada, la señal se habría marcado como fallida con el motivo del timeout, y el trader podría haberla reenviado deliberadamente.