De lo que estamos hablando principalmente aquí es de la implementación de código programado en tiempo real para estrategias comerciales de media y baja frecuencia.

Estrategia

El nacimiento de una estrategia comercial cuantitativa generalmente se basa en observar y comprender el mercado, generar una idea de estrategia, luego diseñar los detalles específicos de la estrategia y luego realizar pruebas retrospectivas de múltiples variedades de datos para obtener y verificar el efecto de valores de parámetros específicos. . Si el efecto es bueno y tiene aplicabilidad universal, entonces el siguiente paso es probar el mercado real con fondos pequeños. Si la oferta real fuera de la muestra es factible, eventualmente podrá aumentar los fondos y ejecutarla durante un largo tiempo.

Para evitar el apalancamiento, permítanme explicarles que, por supuesto, existen otros métodos para generar estrategias, como la extracción de datos, la excavación, la excavación y los factores de excavación. También existen factores de generación automática como el aprendizaje automático y el aprendizaje por refuerzo. Sin embargo, es difícil seguir ejecutando este tipo de método de caja negra durante el período de retroceso de la estrategia, porque no se sabe cuándo y por qué fallarán estos factores excavados. Cuando se hace comercio cuantitativo, lo más importante es insistir en el comercio firme. Si el mercado no es bueno, se puede reducir la posición, pero no se puede cerrar. Nadie puede saber cuándo estallará el gran mercado. Si lo pierde, su retroceso anterior será en vano.

Una analogía es que el diseño y backtesting de estrategias equivale al "cálculo del templo" mencionado en "El arte de la guerra" de Sun Tzu: "Quien no tiene más batalla que el templo es el ganador tiene que calcular más; el que quien no ha luchado pero el templo es el perdedor tiene que calcular." Menos significa más. Más significa victoria, menos significa no victoria, y es más, ¡nada cuenta!"

Por lo tanto, la estrategia comercial debe estar bien planificada y calculada cuidadosamente desde el diseño inicial; de lo contrario, perderá antes de que se realice la oferta real. Este paso es el más difícil. Aunque el código real posterior no es fácil, la mayor parte es simplemente tedioso. Si dedica más tiempo y esfuerzo, siempre podrá hacerlo bien. La clave para una oferta firme es el control de riesgos.

Las estrategias comerciales, o reglas comerciales, nos permiten "hacer lo correcto", y la implementación específica de la oferta real es "hacer lo correcto". Muchas veces, saber la dirección correcta es mucho más difícil que caminar la distancia. Al igual que el chiste sobre la reparación de equipos, se cobra mil yuanes por trazar una línea. Trazar la línea en sí solo vale 1 dólar, pero saber dónde dibujarla cuesta 999.

Estrategia + oferta real juntas forman un sistema comercial. En cuanto al diseño de un sistema comercial, puede consultar el artículo anterior: Siete elementos de un sistema comercial completo. La verdadera oferta aquí son en realidad las operaciones específicas de los siguientes 4 pasos del sistema comercial, "Entrar y salir de pérdidas y ganancias". Los primeros tres pasos se determinan básicamente cuando se completa el diseño de la estrategia.

Sin embargo, incluso si la estrategia es buena, si no se implementa realmente, el efecto se reducirá considerablemente e incluso se detendrá la estrategia potencial que originalmente era buena. Desarrollar una buena estrategia no es fácil, así que no dejes de ejecutarla. Al final, una buena idea debe implementarse firmemente.

pregunta

1. Situación repentina del mercado

Este tipo de estrategia sólo se encontrará si hay una señal dentro de la barra. Dentro de la barra, no se utiliza el precio de cierre o el precio de apertura de una determinada línea K, pero se utiliza el precio intradía para activar la señal.

A continuación se muestra un ejemplo de un problema encontrado en la oferta real hace unos días. Un ejemplo microscópico de un mercado comercial. Es bastante común en el círculo monetario.

La siguiente imagen es la línea K de 10 segundos del contrato perpetuo de BNB hace unos días (2023.7.10 17:21) (una barra significa OHLCV agregado a partir de datos de transacciones en 10 segundos).

Como puede ver, la amplitud de la gran línea positiva es del 3,53% y la transacción ascendió a unos 30 millones de dólares. Completado en 10 segundos. Antes del inicio de este mercado, la tendencia transcurría casi sin incidentes.

Mire la imagen a continuación, que es la línea k de 1 segundo en ese momento, puede obtener más detalles.

