Integración de la API de Trading WebSocket de OKX en Delphi
El componente TsgcWSAPI_OKX proporciona acceso completo desde Delphi al exchange OKX a través de una interfaz WebSocket unificada. Soporta streams públicos de market data, canales privados de cuenta y operaciones de trading directas, incluidas órdenes de mercado y limitadas, todo mediante un único componente. Esta guía detalla cada método disponible, las propiedades de configuración e incluye ejemplos de código funcionales para que empieces a operar en OKX desde Delphi.
Tabla de contenidos
Canales WebSocket públicos
Los canales públicos emiten market data a todos los clientes conectados sin requerir autenticación. Estos canales cubren instrumentos, tickers, order books, trades, velas, funding rates y más. Cada método de suscripción tiene su correspondiente método de cancelación de suscripción.
Canales de market data
| Método |
Descripción |
SubscribeInstruments |
Se suscribe a las actualizaciones de instrumentos (nuevos listados, deslistados, cambios de estado). |
SubscribeTicker |
Se suscribe a los datos del ticker en tiempo real para un instrumento específico. |
SubscribeOpenInterest |
Se suscribe a las actualizaciones de open interest para contratos de futuros y perpetuos. |
SubscribeCandlestick |
Se suscribe a los datos de velas/kline en el intervalo especificado. |
SubscribeTrades |
Se suscribe a los datos de ejecución de trades en tiempo real para un instrumento específico. |
SubscribeOrderBook |
Se suscribe a las actualizaciones del order book con profundidad configurable. |
Canales de precio e índice
| Method |
Description |
SubscribeEstimatedPrices |
Se suscribe al precio estimado de entrega/ejercicio para opciones y futuros. |
SubscribeMarkPrice |
Se suscribe a las actualizaciones del mark price usado para los cálculos de margen y PnL. |
SubscribeMarkPriceCandlestick |
Se suscribe a los datos de velas basados en el mark price. |
SubscribePriceLimit |
Se suscribe a las actualizaciones del price limit (banda de precio) de un instrumento. |
SubscribeIndexCandlestick |
Se suscribe a los datos de velas basados en el precio del índice. |
SubscribeIndexTicker |
Se suscribe a las actualizaciones del ticker de índice para un índice dado. |
SubscribeFundingRate |
Se suscribe a las actualizaciones de funding rate para contratos perpetuos. |
Canales de opciones y de sistema
| Method |
Description |
SubscribeOptionSummary |
Se suscribe a los datos resumen de opciones (greeks, volatilidad, open interest). |
SubscribeStatus |
Se suscribe a las actualizaciones de estado del sistema (mantenimiento, incidencias). |
SubscribePublicStructureBlockTrades |
Se suscribe a los datos públicos de block trades estructurados. |
SubscribeBlockTickers |
Se suscribe a las actualizaciones del ticker de block trades. |
Nota: Cada método Subscribe listado arriba tiene su correspondiente
UnSubscribe (p. ej.,
UnSubscribeTicker) para dejar de recibir actualizaciones de ese canal.
Canales WebSocket privados
Los canales privados requieren autenticación y entregan actualizaciones en tiempo real sobre el estado de tu cuenta, posiciones, órdenes y actividad de trading algorítmico. Establece OKX.IsPrivate := True y proporciona credenciales de API válidas antes de suscribirte a estos canales.
Canales de cuenta y posición
| Method |
Description |
SubscribeAccount |
Se suscribe a las actualizaciones de balance y equity de la cuenta en tiempo real. |
SubscribePositions |
Se suscribe a las actualizaciones de posiciones (apertura, cierre, cambios de tamaño). |
SubscribeBalanceAndPosition |
Se suscribe a las actualizaciones combinadas de balance y posición en un único stream. |
SubscribePositionRisk |
Se suscribe a las actualizaciones de aviso de riesgo de posición (proximidad de liquidación). |
SubscribeAccountGreeks |
Se suscribe a las actualizaciones de greeks a nivel de cuenta para posiciones de opciones. |
Canales de órdenes y algo
| Method |
Description |
SubscribeOrders |
Se suscribe a las actualizaciones de estado de órdenes (colocadas, ejecutadas, canceladas, parcialmente ejecutadas). |
SubscribeOrdersAlgo |
Se suscribe a las actualizaciones de órdenes algorítmicas (trigger, TP/SL, trailing stop). |
SubscribeAdvanceAlgo |
Se suscribe a las actualizaciones de órdenes algorítmicas avanzadas (iceberg, TWAP). |
Canales RFQ y de block trade
| Method |
Description |
SubscribeRfqs |
Se suscribe a las actualizaciones de request-for-quote (RFQ) para block trading. |
SubscribeQuotes |
Se suscribe a las actualizaciones de cotizaciones en respuesta a RFQs. |
SubscribePrivateStructureBlockTrades |
Se suscribe a las actualizaciones privadas de block trades estructurados. |
Canales de Grid Trading
| Method |
Description |
SubscribeSpotGridAlgoOrders |
Se suscribe a las actualizaciones de órdenes algo de grid spot. |
SubscribeContactGridAlgoOrders |
Se suscribe a las actualizaciones de órdenes algo de grid de contratos. |
SubscribeGridPositions |
Se suscribe a las actualizaciones de posición de grid trading. |
SubscribeGridSubOrders |
Se suscribe a las actualizaciones de sub-órdenes individuales dentro de una estrategia de grid. |
Operaciones de trading por WebSocket
OKX soporta colocar y gestionar órdenes directamente sobre la conexión WebSocket, lo que proporciona menor latencia comparado con las llamadas a la API REST. Estos métodos requieren autenticación.
| Method |
Description |
PlaceOrder |
Coloca una nueva orden con control total sobre todos los parámetros de la orden. |
PlaceMarketOrder |
Coloca una orden de mercado que se ejecuta inmediatamente al mejor precio disponible. |
PlaceLimitOrder |
Coloca una orden limitada a un precio especificado, ejecutada solo cuando el mercado alcanza ese precio. |
CancelOrder |
Cancela una orden existente por su order ID. |
AmendOrder |
Modifica una orden existente (cambia precio o tamaño sin cancelar y reemplazar). |
Nota: el trading basado en WebSocket proporciona una latencia significativamente menor que la colocación de órdenes basada en REST. OKX procesa las órdenes por WebSocket con mayor prioridad, lo que lo convierte en el método preferido para estrategias sensibles a la latencia.
Ejemplo de código
El siguiente ejemplo demuestra cómo crear y configurar el componente TsgcWSAPI_OKX, autenticarse con la API, suscribirse a los datos del ticker, monitorizar órdenes y colocar órdenes tanto de mercado como limitadas directamente sobre la conexión WebSocket.
var
oClient: TsgcWebSocketClient;
oOKX: TsgcWSAPI_OKX;
begin
// Create the WebSocket client
oClient := TsgcWebSocketClient.Create(nil);
oOKX := TsgcWSAPI_OKX.Create(nil);
oOKX.Client := oClient;
// Configure API credentials
oOKX.OKX.ApiKey := 'your_api_key';
oOKX.OKX.ApiSecret := 'your_api_secret';
oOKX.OKX.Passphrase := 'your_passphrase';
oOKX.OKX.IsPrivate := True;
// Connect to OKX
oClient.Active := True;
// Subscribe to BTC-USDT ticker
oOKX.SubscribeTicker('BTC-USDT');
// Subscribe to order updates for spot trading
oOKX.SubscribeOrders(okxitSpot);
// Place a market buy order
oOKX.PlaceMarketOrder(okxosBuy, 'BTC-USDT', 0.001);
// Place a limit buy order
oOKX.PlaceLimitOrder(okxosBuy, 'BTC-USDT', 0.001, 30000);
end;
Gestionar eventos WebSocket
Asigna un manejador de eventos para procesar los mensajes WebSocket entrantes. El evento proporciona el nombre del canal y el payload JSON de cada actualización.
procedure TForm1.OnOKXEvent(Sender: TObject;
const aChannel, aData: string);
begin
// aChannel identifies the subscription (e.g., 'tickers', 'orders')
// aData contains the JSON payload
Memo1.Lines.Add(aChannel + ': ' + aData);
end;
Usar el modo Demo Trading
OKX proporciona un entorno de demo trading para pruebas. Actívalo estableciendo OKX.IsDemo := True antes de conectar. El modo demo conecta a un endpoint separado con saldos simulados, lo que te permite probar tu lógica de trading sin arriesgar fondos reales.
// Enable demo trading mode
oOKX.OKX.IsDemo := True;
oOKX.OKX.IsPrivate := True;
oClient.Active := True;
Configuración y notas
Propiedades de configuración
Toda la configuración se accede a través de la propiedad OKX del componente.
| Propiedad |
Tipo |
Descripción |
OKX.ApiKey |
String |
Tu API key de OKX. Genérala desde la página OKX API Management. |
OKX.ApiSecret |
String |
Tu API secret de OKX. Mantén este valor seguro y no lo expongas nunca en código del lado del cliente. |
OKX.Passphrase |
String |
La passphrase que estableciste al crear la API key. Necesaria para todas las peticiones autenticadas. |
OKX.IsDemo |
Boolean |
Cuando se establece a True, conecta al entorno demo trading de OKX con fondos simulados. Por defecto es False. |
OKX.IsPrivate |
Boolean |
Cuando se establece a True, habilita la autenticación en la conexión WebSocket. Necesaria para canales privados y operaciones de trading. Por defecto es False. |
Notas importantes
Seguridad: nunca hardcodees tu API key, secret o passphrase directamente en código de producción. Usa un archivo de configuración seguro o una variable de entorno para almacenar las credenciales.
- Establece
OKX.IsPrivate := True antes de conectar si necesitas canales privados u operaciones de trading. Los canales públicos funcionan sin autenticación.
- Usa
OKX.IsDemo := True para probar contra el entorno demo de OKX antes de pasar a producción. El modo demo usa credenciales de API distintas, generadas específicamente para la plataforma demo.
- El método
SubscribeOrders acepta un parámetro de tipo de instrumento (p. ej., okxitSpot, okxitFutures, okxitSwap, okxitOption) para filtrar las actualizaciones de órdenes por tipo de trading.
- Los métodos de conveniencia
PlaceMarketOrder y PlaceLimitOrder aceptan un parámetro de lado de la orden (p. ej., okxosBuy, okxosSell), ID del instrumento, tamaño y (para órdenes limitadas) precio.
- El método
AmendOrder te permite modificar el precio o el tamaño de una orden activa sin cancelarla y volverla a colocar, reduciendo latencia y evitando perder posición en la cola.
- OKX aplica rate limits a los mensajes WebSocket. Consulta la documentación oficial de OKX para los límites actuales de suscripciones y peticiones de trading por segundo.
- Las suscripciones WebSocket son persistentes durante la vida de la conexión. Si la conexión se cae, deberás volver a suscribirte tras reconectar.