Similaridades y diferencias entre los futuros de materias primas y los intercambios de criptomonedas API

El autor:La bondad, Creado: 2019-09-28 10:22:34, Actualizado: 2023-11-06 20:01:39

img

Los futuros de productos básicos CTP y el intercambio de API de criptomonedas tienen diferencias significativas. Conocer el comercio de programación de intercambio de criptomonedas no significa estar familiarizado con la programación de futuros de productos básicos CTP. no podemos simplemente copiar el método y la experiencia.

Datos históricos

La interfaz de CTP no proporciona cotización histórica del mercado, y la cotización histórica del mercado debe resolverse a través de la agencia de cotizaciones del mercado. Si los datos del mercado se pierden debido a la falta de inicio de sesión, la CTP no proporciona un mecanismo de reposición del mercado. Las cotizaciones históricas del mercado solo se pueden obtener a través de una agencia de terceros. La mayoría de los intercambios de criptomonedas generalmente proporcionan una interfaz para obtener la línea K y el historial de transacciones.

Diferente acuerdo

La API de intercambio de criptomonedas es generalmente unaRESTywebsocketEl protocolo CTP encapsula internamente la lógica relacionada con la red y se comunica con el fondo de CTP utilizando el protocolo FTD basado en el protocolo TCP. Dividido en tres modos:

  • Modo de respuesta de solicitud: el cliente inicia una solicitud y el fondo de CTP recibe y responde a la solicitud.

  • Modo de comunicación de transmisión: después de que el cliente se suscribe a la cotización del mercado del contrato, el CTP emite las cotizaciones del mercado a través de la transmisión.

  • Modo de comunicación privada: después de que el cliente encarga un contrato, la información del pedido, la devolución de la transacción, etc. son enviadas por el CTP de punto a punto.

Todas las cotizaciones y transacciones de pedidos del acuerdo CTP se notificarán después de los cambios, mientras que las órdenes de consulta, cuentas y posiciones se consultan activamente.

Diferentes niveles de datos

La profundidad del protocolo CTP son sólo el último precio de compra y venta, las cotizaciones de mercado más profundas como cinco capas de precio de compra y venta son caras, usted necesita pagar dinero extra a la bolsa de futuros para obtenerlo. por otro lado, La bolsa de criptomonedas generalmente puede obtener profundidad completa hasta 200 capas de precios de compra y venta.

Además, CTP no empuja las cotizaciones de transacciones reales, solo se puede revertir por cambios de posición, y la API de intercambio de criptomonedas puede obtener cotizaciones de transacciones detalladas reales.

Diferentes restricciones de acceso

Los intercambios de criptomonedas generalmente están limitados a 10 ticks por segundo. No hay requisitos especiales para los retiros de pedidos. CTP tiene restricciones estrictas en las solicitudes que deben enviarse activamente. Generalmente, una vez por 2 segundos es bastante seguro, y también hay requisitos para el número de retiros.

Estabilidad

El protocolo CTP es muy estable y casi no hay errores o problemas de red.

Plataforma cuántica FMZ Protocolo CTP Mejores prácticas

Modo predeterminado de CTP para obtener la interfaz de mercado comoGetTicker, GetDepth, GetRecordsLos datos son almacenados en caché para obtener los últimos, si no hay datos esperará hasta que haya datos, por lo que la estrategia no puede utilizarSleepCuando hay un cambio de cotización de mercado,ticker, depth, yrecordsEn este punto, cualquier interfaz será devuelta inmediatamente cuando se llame. Luego el estado de interfaz llamado está configurado para esperar el modo de actualización, cuando la próxima vez que se llame la misma interfaz, esperará que vuelvan nuevos datos.

Algunos contratos comerciales impopulares o el precio alcanza el precio limitado diario se producirá durante mucho tiempo sin ninguna actividad comercial, lo que es normal para la estrategia para estar atascado durante mucho tiempo.

Si desea obtener los datos cada vez que obtenga la cotización del mercado, incluso los datos antiguos, puede cambiar al mercado inmediatamente actualizar el modoexchange.IO ("mode", 0). En este punto, la estrategia no puede ser escrito como un conductor de eventos.SLeepAlgunas estrategias de baja frecuencia pueden utilizar este modo, y el diseño de la estrategia es simple.exchange.IO("mode", 1)para volver al modo de caché predeterminado.

Cuando se opera un solo contrato, usar el modo predeterminado estará bien. Sin embargo, si hay varios contratos comerciales, es posible que un contrato no se haya actualizado, lo que resulta en un bloqueo de la interfaz del mercado, y otras actualizaciones de cotizaciones del mercado de contratos comerciales no estén disponibles. Para resolver este problema, puede usar el modo de actualización inmediata, pero no es conveniente escribir una estrategia de alta frecuencia. En este punto, puede usar el modo push de eventos para obtener el push de órdenes y cotizaciones.exchange.IO("wait")Si se agregan múltiples objetos de intercambio, esta es una situación rara en el comercio de futuros de materias primas, se puede utilizarexchange.IO ("wait_any"), y los devueltosindexIndicará el índice del intercambio devuelto.

Cotización de mercadotickEmpuje de cambio:

{Event:"tick", Index: exchange index (in the order of robot exchange added), Nano: event nanosecond time, Symbol: contract name}

Orden de empuje:

{Event:"order", Index: Exchange Index, Nano: Event Nanosecond Time, Order: Order Information (consistent with GetOrder)}

En este punto, la estructura de la estrategia se puede escribir como:

function on_tick(symbol){
     Log("symbol update")
     exchange.SetContractType(symbol)
     Log(exchange.GetTicker())
}

function on_order(order){
     Log("order update", order)
}

function main(){
     while(true){
         if(exchange.IO("status")){ //Determine the link status
             exchange.IO("mode", 0)
             _C (exchange.SetContractType, "MA888") // subscribe to the MA, only the first time is the real request to send a subscription, the following are just program switch, won't consume any time.
             _C(exchange.SetContractType, "rb888") // Subscribe rb
             While(True){
                 Var e = exchange.IO("wait")
                 If(e){
                     If(e.event == "tick"){
                         On_tick(e.Symbol)
                     }else if(e.event == "order"){
                         On_order(e.Order)
                     }
                 }
            }
         }else{
             Sleep(10*1000)
         }
     }
}

Relacionados

Más.