Básicamente, tarda unos 4 segundos en subir por completo. Subió más de 2 puntos en el primer segundo. Estos son básicamente el resultado de estrategias de alta frecuencia (impulsadas por eventos, tendencias de alta frecuencia, creación de mercado, etc.) y órdenes algorítmicas que pueden organizarse de antemano.

Veamos la línea K de 4 horas de BNB. La línea positiva más grande es el período de tiempo en el que se conoció la noticia. Amplitud 4,05%.

Comparando las líneas K de estos períodos, podemos ver que este tipo de fluctuaciones impulsadas por noticias (esta vez la noticia es el nuevo IEO de Binance, ARKM), generalmente se completan instantáneamente. El aumento de 4 horas en realidad no es muy diferente de 10 segundos, y el inicio real es de solo unos 4 segundos. Este tipo de campo de batalla pertenece a esas estrategias de alta frecuencia que están armadas hasta los dientes. Sin embargo, también puede afectar a las estrategias de frecuencia media y baja, provocando un mayor deslizamiento.

No estudiaremos aquí las estrategias de alta frecuencia, ¿qué significa para las estrategias de frecuencia media y baja? Hay dos cosas principales que me vienen a la mente:

1. Algunas tendencias surgen muy repentinamente y se completan en un corto período de tiempo, por lo que la estrategia no puede suspenderse casualmente. Se debe garantizar que la oferta real en el círculo monetario esté en línea las 24 horas del día, especialmente si hay una posición, y no se puede desconectar.

2. El deslizamiento real puede alcanzar los 2 puntos porcentuales. Mire la línea K de 1 segundo arriba. Si su señal de compra se basa en un precio determinado, y este precio sale en la parte inferior de la línea K grande, entonces, pase lo que pase, el precio después de ingresar el mercado puede caer entre 2 y 3 puntos porcentuales. Lo peor puede ser tan bajo como 4 puntos porcentuales, y esas órdenes de compra están en la punta de la aguja. Sin embargo, si vende, obtendrá ganancias que superarán sus expectativas. Sin embargo, según la ley de Murphy, el pan que cae siempre cae con el lado untado con mantequilla. A largo plazo, existe una alta probabilidad de que se produzcan más deslizamientos.

Lo bueno, sin embargo, es que esto sucede sólo un número limitado de veces. Mientras la estrategia sea buena y el deslizamiento sea mayor, se trata simplemente de una toma de ganancias y no afectará los rendimientos positivos a largo plazo. Es como soportar un shock y un desgaste más.

Una forma de mitigar esto es utilizar websocket para obtener el precio más reciente. El documento dice que se actualiza cada 250 milisegundos, pero a veces en realidad se actualiza más rápido, por lo que es posible responder de inmediato. Otra ventaja de websocket es que no ocupa el límite de frecuencia de la API Restful del intercambio. Esto se menciona en detalle más adelante.

2. La cotización horaria

Muchas estrategias de tendencia encuentran esto, porque la mayoría de ellas utilizan el precio de la posición de cambio para calcular las señales de entrada y salida. Luego, tan pronto como pasa la hora, todos se ponen en marcha uno tras otro.

En hora, especialmente múltiplos de 8, porque no importa qué ciclo sea su estrategia, estos tres puntos deben cumplir con el tiempo del divisor común. Tal vez las estrategias automatizadas de todos entren en acción y las frecuencias alta, media y baja se comprimirán para formar generan sus propias señales, los rivales de cada uno.

Además, en este momento, el intercambio también necesita liquidación y entrega. Aunque el contrato perpetuo no se entregue, pueden existir otras operaciones para calcular la cuota de capital de entrega. Durante aproximadamente 6 segundos después de las tres horas del 8/00/16, el websocket de Binance no envió información de la línea K, ¡se detuvo! ¿Solo te pregunto qué hacer? En realidad, muchas veces no hay solución.

Lo que es más grave es que el mercado resonará, especialmente cuando esté cayendo, y el pánico será más contagioso. Los servidores del intercambio están aún más ocupados y muchas monedas pequeñas con condiciones de mercado feroces caen inmediatamente, no se pueden realizar pedidos y todos son errores 1001. Cuando realiza una orden rápidamente y tiene éxito, las órdenes negociadas en la punta del alfiler pueden ser suyas.

Por lo tanto, el deslizamiento es realmente inevitable. Es el destino. Simplemente acéptelo. Optimizar demasiado el código no será de mucha utilidad. Como se mencionó anteriormente, trátelo como un stop loss más.

Sin embargo, también hay algunos consejos para compartir.

