Continuando con los tres artículos anteriores sobre código real de comercio programático:
Productos secos básicos: detalles y reflexiones sobre el comercio automatizado en tiempo real de sistemas de comercio cuantitativos (1. Problemas y dificultades)
Sistema de negociación cuantitativa: pensamientos y detalles de la oferta en firme automatizada (2. Propósito de la oferta en firme)
Sistema de comercio cuantitativo: pensamientos y detalles de ofertas reales automatizados (3. Habilidades de procesamiento)
Aquí continuaremos hablando sobre el sistema de comercio multiestrategia y el centro de mercado en la estructura general del código de oferta real.
Prefacio
En la industria comercial, especialmente en los contratos de futuros, de vez en cuando aparecerán varios maestros comerciales con alto apalancamiento, y el principal de 100.000 yuanes puede convertirse fácilmente en decenas de millones. Sin embargo, casi todas estas personas eran como meteoros que cruzaban el cielo nocturno. Después de un breve momento deslumbrante, desaparecieron en silencio.
Por otro lado, otro grupo de comerciantes veteranos que llevan mucho tiempo haciendo negocios se muestran sumisos todo el día, hablando del futuro incognoscible, temiendo al mercado y a los cisnes negros que vienen en cualquier momento. Apalancamiento muy bajo para abrir posiciones e intentar cometer errores. La dirección es como hierba en la pared, balanceándose a izquierda y derecha, sin la determinación y el coraje de un maestro. Pero por alguna razón, este grupo de personas ha estado activo en el mercado, aunque el apalancamiento es bajo, sus posiciones no son pequeñas.
En la naturaleza humana del mundo del comercio, las estrellas son fáciles de conseguir, pero las estrellas de cumpleaños son difíciles de encontrar.
Como comerciante cuantitativo sobreviviente, creo que uno de los puntos más importantes en el comercio es darse cuenta de la necesidad de múltiples estrategias. Todavía es difícil implementar estrategias múltiples en el comercio subjetivo porque la mano de obra es limitada (a menos que contrate a varios operadores como una institución) y el mercado funciona las 24 horas del día, los 7 días de la semana y es fácil pasar por alto los puntos de entrada. Sin embargo, el comercio programático es relativamente fácil de implementar. La programación pierde la capacidad del cerebro y los ojos humanos para identificar patrones de tendencias de precios, pero tiene un mayor poder de ejecución y una mayor capacidad para copiar estrategias y dispersar posiciones, lo que tiene ventajas y desventajas.
Con múltiples objetivos, múltiples estrategias y múltiples parámetros, las posiciones de capital están naturalmente dispersas. Ya no hay una apasionante apertura y cierre de una única ganancia o pérdida, sino la búsqueda de suavizar la curva de capital tanto como sea posible.
Descripción general
La siguiente imagen es el diagrama de arquitectura general de un conjunto de mi código real.

Toda la arquitectura se divide en dos partes. Uno es un centro de mercado independiente y el otro es el programa comercial responsable de implementar la lógica de la estrategia.
Por lo general, inicio un programa con una cuenta y sus parámetros de política y claves de cuenta se distinguen mediante archivos de configuración, de modo que el código se puede compartir completamente y la versión del código es más fácil de administrar. Algunos parámetros de la estrategia pueden ser ligeramente diferentes, principalmente para escalonar determinadas operaciones para que no se ejecuten repentinamente al mismo tiempo.
Cuando antes había pocas estrategias, inicié un programa Python con cada subestrategia, pero luego descubrí que la memoria del servidor no era suficiente. Porque un programa Python por sí solo ocupa alrededor de 60 M de memoria. Si hay más estrategias y se copian en varias cuentas, rápidamente ocupará mucha memoria. Aunque puede pagar más por un servidor más potente, también resulta complicado de gestionar y mantener. Al final, se cambió a lo que es ahora. Según las cuentas, las estrategias similares en diferentes monedas (varias monedas y múltiples parámetros) se agrupan en un grupo, y luego un grupo de estrategias es una aplicación Python. Después de ejecutarlo, siento que este modelo combinado es muy bueno para el diseño de múltiples cuentas y múltiples estrategias. Es muy conveniente para la gestión de código y la operación y mantenimiento en tiempo real.
La ventaja de una subestrategia para una aplicación Python es que el código puede ser mucho más simple. Sin embargo, imagínese, si su estrategia se ejecuta en las 40 monedas principales y luego ejecuta 3 estrategias diferentes en cada moneda, entonces serán 120 subestrategias. Si agrega tres cuentas más, serán 360 subestrategias. Estrategias. Este modelo sería insostenible.
Cuando hay pocas aplicaciones, primero puede usar un terminal como tmux para generar información de registro en tiempo real, lo cual es muy conveniente para monitorear en las primeras etapas de la operación del programa. Una vez que el código se estabilice en el período posterior, se utilizará software de operación y mantenimiento como pm2 para la administración. Simplemente analice el archivo de registro periódicamente en el futuro.
En el caso de múltiples objetivos y múltiples estrategias, un centro de mercado independiente debe ser estándar. La diversa información de mercado obtenida se puede compartir entre múltiples programas comerciales, es decir, los módulos de estrategia en el lado izquierdo de la imagen de arriba.
Centro de cotizaciones
La siguiente imagen es una imagen más detallada del módulo del centro de mercado.