La agotamiento de la señal se puede calcular con antelación n segundos antes de la hora. En ese momento, la congestión no ha comenzado, porque la mayoría de las estrategias automatizadas pueden esperar hasta que salga el precio de cierre de la línea K de la hora antes de comenzar a calcular la señal. Sin embargo, el problema que genera esta operación es que puede generar señales falsas, por ejemplo, el precio retrocede inmediatamente, no debería haber señal y se produce un falso positivo. En este punto depende de tu elección si quieres hacer esto o no. Sin embargo, puede agregar un cierto umbral y activarlo cuando lo supere, para evitar señales falsas causadas por retornos de precios a corto plazo. El deslizamiento se puede reducir un poco.

También existe un método para utilizar señales de compensación, como la compensación de tiempo o la línea k de desplazamiento, que no genera señales en hora, no se involucra con otros y evita mejor la aglomeración. También existen métodos como TWAP.

Sin embargo, estos requieren algunas habilidades y harán que el código real sea más difícil.

firmar oferta

Una estrategia básica de CTA de frecuencia media a baja. En términos generales, el código real es muy simple. Solo hay una estrategia para una variedad, y no hay suma ni resta de posiciones, y no se mezcla información cruzada. Entonces el código local no necesita mantener ningún estado, porque el intercambio registra todo por usted. Si hay una posición, cuánto margen se requiere, si el pedido está completo, etc. Debido a que es de frecuencia media a baja, puedes consultar la información de la cuenta del exchange en cualquier momento cuando sea necesario, y esta es la forma más inmediata y precisa. Esto elimina el problema de utilizar una base de datos local para registrar el estado de las transacciones.

Esta estrategia simple es realmente factible, pero el problema es que el retroceso puede ser mayor, no estar lo suficientemente diversificado y el riesgo es alto. Un solo producto puede no tener mercado, fluctuar y retroceder sin volver atrás, o encontrarse con condiciones de mercado extremas, y aparecerá otro gran agujero en la curva de capital. Si lo toma en serio, se asustará y detendrá su estrategia si no puede soportarlo. Si lo toma a la ligera, la experiencia comercial será mucho peor. Tenga en cuenta que todos estos están bajo las condiciones de posiciones razonables. De lo contrario, si la posición es demasiado ligera, el retroceso será pequeño, pero los ingresos también se reducirán, y las ganancias y pérdidas vendrán de la misma fuente, y será una lástima perder la oportunidad; si la posición es demasiado pesado, será un error y tarde o temprano se terminará.

Sin embargo, se recomienda que los principiantes comiencen con una implementación en tiempo real de esta estrategia. Sólo a través de la práctica podrá mejorar rápidamente su nivel comercial. Pero asegúrese de mantener su posición ligera y el apalancamiento debe ser menor. Es mejor no utilizar el apalancamiento para poder persistir durante un período de tiempo más largo.

Si quiere ser más profesional, reducir los riesgos puntuales, la curva de capital será más suave y tendrá menos de qué preocuparse cuando se haga la oferta (como se mencionó antes, en posiciones razonables, esto es realmente muy importante, porque es más fácil ceñirse a la estrategia y esperar hasta que el riesgo) es generalmente un modelo de múltiples variedades, múltiples estrategias y múltiples parámetros, y luego hay sumas y restas de posiciones. No significa necesariamente sumar o restar posiciones en una estrategia, sino que también se puede lograr mediante múltiples subestrategias para lograr el efecto de sumar o restar posiciones. Sin embargo, en este caso, la estrategia estará más concurrida. Si también desea minimizar el deslizamiento de las posiciones de apertura y cierre, la complejidad del código se disparará.

Hablemos de las dificultades que plantea este modelo multivariado, multiestrategia y multiparamétrico.

dificultad

1. Límite de frecuencia API

La primera dificultad con múltiples estrategias es el límite de frecuencia de la API. Hay muchas variedades y estrategias. Para obtener precios, posiciones, órdenes y otra información en tiempo real, es necesario visitar constantemente el intercambio. Como se mencionó anteriormente, si la frecuencia es baja y lenta, es posible que el precio obtenido no sea el último y el deslizamiento puede ser mucho mayor.

Los recursos del servidor del intercambio son limitados, por lo que existe un límite en la frecuencia de acceso a la API. El límite de Binance es 2400 por minuto, y luego hay un límite de 10 segundos, y existen otros llamados modos de aprendizaje automático para detectar comportamientos maliciosos. De todos modos, definitivamente no funcionará si es demasiado frecuente. En cuanto a por qué no Si no funciona, el intercambio tiene la última palabra. En este caso, ya sabes, no existe una fórmula.

Aunque se dice que es 2400, lo probé casualmente usando concurrencia. Si solicito K líneas, incluso si son las 99 líneas más cortas a la vez (el peso API es 1), si solicito alrededor de 75 monedas al mismo tiempo , Seré baneado por unos minutos. Por lo tanto, no es fácil desafiar los límites.

Si lo viola, recibirá errores 429, 418 y su IP será prohibida durante unos minutos o unos días. En este momento, si tiene una posición, será miserable (no hay restricciones para realizar pedidos). , especialmente liquidando posiciones existentes, pero no tienes información de precios, a menos que también haya websocket)

La solución a este problema es utilizar websocket para obtener datos, de modo que el intercambio pueda enviarlos activamente de manera oportuna sin ocupar la API. Puede reducir algunos deslizamientos. El problema es que hay que mantener otro centro de mercado basado en websocket. La dificultad del código en vivo ha aumentado y se ha vuelto más complicada. No se debe desconectar durante 24 horas, y si se desconecta se debe volver a conectar automáticamente a tiempo, etc.

2. Estado de la estrategia

Como se mencionó anteriormente, si las estrategias se vuelven más complejas, hay que registrar el estado de cada estrategia, de lo contrario, las posiciones del intercambio no sabrán qué estrategia se abrió, cuánto abrió cada una, etc. Y si quieres revisarlo más tarde, tendrás que registrar más datos.

En este momento, debe introducir una base de datos (por supuesto, también puede usar registros de archivos, la misma idea).

La introducción de una base de datos trae consigo los problemas de la base de datos. Sin embargo, esto es similar al desarrollo de software en otras industrias y no tiene nada nuevo. Especialmente en la industria del comercio electrónico, porque se trata de saldos de fondos, gestión de pedidos y otras cosas similares, aquellos que no tienen experiencia pueden leer este tipo de libros y artículos.

Cabe señalar que se necesitan muchos pasos para lograr operaciones atómicas similares a las transacciones de la base de datos, es decir, un conjunto de operaciones o todas tienen éxito. Una vez que un determinado paso falla, no hay que hacer nada y volver al estado original.

Luego, debido a que después de todo se trata de una transacción de dinero real, para las operaciones de bases de datos de información de pedidos, es mejor utilizar el nivel más alto de los cuatro niveles de aislamiento, Serializable, para eliminar la posibilidad de todas las lecturas sucias, lecturas no repetibles y lecturas fantasma. . Es decir, no se utiliza concurrencia, subprocesos múltiples o incluso asincrónico para leer y escribir información clave de la base de datos, y todas las operaciones se completan en un solo subproceso. Implementación de operaciones.

No tome a la ligera el desafío de la programación concurrente. Si hay un problema con este tipo de sistema, probablemente sea imposible solucionarlo, es el error más difícil de encontrar en el desarrollo de software. Aquellos que pueden completar este tipo de trabajo de manera ordenada son programadores con un salario mensual de más de 50.000.

No se me ocurren muchos que usen subprocesos múltiples o asincrónicos (se recomienda usar subprocesos múltiples y asincrónicos, porque asíncrono es como una enfermedad infecciosa en Python. Una vez usado, debe usarse en una cadena de llamadas) Lo que es realmente beneficioso es enviar señales de advertencia de DingTalk y similares. Debido a que el servicio DingTalk está en China y los servidores de cambio de divisas están en el extranjero, su servidor de códigos debe implementarse en el extranjero, más cerca del intercambio, por lo que cuando envía DingTalk, a veces tarda varios segundos en regresar y, a veces, incluso se bloquea. dura más de diez segundos.

por fin

De hecho, no importa si no puedes hacer muchas cosas. Siempre que tenga la conciencia de aceptar un deslizamiento mayor, es posible obtener casi 1/5 o incluso más ganancias. Lo más importante es la estrategia: esperar retornos positivos y poder operar sin ningún tiempo de inactividad es la clave.

En definitiva, la primera prioridad de una oferta en firme es continuar y ejecutar de forma estable la lógica establecida de la estrategia. El deslizamiento es parte del trading, sólo trata de reducirlo siempre y cuando no rompa tus músculos.

Estrategia de primera clase, se implementan 2 y 3 corrientes, no hay gran problema. Pero si la estrategia no está a la altura del estándar, el código comercial real superior no ayudará y aún perderá si pierde. Por lo tanto, simplemente escribir un buen código no puede funcionar bien en el comercio cuantitativo. La estrategia es buena y el código en vivo es robusto. Por supuesto que es el mejor. Sin embargo, cuando el tiempo es limitado, céntrese en la estrategia.

Continuará