En primer lugar, puede configurar los símbolos de la línea k que se obtendrán a través del archivo de configuración, para que sea más fácil cambiar el tipo en el futuro.
Si es de varios períodos, entonces puede obtener la línea k del período divisor común y luego cada estrategia puede volver a muestrear según sus propias necesidades.
Si quieres simplificar las cosas de una vez por todas, lo mejor es obtener directamente la línea K de 15 minutos, porque las estrategias de frecuencia media y baja, especialmente el seguimiento de tendencias, con un ciclo de menos de 15 minutos, son básicamente Es difícil ganar dinero a largo plazo.
Por ejemplo, si tiene una estrategia de 15 minutos, 1 hora o 4 horas, entonces el centro de mercado sólo necesita obtener la línea K de 15 minutos. Si la longitud de las líneas k del período grande después del remuestreo no es suficiente, entonces debe guardar más líneas k de 15 minutos en la base de datos en el momento del inicio.
Debido a que websocket solo envía la información de la línea k más reciente, si su estrategia utiliza un ciclo de línea k relativamente grande y un tiempo de retrospectiva largo, como 4 horas de ma150, entonces serán 600 horas (25 días) de datos, 15 Si se requiere una k línea por minuto, se necesitan 2.400. Esto depende de la adquisición única y el ahorro a través de la API restante cuando se inicia el centro de mercado, como base para actualizaciones continuas posteriores.
Dividí todo el centro de mercado en dos aplicaciones. De hecho, también se puede combinar en una sola aplicación, pero es más robusto separarlas. Hablemos primero del PlanB secundario.
Plan B
Como se mencionó en varios artículos anteriores, esto es principalmente para evitar que el websocket de PlanA se desconecte. Se utiliza como respaldo temporal, especialmente en el momento de salida de la estrategia, para evitar que el precio ya se haya revertido en una cierta distancia y la salida. posición no se ha salido causando más pérdidas inesperadas.
PlanB es muy simple. Utiliza principalmente la función public_get_ticker_price para obtener los precios más recientes de todos los contratos perpetuos a la vez. Esta es también la información de precios más reciente compilada por el propio B An.
Actualmente, B'an tiene más de 200 contratos perpetuos. Si obtenemos los precios más recientes uno por uno, debemos asegurarnos de que el precio de cada producto se actualice cada 3 segundos. La API se llamará más de 4000 veces en un minuto. que debe exceder el límite No. posible. Sin embargo, el peso de API de la función mencionada anteriormente es solo 2. Si se usa una vez cada 3 segundos, solo consumirá 40 cuotas de API por minuto. No hay necesidad de preocuparse por exceder la cuota.
Después de mi prueba, básicamente Binance agrega los precios de todos los contratos una vez en aproximadamente 1 a 2 segundos, por lo que para el precio de respaldo de las estrategias de frecuencia media y baja, un retraso de aproximadamente 5 segundos es completamente suficiente.
Si sus requisitos no son altos, puede incluso usarlo para sintetizar líneas K aproximadas para todos los contratos, evitando por completo el uso de websocket. Incluso si este tipo de línea K no se puede usar para operar, también se puede usar para escanear toda la información del mercado y luego proporcionar puntos de entrada para los operadores subjetivos basados en sus propios algoritmos de estrategia diseñados, como la divergencia y la convergencia de la media móvil. reconocimiento de patrones simples, etc. Señal. De lo contrario, ¿cómo puedes ver tantas monedas? Si tiene un buen operador diario, esta herramienta puede resultarle útil para ayudarle en el comercio. He escrito herramientas similares para otros antes. Es realmente bueno cuando el mercado es bueno, pero el mercado no ha sido bueno recientemente.
Por supuesto, esta solución sólo es de uso práctico cuando se intercambian muchas monedas. De lo contrario, es mejor obtener directamente el precio BBO de handicap de cada variedad.
También tenga en cuenta que la información del precio de respaldo debe usarse con frecuencia en el código principal. Por ejemplo, se usa para calcular la cantidad de fondos fiduciarios correspondientes a la posición y la tasa de pérdidas y ganancias aproximada, lo que no requiere datos muy precisos. Porque los fragmentos de código y la información que no se utilizan con frecuencia pueden haberse descompuesto hace mucho tiempo y es posible que ni siquiera lo sepas hasta que los utilices. Cualquiera que haya escrito mucho código sabe que este tipo de código de apéndice se puede cambiar fácilmente accidentalmente sin darse cuenta.
Plan A
El código principal del centro de mercado. Esta aplicación tiene 4 funciones principales.
Obtenga velas base históricas. Como se mencionó anteriormente en el artículo, cada vez que comience, debe asegurarse de que esté presente cada línea K requerida por todas las estrategias.
gestión de sockets web. Este módulo es un poco más complicado y necesita manejar diversas situaciones de desconexión, reconexión, etc. Cada vez que el intercambio envía nuevos datos de la línea k, se actualizan los datos de la última barra de la línea k en la base de datos.
Además de los datos de la línea K, también coloco las actualizaciones de la información de precisión de cada variedad en el centro de mercado. Es decir, la función public_get_exchangeinfo obtiene los distintos precios de los pedidos y la precisión mínima de la cantidad del pedido, y luego los convierte en un tipo de diccionario conveniente. De esta manera se pueden compartir todas las estrategias.
El último paso es comprobarlo, un simple control de cordura es suficiente. Compruebe si las líneas K obtenidas son continuas y no hay omisiones, y luego compárelas periódicamente una por una con las líneas K obtenidas por el resto de API, si la diferencia de precio con el precio obtenido por PlanB es demasiado grande, etc. En resumen, es sólo una cuestión de comparación e inspección para poder descubrir los errores a tiempo.
Esta es probablemente la estructura central de mi mercado estratégico de frecuencia media a baja. Si es necesario, la información de actualización de la cuenta también se puede obtener a través de websocket. Pero esto es un poco más problemático y no se utilizará la mayor parte del tiempo.