Type/to search
8
Follow
1363
Followers
Del trading cuantitativo a la gestión de activos: desarrollo de estrategias CTA para obtener retornos absolutos
Original
Created 2019-06-26 10:27:41  Updated 2023-10-30 20:30:50
 5
 7717

img

Prefacio

¿Por qué estudiar esta carrera?
¿Qué has ganado al estudiar este curso? En primer lugar, este curso se basa en los lenguajes de programación JavaScript y Python. El lenguaje es solo una tecnología y, en última instancia, aún tenemos que aplicar esta tecnología a una industria. El comercio cuantitativo es una industria emergente que actualmente se encuentra en una etapa de rápido desarrollo y tiene una enorme demanda de talento.

A través del estudio sistemático de este curso, podrá tener una comprensión más profunda del campo del trading cuantitativo. Si es un estudiante que se está preparando para ingresar al campo del trading cuantitativo, también le será útil. Si es un inversor en bolsa Si es un entusiasta de la inversión en futuros, el trading cuantitativo puede ayudarlo por completo con sus operaciones subjetivas. Al desarrollar estrategias comerciales, puede obtener ganancias en el mercado financiero y expandir sus canales y plataformas de gestión financiera y de inversión.

Antes de eso, déjenme hablarles de mi experiencia personal en el trading. No soy especialista en finanzas, sino en estadística. Comenzó a dedicarse a la negociación subjetiva de acciones cuando era estudiante. Más tarde, por casualidad, se convirtió en un profesional de la negociación cuantitativa de un fondo de capital privado nacional, dedicado principalmente a la investigación y el desarrollo de estrategias.

He estado en el círculo comercial durante más de diez años y he desarrollado varios tipos de estrategias. Mi filosofía de inversión es: control del riesgo por encima de todo y enfoque en la rentabilidad absoluta. El título de nuestro curso es: Del trading cuantitativo a la gestión de activos: desarrollo de estrategias CTA para retornos absolutos.

1. La lógica de ganar dinero con estrategias de CTA de futuros

1.1 Comprensión de la CTA de futuros

Algunas personas pueden preguntarse qué es CTA. ¿Qué es exactamente CTA? A CTA se le denomina asesor de comercio de materias primas en el extranjero y generalmente se le denomina gestor de inversiones en el país. Los CTA tradicionales reúnen los fondos de un gran número de inversores, luego los confían a instituciones de inversión profesionales y, finalmente, invierten en futuros de índices bursátiles, futuros de materias primas y futuros de bonos del Tesoro a través de asesores comerciales (es decir, CTA).

Pero, de hecho, a medida que el mercado global de futuros continúa creciendo y desarrollándose, el concepto de CTA también se expande constantemente y su alcance supera ampliamente los futuros tradicionales. No solo puede invertir en el mercado de futuros, sino también en el mercado de tipos de interés, el mercado de valores, el mercado de divisas, el mercado de opciones, etc. Siempre que este producto tenga una cierta cantidad de datos históricos, se puede aplicar la estrategia CTA correspondiente. desarrollado en base a estos datos históricos.

Antes de la década de 1980, la tecnología de comercio electrónico no estaba muy madura. En ese momento, la mayoría de los operadores juzgaban la tendencia futura de los futuros de materias primas mediante la elaboración manual de indicadores técnicos como los indicadores Williams, KDJ, RSI, MACD, CCI, etc. Más tarde, algunos comerciantes crearon fondos CTA especiales para ayudar a los clientes a administrar los activos. No fue hasta la popularización del comercio electrónico en la década de 1980 que los fondos CTA en el verdadero sentido comenzaron a aparecer.

Cambios en la escala de gestión de fondos de la CTA
img
Unidad: Miles de millones de dólares estadounidenses

Si observamos el gráfico anterior, especialmente con el auge del comercio cuantitativo, el tamaño de los fondos CTA globales ha aumentado de US\( 130,6 mil millones en 2005 a más de US\) 300 mil millones en 2015. Además, la estrategia CTA también se ha convertido en una de las estrategias de inversión más habituales de los fondos de cobertura globales.

El rendimiento de los fondos CTA también ha aumentado junto con su escala. Echemos un vistazo al índice CTA de Barlake en la siguiente figura. El índice CTA de Barlake es un punto de referencia representativo de la industria para los asesores de comercio de materias primas globales. Desde finales de 1979 hasta finales de 2016, la rentabilidad acumulada del índice Barlake CTA Fund fue de 28,95 veces, con una rentabilidad anualizada del 9,59%, un ratio de Sharpe de 0,37 y una caída máxima del 15,66%.

Porque en la cartera de asignación de activos, las estrategias CTA suelen mantener una correlación extremadamente baja con otras estrategias. Como se muestra en el círculo rojo de la figura siguiente, durante la caída del mercado bursátil mundial de 2000 a 2002 y la crisis mundial de las hipotecas de alto riesgo de 2008, el índice Barlake CTA Fund no solo no cayó, sino que también logró rendimientos positivos. Cuando ocurren crisis en En los mercados de acciones y bonos, CTA puede proporcionar fuertes ganancias. Además, también podemos ver que el nivel de ganancias del índice Barclays Commodity CTA desde 1980 siempre ha sido más alto que el del S&P 500, y su caída también es mucho menor que la del S&P 500.

img

El desarrollo de CTA en mi país se ha producido solo en la última década, pero el impulso es muy fuerte. Esto se debe principalmente al entorno comercial relativamente abierto de futuros de materias primas nacionales, el bajo umbral de capital comercial y el sistema de margen que permite posiciones largas y cortas. -comercio entre pares y tarifas de transacción bajas, la arquitectura técnica del intercambio es más avanzada que la de las acciones y es más fácil comerciar en el sistema, etc.

Desde 2010, los fondos CTA existen principalmente en forma de fondos de capital privado. A medida que las políticas nacionales abren gradualmente el ámbito de inversión de las cuentas especiales de los fondos, los fondos de CTA comienzan a existir en forma de cuentas especiales de fondos. Sus métodos operativos más transparentes y abiertos también se han convertido en una herramienta necesaria para la asignación de activos para un mayor número de inversores.

img

Como se muestra en la figura anterior, ya sea en términos de dificultad para comenzar, umbral de capital, método de ejecución de la estrategia comercial y acoplamiento de API, la estrategia CTA también es más adecuada para comerciantes individuales que otras estrategias comerciales. Los contratos de futuros nacionales son muy pequeños. Por ejemplo, un lote de maíz o harina de soja se puede negociar por unos pocos miles de yuanes, sin casi ningún umbral de capital. Además, dado que algunas estrategias de CTA provienen del análisis técnico tradicional, es relativamente fácil en comparación con a otras estrategias. .

img

El proceso de diseño de la estrategia CTA también es relativamente simple. Primero, los datos históricos se procesan preliminarmente y luego se ingresan en el modelo cuantitativo. El modelo cuantitativo incluye estrategias comerciales formadas por modelado matemático, diseño de programación y otras herramientas, y genera señales comerciales mediante el cálculo y analizar estos datos. Por supuesto, en el desarrollo real, no es tan sencillo como se muestra en la imagen anterior. Esto es solo para darles a todos una idea general.

1.2 Tipos de estrategias de futuros CTA

Desde la perspectiva de las estrategias comerciales, las estrategias CTA también están diversificadas: pueden ser estrategias de tendencia o estrategias de arbitraje; pueden ser estrategias de mediano y largo plazo en grandes ciclos o estrategias de corto plazo dentro de un día; la lógica de la estrategia puede basarse en Análisis técnico o fundamental. Análisis superficial; puede ser trading subjetivo o trading sistemático.

Existen diferentes métodos de clasificación para las estrategias CTA. Según el método de negociación, se pueden dividir en: negociación subjetiva y negociación sistemática. El desarrollo de las estrategias CTA en el extranjero es relativamente avanzado y la estrategia CTA de negociación sistemática ha alcanzado casi el 100%. Según el método de análisis, se puede dividir en: análisis fundamental y análisis técnico. Según la fuente de ingresos, se puede dividir en: trading de tendencia y trading de swing.

En general, en todo el mercado comercial, las estrategias de tendencia representan alrededor del 70% de las estrategias de CTA, las estrategias de reversión a la media representan alrededor del 25% y las estrategias de contratendencia o reversión de tendencia representan alrededor del 5%. Entre ellos, la estrategia de tendencia, que representa la mayor proporción, se puede dividir en: negociación de alta frecuencia, negociación intradía, negociación de mediano a corto plazo y negociación de mediano a largo plazo según el período de tenencia.

Estrategia de creación de mercado de alta frecuencia
Actualmente, existen dos estrategias comerciales de alta frecuencia principales en el mercado: una es la estrategia de creación de mercado de alta frecuencia y la otra es la estrategia de arbitraje de alta frecuencia. La estrategia de creación de mercado consiste en proporcionar liquidez en el mercado de negociación. Es decir, en un mercado de negociación con creadores de mercado, si alguien quiere comprar o vender, el creador de mercado debe asegurarse de que su orden pueda ejecutarse. Si no hay suficiente liquidez en el mercado y la orden no se puede ejecutar, el creador de mercado debe comprar y vender contrapartes de otras personas.

Estrategias de arbitraje de alta frecuencia
El arbitraje de alta frecuencia es la negociación de dos acciones o ETF altamente correlacionados y combinaciones de ETF. Basándose en el método de cálculo del ETF, se puede utilizar el mismo método para calcular el precio esperado de un ETF. El precio del índice del ETF se puede restar del precio esperado del ETF para obtener una diferencia de precio. Por lo general, esta diferencia de precio operará dentro de un canal de precios. Si la diferencia de precio rompe los canales superior e inferior, puede negociar esta diferencia de precio y esperar. para que la diferencia de precio vuelva a generar ganancias.

Estrategias intradía
Si seguimos el significado literal, siempre que la posición no se mantenga durante la noche, se puede llamar una estrategia de day trading. Dado que el período de tenencia de las operaciones intradía es relativamente corto, generalmente después de ingresar al mercado, uno no puede obtener una ganancia inmediatamente y saldrá del mercado rápidamente. Por lo tanto, este método de negociación conlleva un menor riesgo de mercado. Sin embargo, debido a que el mercado cambia rápidamente en un corto período de tiempo, las estrategias intradía suelen tener requisitos más altos para los operadores.

Estrategias a mediano y largo plazo
En teoría, cuanto más largo sea el período de tenencia, mayor será la capacidad de la estrategia y menor la relación riesgo-rendimiento. Especialmente en las transacciones institucionales, debido a que la capacidad de las estrategias de corto plazo es limitada y los grandes fondos no pueden entrar y salir del mercado en un corto período de tiempo, se asignarán más estrategias de mediano y largo plazo. Normalmente el período de tenencia es de varios días, meses o incluso más.

Datos de la estrategia de CTA
En términos generales, las estrategias de CTA utilizan datos de minutos, horas y días como objetos de investigación, incluidos el precio de apertura, el precio más alto, el precio más bajo, el precio de cierre, el volumen de operaciones, etc. Solo una pequeña cantidad de estrategias de CTA utilizan datos de ticks. Por ejemplo, datos de profundidad como precio de compra, precio de venta, volumen de compra, volumen de venta, etc. en datos L2.

img

Cuando se trata de las ideas básicas de las estrategias de CTA, lo primero que pensamos son en los indicadores técnicos tradicionales, porque hay más materiales de referencia públicos al respecto, la lógica suele ser más sencilla y la mayoría de ellos se basan en principios estadísticos. Por ejemplo, los diversos indicadores técnicos con los que todo el mundo está familiarizado: MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV, etc.

También existen algunos modelos de trading clásicos en el mercado que pueden usarse como referencia y mejorarse, entre ellos: combinación de medias móviles múltiples, DualThrust, R-Breaker, Turtle Trading Method, Grid Trading Method, etc.

Todas las anteriores son estrategias comerciales basadas en el análisis técnico tradicional. El proceso consiste en extraer factores o condiciones de compra y venta con ventajas probabilísticas basadas en datos históricos y conceptos comerciales correctos, y suponer que el mercado seguirá teniendo este patrón en el futuro. . Por último, utiliza el código para implementar estrategias comerciales y automatizar completamente tus operaciones. Abrir una posición, tomar ganancias, detener pérdidas, agregar posiciones, reducir posiciones, etc., generalmente no requieren intervención humana. De hecho, se trata de una estrategia de comprar caro y vender barato aprovechando el coeficiente de autocorrelación positivo de las series temporales de precios.

La mayor ventaja de la estrategia CTA es que puede obtener retornos absolutos independientemente de si el mercado actual está subiendo o bajando, especialmente cuando el mercado está cambiando rápidamente entre mercados alcistas y bajistas, o cuando la tendencia del mercado es obviamente suave. Esta estrategia es muy amplia. En resumen, hay una tendencia. En cuanto a las ganancias, la hay. Sin embargo, si el mercado está en un estado volátil o la tendencia no es obvia, esta estrategia puede resultar en comprar en máximos y vender en mínimos, moviéndose constantemente de un lado a otro para detener las pérdidas.

1.3 Principios de rentabilidad de las estrategias de futuros CTA

La razón por la que las estrategias de CTA de futuros pueden generar dinero se debe principalmente a las siguientes razones:

  1. Los movimientos de precios son reflexivos y siempre continúan en forma de tendencia. Cuando los inversores observan que los precios suben, compran, lo que hace que los precios suban aún más. Lo mismo ocurre con la caída de los precios. Como los inversores se comportan de forma más irracional, a veces vemos que los precios suben a un nivel anormal cuando suben y bajan a un nivel anormal cuando bajan.
  2. Cada inversor tiene una tolerancia asimétrica a la relación beneficios-pérdidas y una tolerancia al riesgo diferente. La mayoría de los inversores minoristas prefieren elegir un método de negociación de seguimiento de tendencias más conservador, y es más probable que el mercado se mueva siguiendo una tendencia.
  3. La formación de precios está determinada por las transacciones, y las transacciones son impulsadas por las personas. Sin embargo, la naturaleza humana es difícil de cambiar, por lo que los patrones fijos aparecen repetidamente. La estrategia es eficaz cuando se prueba retrospectivamente con datos históricos. Esto indica que puede ser eficaz. en el futuro.

Otra característica del trading siguiendo tendencias es que se pierde una pequeña cantidad de dinero cuando no hay mercado y se gana mucho dinero cuando hay mercado. Sin embargo, todo aquel que haya hecho trading sabe que el mercado se encuentra en un estado volátil la mayor parte del tiempo. del tiempo, y sólo en un pequeño lapso de tiempo es una tendencia. Citas. Por lo tanto, la estrategia de seguir tendencias tiene una tasa de ganancias más baja al operar, pero en general las ganancias y pérdidas de cada transacción son relativamente grandes.

Dado que las estrategias de seguimiento de tendencias tienen rendimientos inestables, muchas instituciones de inversión construirán una cartera de inversiones utilizando múltiples variedades y estrategias, que también incluirán una cierta cantidad de estrategias de reversión. La estrategia de reversión es que la serie temporal de precios tiene un coeficiente de autocorrelación negativo, lo que significa vender caro y comprar barato.

Correlación entre los CTA y los activos tradicionales
img

Si observamos el gráfico anterior, en teoría, cuando nos enfrentamos a varios cambios en los precios del mercado al mismo tiempo, múltiples estrategias con diferentes estilos o bajas correlaciones producirán señales comerciales que a veces son las mismas y a veces diferentes. A medida que varias curvas de rendimiento se superponen, los rendimientos generales se complementan entre sí y la curva de rendimiento se vuelve más plana, lo que reduce la volatilidad de los rendimientos.

Desde los puntos de vista anteriores, se puede concluir que en lugar de desarrollar una estrategia de nivel maestro, es mejor desarrollar múltiples subestrategias mediocres. Entonces, ¿cómo controlar estas estrategias? Aquí podemos hacer referencia al algoritmo de bosque aleatorio en el aprendizaje automático. El bosque aleatorio no es un algoritmo independiente, es un marco de toma de decisiones que incluye múltiples árboles de decisión. Es equivalente a la estrategia padre por encima de la subestrategia del árbol de decisión. Organizar y controlar grupos de políticas secundarias a través de políticas principales.

A continuación, debemos diseñar una estrategia maestra. Podemos evaluar la liquidez, la rentabilidad y la estabilidad de varios productos básicos en todo el mercado de futuros de productos básicos, descartar las carteras de futuros de productos básicos con baja volatilidad y luego llevar a cabo una neutralidad del sector. A través de la selección diversificada de los En la industria, la volatilidad general se puede reducir aún más. Por último, la cartera multivariante de futuros de materias primas reales se construye mediante la comparación de valores de mercado para la negociación.

Cada producto también se puede configurar con estrategias de parámetros múltiples. Puede elegir una combinación de parámetros que tenga un buen rendimiento de backtest. Cuando la tendencia del mercado es obvia, las estrategias de parámetros múltiples suelen tener un rendimiento consistente, lo que equivale a agregar posiciones. Cuando el mercado está en una En un mercado volátil, se pueden utilizar estrategias con múltiples parámetros para aumentar el rendimiento. Las estrategias suelen comportarse de forma inconsistente, por lo que cada uno toma posiciones largas o cortas para cubrir los riesgos, lo que equivale a reducir las posiciones. Esto puede reducir aún más la tasa de rendimiento máxima de la cartera mientras mantiene sin cambios la tasa de rendimiento general.

2. Caso de estrategia CTA de futuros clásicos

Newton dijo una vez: Si puedo ver más lejos que los demás, es porque estoy parado sobre hombros de gigantes.

Las estrategias CTA disponibles públicamente en el mercado incluyen la estrategia de media móvil, la estrategia de bandas de Bollinger, el método de negociación de tortugas, la estrategia de impulso, la estrategia de arbitraje, etc. Todas las estrategias de trading cuantitativo tienen una característica: morirán con la luz del día. Una vez que la estrategia se haga pública, gradualmente se volverá ineficaz. Pero esto no afecta nuestro aprendizaje de estas estrategias y el aprovechamiento de su esencia, de modo que podemos mirar los problemas desde la perspectiva de estar parados sobre hombros de gigantes.

2.1 Análisis de los fundamentos de futuros (inventario, base, precio)

El análisis fundamental no necesita preocuparse por las tendencias de precios a corto plazo. Cree que el valor se reflejará eventualmente en el precio. Se trata más bien de analizar los factores detrás del precio y juzgar cuánto vale esta variedad. Generalmente se adopta un método de análisis de arriba hacia abajo: desde factores macro, factores de variedad y otros factores.

img

Si observamos la imagen de arriba, hay muchos factores que afectan los precios de las materias primas, hasta decenas de artículos en total. Si la desglosamos aún más, hay decenas más y estos datos cambian constantemente. Está fuera de la capacidad de los inversores minoristas individuales obtener cantidades tan enormes de datos, y mucho menos realizar análisis objetivos.

De hecho, el análisis fundamental de los futuros de materias primas no implica analizar todos los factores. Solo necesitamos comprender los elementos básicos del análisis fundamental para encontrar patrones a partir de la información compleja.

Factores macro
Los datos macroeconómicos son complejos y cambiantes. Cada día y a cada momento, los políticos, los bancos centrales y los bancos de inversión de varios países publican una gran cantidad de datos económicos, tanto oficiales como no oficiales. Aparte de las crisis políticas y económicas, el análisis macroeconómico es un buen material de conversación, pero no muy práctico. Peter Lynch, un famoso experto estadounidense en gestión de fondos, expresó una vez su opinión: "No dedico más de quince minutos al año a analizar las tendencias económicas".

Factores de variedad
En el análisis fundamental, el análisis de productos analiza principalmente las primas y los descuentos, las relaciones de oferta y demanda, los inventarios de materias primas, las ganancias de la industria, etc. Se puede decir que dominar el análisis de los factores de los productos de futuros de materias primas puede determinar básicamente la mayoría de las tendencias del mercado.

Los amigos que han realizado operaciones de futuros saben que los futuros de productos básicos nacionales se pueden dividir simplemente en: productos industriales y productos agrícolas. Los métodos de análisis para productos industriales y productos agrícolas son diferentes. Lo explicaremos desde los dos aspectos de la oferta y la demanda. Para los productos industriales, la oferta es relativamente estable. A menos que haya un gran avance tecnológico, es poco probable que la capacidad de producción aumente. Aumento en el corto plazo. Hay grandes cambios a lo largo del tiempo, por lo que el factor que afecta los precios de los productos industriales es principalmente la demanda. La demanda de productos agrícolas es relativamente estable. A largo plazo, hay cambios en la demanda de productos agrícolas, pero a corto plazo, la demanda de productos agrícolas tiende a ser estable. Por lo tanto, el factor que afecta el precio de los productos agrícolas Se trata principalmente de suministro.

Por lo tanto, según las leyes de la economía, es la relación entre la oferta y la demanda la que determina en última instancia el precio de un producto. En teoría, siempre que podamos obtener los datos de la oferta y la demanda, podemos calcular el precio futuro del producto. En el caso de los productos industriales, los datos sobre la oferta son relativamente fáciles de obtener, pero los datos sobre la demanda son difíciles de obtener. En el caso de los productos agrícolas, los datos sobre la demanda son relativamente fáciles de obtener, pero los datos sobre la oferta son difíciles de obtener.

De hecho, podemos ir más allá y hacer una resta. El resultado mutuo de la oferta y la demanda en el mercado económico es el inventario. Podemos utilizar los datos del inventario para juzgar la solidez de la relación entre la oferta y la demanda del mercado. Si el inventario de un determinado producto es muy alto, significa que el poder de la oferta del mercado es mayor que la demanda y el precio del producto caerá si las condiciones externas permanecen sin cambios. Si el inventario de un determinado producto es muy bajo, significa que la fuerza de la demanda del mercado es mayor que la oferta y el precio del producto aumentará pronto si las condiciones externas permanecen sin cambios.

Además de analizar los inventarios de materias primas, también es necesario analizar la diferencia de precios entre el mercado al contado y el mercado de futuros, que es la llamada base. Si el precio de futuros es mayor que el precio al contado, lo llamamos prima; si el precio de futuros es menor que el precio al contado, lo llamamos descuento. Según el sistema de entrega de futuros, en la fecha de entrega de futuros, el precio de futuros debe ser igual al precio al contado.

img

Independientemente de si se trata de una prima o de un descuento, debido a las limitaciones del sistema de entrega de futuros, en teoría el precio de futuros en la fecha de entrega debería ser igual al precio al contado. A medida que se acerca la fecha de entrega, el precio al contado y el precio de futuros tenderán a ser consistentes, uno es el retorno del futuro al contado, el otro es el retorno del contado a los futuros.

Basándonos en los principios anteriores, podemos utilizar el inventario y la base para determinar simultáneamente los precios de futuros. Si el inventario de un producto básico es bajo y el precio de futuros es mucho menor que el precio al contado, entonces podemos concluir que la demanda en el mercado al contado es mayor que la oferta y la probabilidad de futuros aumentos del precio al contado es alta. A medida que se acerca la fecha de entrega, los precios de futuros aumentarán para igualar el precio al contado, y la probabilidad de que los precios de futuros aumenten en el futuro es mayor.

Finalmente, hemos determinado la dirección más probable de los precios futuros a través del inventario y la base, pero no hay puntos de compra y venta más precisos, por lo que se necesita un análisis técnico para dar señales claras de entrada y salida. Todo el marco del análisis fundamental es: inventario bajo + gran descuento + señal alcista de análisis técnico = largo; inventario alto + gran prima + señal bajista de análisis técnico = corto.

2.2 Reglas para el comercio de tortugas

Cuando se trata de estrategias comerciales, tenemos que hablar de las reglas representativas del Turtle Trading. Las reglas del trading de tortugas provienen de uno de los experimentos más famosos en la historia del trading, cuando el especulador de materias primas Richard Dennis quiso descubrir si los grandes traders nacen o se hacen. Para ello, en 1983 reclutó a 13 personas y les enseñó los conceptos básicos del comercio de futuros, así como sus propios métodos y principios comerciales. A estos estudiantes se les llama "tortugas marinas".

Durante los siguientes cuatro años, las Tortugas lograron un rendimiento compuesto anual promedio del 80%. Dennis también demostró que utilizando un sistema y reglas simples, las personas con poca o ninguna experiencia en el trading pueden convertirse en excelentes traders. Sin embargo, algunas Tortugas venden las Reglas de Comercio de Tortugas en el sitio web para obtener ganancias. Para detener este comportamiento, dos Tortugas originales, Curtis Faith y Arthur Maddock, decidieron poner las Reglas de Comercio de Tortugas a disposición del público de forma gratuita en un sitio web.

Después de que la verdad salió a la luz, la gente descubrió que las Reglas de Trading de Tortugas adoptaron un Canal Donchian optimizado y utilizaron el indicador ATR para la gestión de posiciones. Después de décadas de pruebas históricas, se ha convertido en un método comercial que los inversores minoristas comunes pueden utilizar para ganar dinero fácilmente y sigue siendo eficaz para ciertos productos.

Principios básicos de las tortugas

  • Obtenga la ventaja: encuentre una estrategia comercial que tenga un valor esperado positivo porque generará retornos positivos a largo plazo.
  • Gestione los riesgos: controle los riesgos y manténgase firme, de lo contrario, es posible que no llegue a ver el día en que obtenga resultados.
  • Compromiso inquebrantable: solo implementando su estrategia de manera firme podrá lograr resultados verdaderamente sistemáticos.
  • Simplicidad y claridad: a largo plazo, los sistemas simples son más viables que los sistemas complejos.

A continuación, echemos un vistazo a lo que realmente dicen las Reglas de Comercio de Tortugas.

  1. Mercados: qué comprar y vender, en esencia, en qué mercados operar. Las Tortugas eran comerciantes de futuros y solo elegían mercados con grandes volúmenes de negociación y alta liquidez, porque elegir mercados con volúmenes de negociación bajos aumentaría el riesgo de perder. dinero. El deslizamiento adicional al salir del mercado también hará que pierda muchas oportunidades de tendencia.
  2. Tamaño de la posición: Cuánto comprar o vender es una parte muy importante de toda la estrategia, pero la mayoría de las personas suelen ignorarla o tratarla incorrectamente. Las reglas de trading de Turtle utilizan ATR, o indicador de rango verdadero promedio, para calcular posiciones de apertura, agregar señales y señales de stop-loss. Este es un diseño muy inteligente, que tiene como objetivo ajustar el tamaño de la posición de acuerdo con la volatilidad absoluta del mercado. Cuando la volatilidad del mercado es fuerte, el tamaño de la posición se reduce, y cuando la volatilidad del mercado es débil, el tamaño de la posición se aumenta. . Primero define una unidad, la fórmula de esta unidad es: (activos totales*1%)/ATR. La posición inicial es de 1 unidad. Incluso si la caída del producto en ese día alcanza el nivel ATR, la pérdida en ese día puede controlarse dentro del 1% del total de activos. Si el precio sube en 0,5 unidades, la posición larga se incrementará en 1 unidad, hasta un máximo de 4 unidades.
  3. Entrada al mercado: la entrada de la tortuga al mercado se basa en el canal de Donchian. Cuando el precio sube por encima del precio más alto de las 20 o 55 líneas K anteriores, ingresa al mercado para entrar en largo. Cuando el precio cae por debajo de la línea de Donchian, precio más bajo de las 20 o 55 K-line anteriores, entra al mercado para entrar en largo. , simplemente entra al mercado y entra en corto. Entre en la operación cuando aparezca la señal, sin esperar el cierre o la siguiente línea K.
  4. Stop loss: a largo plazo, las transacciones sin stop loss no tendrán éxito, pero la mayoría de los traders mantienen posiciones perdedoras con la esperanza de que el mercado cambie. Las Tortugas tenían reglas estrictas sobre cuándo salir de una posición perdedora. Si se mantenía una posición larga y el precio caía 2 unidades, la posición larga se cerraba con un stop loss. Si mantiene una posición corta y el precio aumenta 2 unidades, la posición corta se cerrará con un stop loss.
  5. Tomar ganancias: la toma de ganancias de la Tortuga significa perder una gran cantidad de ganancias flotantes, que también es la parte que a muchos traders les resulta difícil de aceptar. Si actualmente mantiene una posición larga y el precio cae por debajo del recorrido inferior del canal Donchian de 10 días, cierre todas las posiciones largas; si actualmente mantiene una posición corta y el precio sube por encima del recorrido superior del canal Donchian de 10 días, cierre todas las posiciones largas. Canal Donchian, cierre todas las posiciones cortas.

De esto podemos ver que, aunque las reglas de comercio de Turtle parecen simples, de hecho, han formado el prototipo de un sistema de comercio real. Cubre todos los aspectos de un sistema de comercio completo y no deja espacio para los comerciantes. Hay lugar para la imaginación subjetiva. y toma de decisiones, lo que permite sacar a relucir las ventajas del funcionamiento programado del sistema. Incluyendo: reglas de entrada y salida, gestión de fondos y control de riesgos, etc.

La mayor ventaja del método de trading Turtle es que nos ayuda a establecer un método de trading efectivo. Es una estrategia que combina la apertura por lotes, el stop-profit y stop-loss dinámicos y el seguimiento de la tendencia del mercado, especialmente el uso del valor ATR y la posición. Gestión. Vale la pena aprender el concepto. Por supuesto, también tiene un problema común con las estrategias de seguimiento de tendencias, que es la obtención de ganancias no realizadas. Es muy posible que las ganancias flotantes obtenidas al perseguir la subida se pierdan debido a la fuerte caída posterior. Es muy fuerte en la gran tendencia, pero tiene un desempeño pobre en el mercado volátil.

3. Desarrollo práctico de estrategias futuras de CTA

3.1 Desarrollo de estrategia de tendencia de CTA basada en lenguaje Mai

A finales del siglo pasado, un método de comercio mágico comenzó a popularizarse en el campo de la inversión financiera en los Estados Unidos. Después de que miles de personas lo practicaran, la gente descubrió que este método era efectivo y tenía un gran valor práctico. , fue reconocido por muchos expertos en inversiones. Es reconocido por los comerciantes profesionales y todavía se puede aplicar perfectamente a casi todos los campos de inversión financiera, ya sea divisas, oro, acciones, futuros, petróleo crudo o índices y bonos. Esto es El método de operación del caos.

La palabra caos originalmente se refiere a la descripción del estado caótico del universo. La idea es que el resultado es inevitable, pero no se puede calcular debido al conocimiento existente, porque el cálculo en sí también está cambiando el resultado, y el máximo o mínimo El resultado puede aparecer al final, pero no hay nada inevitable. Esto es muy similar a operar en el mercado, donde los participantes cambian el mercado a medida que lo analizan y compran y venden operaciones. El mercado es eternamente variable. Cuando los participantes se enteran de una nueva forma de mercado, el mercado también se entera de que los participantes la reconocen y entonces se produce la mutación. Y definitivamente tenderá a mutar en una dirección desconocida para los participantes. Tiene suficiente sabiduría para evitar que los participantes capten sus patrones cambiantes. En otras palabras, el mercado no es estable y la comprensión del pasado del mercado no puede representar el futuro.

El método operativo Chaos es un conjunto completo de ideas de inversión, estrategias comerciales y señales de entrada y salida inventadas por Bill Williams. En la actualidad, muchos inversores internacionales utilizan métodos de operaciones caóticas para participar en transacciones de mercado. Debido al retraso en el desarrollo del mercado financiero de mi país y al hecho de que la teoría del caos es una idea relativamente nueva, hay pocas personas en China que estudien métodos de operaciones caóticas. Dado que el Método de Operación del Caos es una estrategia comercial altamente universal que se puede aplicar a casi todos los campos de inversión financiera, incluidas acciones, bonos, futuros, divisas y monedas digitales, este curso utiliza una versión simplificada de la Estrategia del Caos como punto de partida. . Mejorar los intereses y la rentabilidad de las inversiones de todos.

Como sugiere su nombre, la base teórica del método de operación del caos es la teoría del caos, propuesta por el meteorólogo Edward Lorenz y uno de los mayores descubrimientos científicos de finales del siglo XX. Fue él quien propuso el famoso “efecto mariposa”. Bill Williams aplicó creativamente la teoría del caos al campo de la inversión financiera y la combinó con geometría fractal, dinámica no lineal y otras disciplinas para crear una serie de indicadores de análisis técnico muy efectivos.

Todo el método de operación del caos se compone de cinco dimensiones (indicadores técnicos):

  • Caimán

  • El fractal

  • El impulso

  • Aceleración

  • La línea de equilibrio

    img

Veamos la imagen de arriba. La línea de cocodrilo es un conjunto de líneas de equilibrio que utilizan geometría fractal y dinámica no lineal. Su esencia es la media móvil ponderada exponencialmente extendida, que es un tipo de media móvil, pero el método de cálculo es ligeramente más complicado. que el promedio móvil ordinario. Algunos. A continuación, veamos cómo definir la línea Alligator en el lenguaje Mai:

// 参数 N1:=11; N2:=21; // 定义价格中线 N3:=N1+N2; N4:=N2+N3; HL:=(H+L)/2; // 鳄鱼线 Y^^SMA(REF(HL,N3),N4,1); R:=SMA(REF(HL,N2),N3,1); G:=SMA(REF(HL,N1),N2,1);

Primero, definimos dos parámetros externos N1 y N2, y luego calculamos el HL promedio del precio más alto y el precio más bajo en función de los parámetros externos. Luego, calculamos el HL promedio con diferentes parámetros respectivamente. Para el beso de labios, es el Ciclo pequeño de la línea media. Para promediarlo nuevamente, los dientes son el promedio del período medio de la línea media y la mandíbula es el promedio del período grande de la línea media. En esta estrategia utilizamos las mandíbulas.

El concepto de fractal está definido de forma muy vívida en el Método de la Operación del Caos. Podemos utilizar una analogía: abra la palma de la mano con los dedos hacia arriba. El dedo medio es el fractal superior, el meñique y el anular están a la izquierda y el índice está a la derecha. El dedo índice y el pulgar de la derecha representan la zona no lesionada. Línea K del nuevo punto alto. Un fractal básico está compuesto de estas 5 líneas K. Luego puedes definir un fractal usando el siguiente código:

// 分形 TOP_N:=BARSLAST(REF(H,2)=HHV(H,5))+2; BOTTOM_N:=BARSLAST(REF(L,2)=LLV(L,5))+2; TOP:=REF(H,TOP_N); BOTTOM:=REF(L,BOTTOM_N); MAX_YRG^^MAX(MAX(Y,R),G); MIN_YRG^^MIN(MIN(Y,R),G); TOP_FRACTAL^^VALUEWHEN(H>=MAX_YRG,TOP); BOTTOM_FRACTAL^^VALUEWHEN(L<=MIN_YRG,BOTTOM);

Después de calcular la línea Alligator y el fractal, podemos escribir una estrategia de operación de caos simple basada en estas dos condiciones, utilizando un conjunto de promedios móviles ponderados exponencialmente como precio de referencia para calcular los indicadores de línea Alligator y fractal. Por supuesto, la estrategia original de la operación del caos es más complicada. El código es el siguiente:

// 如果当前无多单,并且收盘价升破上分形,并且上分形在鳄鱼线上方时,多头开仓 BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1); // 如果当前无空单,并且收盘价跌破下分形,并且下分形在鳄鱼线下方时,空头开仓 SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1); // 如果收盘价跌破鳄鱼的下巴时,多头平仓 C<Y,SP(BKVOL); // 如果收盘价升破鳄鱼的下巴时,空头平仓 C>Y,BP(SKVOL);

Para facilitar la comprensión, he incluido comentarios detallados en el código. Podemos enumerar simplemente la lógica comercial de esta estrategia de la siguiente manera:

  • Abrir una posición larga: si no hay ninguna orden larga en este momento y el precio de cierre rompe el fractal superior, y el fractal superior está por encima de la línea Alligator.
  • Abrir una posición corta: si no hay ninguna orden corta actualmente, y el precio de cierre cae por debajo del fractal inferior, y el fractal inferior está por debajo de la línea Alligator.
  • Salir de posición larga: Si el precio de cierre cae por debajo de la mandíbula del caimán.
  • Salir de la posición corta: si el precio de cierre supera la mandíbula del caimán.

A continuación, echemos un vistazo a los resultados del backtest de esta sencilla estrategia de operación de caos. Para que el backtest se acerque más al entorno comercial real, la tarifa de transacción se establece al doble de la del intercambio y se agrega un deslizamiento de 2 saltos para abrir y cerrar posiciones. El tipo de datos para la prueba retrospectiva es el índice de barras de refuerzo, el tipo de negociación es la barra de refuerzo principal continua y la posición de apertura se fija en 1 lote. A continuación se muestra un informe preliminar del rendimiento del backtest a nivel de 1 hora.

img
img
img

A juzgar por la curva de capital y los datos de rendimiento de las pruebas retrospectivas, la estrategia funciona bien y la curva de capital general está en constante ascenso. Sin embargo, las características del mercado de varillas de refuerzo han cambiado desde finales de 2016, desde la tendencia unilateral anterior de alta volatilidad a una amplia gama de fluctuaciones. A juzgar por la curva de capital, los beneficios han sido obviamente débiles desde 2017.

En resumen, la esencia del método de operación del caos es encontrar el punto de inflexión. No necesita preocuparse por cómo va el mercado o si es un avance verdadero o falso. Si logra atravesar el fractal, puede ingresar. el mercado directamente. Nunca intente predecir el mercado, sino sea un observador y seguidor.

3.2 Desarrollo de estrategia de arbitraje de CTA basada en lenguaje JavaScript

En su libro "La alquimia de las finanzas", escrito en 1987, Soros planteó una vez una importante proposición: "Creo que los precios del mercado siempre son erróneos en el sentido de que están sesgados hacia el futuro". Considera que la hipótesis de la eficiencia del mercado es sólo un supuesto teórico. De hecho, los participantes del mercado no siempre son racionales y, en todo momento, es imposible que los participantes obtengan e interpreten objetivamente toda la información. Además, incluso si la misma Información, la opinión de cada persona es diferente. En otras palabras, el precio en sí ya incluye las expectativas erróneas de los participantes del mercado, por lo que los precios del mercado siempre son erróneos en esencia. Esta puede ser una fuente de ganancias para los arbitrajistas.

Con base en los principios anteriores, sabemos que en un mercado de futuros ineficiente, los impactos del mercado sobre los contratos de entrega en diferentes períodos no siempre están sincronizados y su fijación de precios no es completamente efectiva. Luego, en función de los precios de los contratos de entrega del mismo objeto comercial en diferentes períodos, si hay una gran diferencia de precios entre los dos precios, puede comprar y vender contratos de futuros de diferentes períodos al mismo tiempo para realizar un arbitraje entre períodos.

Al igual que los futuros de materias primas, las monedas digitales también tienen una combinación de contratos de arbitraje entre períodos asociados. Por ejemplo, en el intercambio OkEX, existen: ETC Weekly, ETC Biweekly y ETC Quarterly. Por ejemplo, supongamos que la diferencia de precios entre ETC semanal y ETC trimestral se mantiene alrededor de 5 durante mucho tiempo. Si el spread llega a 7 en un día determinado, esperamos que vuelva a 5 en algún momento en el futuro. Luego puedes vender ETC semanalmente y comprar ETC trimestralmente para acortar el spread. viceversa.

Si bien esta diferencia de precios existe, el arbitraje manual a menudo implica muchas incertidumbres debido a la operación manual que consume mucho tiempo, la poca precisión y el impacto de los cambios de precios. El encanto del arbitraje cuantitativo radica en capturar oportunidades de arbitraje a través de modelos cuantitativos y formular estrategias comerciales de arbitraje, así como colocar automáticamente órdenes comerciales en las bolsas a través de algoritmos programados, a fin de capturar oportunidades de manera rápida y precisa y obtener ganancias de manera eficiente y estable.

Este curso le enseñará cómo utilizar la plataforma de negociación cuantitativa Inventor y el contrato de futuros ETC en el intercambio OkEX en el comercio de divisas digitales, y utilizar una estrategia de arbitraje simple para demostrar cómo capturar oportunidades de arbitraje instantáneas y aprovechar cada oportunidad para obtener ganancias mientras cubrir posibles riesgos.

Creación de una estrategia de arbitraje de criptomonedas entre períodos
Dificultad: Normal
Entorno estratégico

  • Asunto de la transacción: Ethereum Classic (ETC)
  • Datos de diferencia de precios: ETC semanal - ETC trimestral (prueba de cointegración omitida)
  • Ciclo de negociación: 5 minutos
  • Coincidencia de posiciones: 1:1
  • Tipo de transacción: Mismo producto entre períodos

Lógica de estrategia

  • Condiciones de apertura de spread largo: si la cuenta actual no tiene posiciones y el spread es menor que el track de bolitas inferior, abra una posición larga en el spread. Es decir: comprar ETC para la semana y vender ETC para el trimestre.
  • Condiciones para abrir una posición corta de spread: Si la cuenta actual no tiene posiciones y el spread es mayor que el límite superior del activo, abra una posición corta en el spread. Es decir: vender ETC para la semana y comprar ETC para el trimestre.
  • Condiciones para cerrar un spread largo: Si la cuenta corriente tiene una posición larga semanal en ETC y una posición corta trimestral en ETC, y el spread es mayor que el track medio de boll, el spread largo se cerrará. Es decir: vender ETC para la semana y comprar ETC para el trimestre.
  • Condiciones para cerrar un spread corto: Si la cuenta corriente tiene una posición corta para ETC esta semana y una posición larga para ETC en el trimestre, y el spread es menor que la trayectoria media de Boll, el spread corto se cerrará. Es decir: comprar ETC para la semana y vender ETC para el trimestre.

Lo anterior es una descripción simple de la lógica de la estrategia de arbitraje entre períodos de la moneda digital. Entonces, ¿cómo se implementan las ideas en el programa? Primero intentamos construir el marco en la plataforma de comercio cuantitativo Inventor.

function Data() {} // 基础数据函数 Data.prototype.mp = function () {} // 持仓函数 Data.prototype.boll = function () {} // 指标函数 Data.prototype.trade = function () {} // 下单函数 Data.prototype.cancelOrders = function () {} // 撤单函数 Data.prototype.isEven = function () {} // 处理单只合约函数 Data.prototype.drawingChart = function () {} // 画图函数 function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 计算boll技术指标 data.trade(); // 计算交易条件下单 data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约 } //入口函数 function main() { while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

¿Te imaginas cómo es nuestro proceso de transacción en el trading con supervisores? No existe una diferencia esencial en el trading de sistemas, no es más que: obtener datos, calcular datos, colocar órdenes y procesarlas después de colocarlas. Lo mismo ocurre en el programa. Primero, el programa ejecutará la función principal en la línea 20. Esto es una convención. Cuando el programa complete el preprocesamiento de la estrategia comercial (si lo hay), entrará en un modo de bucle infinito, es decir, Modo de sondeo circular. En el modo de sondeo, la función onTick se ejecutará repetidamente.

Luego, en la función onTick, tenemos el proceso de negociación en el comercio subjetivo: primero obtenemos los datos básicos del precio, luego obtenemos el saldo de la cuenta, luego calculamos el indicador, luego comenzamos a calcular las condiciones comerciales y realizamos un pedido, y finalmente el procesamiento después de realizarlo. el pedido, incluyendo: Cancelar pedidos, realizar sorteos y procesar contratos individuales.

Al comparar las ideas estratégicas y los procesos comerciales, puede construir fácilmente un marco estratégico. La estrategia completa se puede simplificar en tres pasos:

  • Procesamiento previo a la transacción.
  • Obtener y calcular datos.
  • Realizar un pedido y gestionar el seguimiento.

Una vez creado el marco de la estrategia comercial, debe completar el código de detalle necesario en el marco de la estrategia según el proceso comercial real y los detalles de la transacción.

1. Procesamiento previo a la transacción

1. Declarar las variables globales necesarias

  • Declarar un objeto gráfico para configurar el gráfico
    var chart = {}
  • Llamar a la función Chart para inicializar el gráfico
    var ObjChart = Chart ( chart )
  • Declarar una matriz vacía para almacenar la secuencia de diferencia de precio
    var bars = []
  • Declarar una variable para registrar la marca de tiempo de datos históricos
    var oldTime = 0

2. Configurar parámetros externos de la estrategia

var tradeTypeA = "this_week"; // 套利A合约 var tradeTypeB = "quarter"; // 套利B合约 var dataLength = 10; //指标周期长度 var timeCycle = 1; // K线周期 var name = "ETC"; // 币种 var unit = 1; // 下单量

3. Definir funciones de procesamiento de datos

  • Función de datos básica: Datos ( )
    Crea un constructor Data y define sus propiedades internas. Incluye: datos de cuenta, datos de posición, marca de tiempo de datos de línea K, precio de oferta/demanda de contrato de arbitraje A/B y diferenciales de arbitraje forward/back.
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约 this.accountData = _C(exchange.GetAccount); // 获取账户信息 this.positionData = _C(exchange.GetPosition); // 获取持仓信息 var recordsData = _C(exchange.GetRecords); //获取K线数据 exchange.SetContractType(tradeTypeA); // 订阅套利A合约 var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据 exchange.SetContractType(tradeTypeB); // 订阅套利B合约 var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据 this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间 this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价 this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价 this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价 this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价 // 正套价差(合约A卖一价 - 合约B买一价) this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price; // 反套价差(合约A买一价 - 合约B卖一价) this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price; }
  • Función para obtener posición: mp()
    Recorre toda la matriz de posiciones y devuelve el número de posiciones del contrato y la dirección especificados. Si no hay ninguno, devuelve falso
Data.prototype.mp = function (tradeType, type) { var positionData = this.positionData; // 获取持仓信息 for (var i = 0; i < positionData.length; i++) { if (positionData[i].ContractType == tradeType) { if (positionData[i].Type == type) { if (positionData[i].Amount > 0) { return positionData[i].Amount; } } } } return false; }
  • Funciones de la línea K y del indicador: boll ( )
    Sintetizar una nueva secuencia de línea K basada en los datos de propagación de arbitraje directo/inverso. Y devuelve los datos del riel superior, riel medio y riel inferior calculados por el indicador boll.
Data.prototype.boll = function (num, timeCycle) { var self = {}; // 临时对象 // 正套价差和反套价差中间值 self.Close = (this.basb + this.sabb) / 2; if (this.timeA == this.timeB) { self.Time = this.time; } // 对比两个深度数据时间戳 if (this.time - oldTime > timeCycle * 60000) { bars.push(self); oldTime = this.time; } // 根据指定时间周期,在K线数组里面传入价差数据对象 if (bars.length > num * 2) { bars.shift(); // 控制K线数组长度 } else { return; } var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标 return { up: boll[0][boll[0].length - 1], // boll指标上轨 middle: boll[1][boll[1].length - 1], // boll指标中轨 down: boll[2][boll[2].length - 1] // boll指标下轨 } // 返回一个处理好的boll指标数据 }
  • Función de orden: trade ( )
    Pase el nombre del contrato de pedido y el tipo de pedido, luego realice un pedido al precio de consideración y devuelva el resultado después de realizar el pedido. Dado que es necesario colocar dos órdenes en diferentes direcciones al mismo tiempo, el precio de compra/venta se convierte dentro de la función de acuerdo con el nombre del contrato de la orden.
Data.prototype.trade = function (tradeType, type) { exchange.SetContractType(tradeType); // 下单前先重新订阅合约 var askPrice, bidPrice; if (tradeType == tradeTypeA) { // 如果是A合约下单 askPrice = this.askA; // 设置askPrice bidPrice = this.bidA; // 设置bidPrice } else if (tradeType == tradeTypeB) { // 如果是B合约下单 askPrice = this.askB; // 设置askPrice bidPrice = this.bidB; // 设置bidPrice } switch (type) { // 匹配下单模式 case "buy": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); case "sell": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closebuy": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closesell": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); default: return false; } }
  • Función de cancelación de pedido: cancelOrders()
    Obtenga un listado de todos los pedidos no cumplidos y cancélelos uno por uno. Y si hay algún pedido sin cumplir, devuelve falso, y si no hay ningún pedido sin cumplir, devuelve verdadero.
Data.prototype.cancelOrders = function () { Sleep(500); // 撤单前先延时,因为有些交易所你懂的 var orders = _C(exchange.GetOrders); // 获取未成交订单数组 if (orders.length > 0) { // 如果有未成交的订单 for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组 exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单 Sleep(500); //延时0.5秒 } return false; // 如果取消了未成交的单子就返回false } return true; //如果没有未成交的订单就返回true }
  • Manejo de la tenencia de un único contrato: isEven()
    Cuando se trata de una situación de una sola pierna en el comercio de arbitraje, simplemente cerramos todas las posiciones para manejarla. Por supuesto, también puedes cambiar a un método de pedido de seguimiento.
Data.prototype.isEven = function () { var positionData = this.positionData; // 获取持仓信息 var type = null; // 转换持仓方向 // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2 if (positionData.length % 2 != 0 || positionData.length != 2) { for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组 if (positionData[i].Type == 0) { // 如果是多单 type = 10; // 设置下单参数 } else if (positionData[i].Type == 1) { // 如果是空单 type = -10; // 设置下单参数 } // 平掉所有仓位 this.trade(positionData[i].ContractType, type, positionData[i].Amount); } } }
  • Función de dibujo: drawingChart()
    Llame al método ObjChart.add() para dibujar los datos de mercado y los datos del indicador necesarios en el gráfico: pista superior, pista media, pista inferior y diferencial positivo/negativo.
Data.prototype.drawingChart = function (boll) { var nowTime = new Date().getTime(); ObjChart.add([0, [nowTime, boll.up]]); ObjChart.add([1, [nowTime, boll.middle]]); ObjChart.add([2, [nowTime, boll.down]]); ObjChart.add([3, [nowTime, this.basb]]); ObjChart.add([4, [nowTime, this.sabb]]); ObjChart.update(chart); }

4. En la función de entrada main(), ejecute el código de preprocesamiento previo a la transacción. Este código solo se ejecuta una vez después de que se inicia el programa. incluir:

  • Filtrar información menos importante en la consolaSetErrorFilter ( )
  • Establezca la moneda digital que se va a negociarexchange.IO ( )
  • Borre el gráfico dibujado previamente antes de que comience el programaObjChart.reset ( )
  • Borre la información de la barra de estado anterior antes de que se inicie el programaLogProfitReset ( )

Después de definir el preprocesamiento previo al trading anterior, pasaremos al siguiente paso, ingresaremos al modo de sondeo y ejecutaremos repetidamente la función onTick(). Y configure el tiempo de suspensión cuando Sleep() sondea, porque algunas API de intercambio de criptomonedas tienen un límite de acceso incorporado dentro de un cierto período de tiempo.

function main() { // 过滤控制台中不是很重要的信息 SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP"); exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种 ObjChart.reset(); //程序启动前清空之前绘制的图表 LogProfitReset(); //程序启动前清空之前的状态栏信息 while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

2. Obtener y calcular datos

  1. Obtenga objetos de datos básicos, saldos de cuentas y datos de indicadores de bol para usar en la lógica comercial.
function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据 if (!boll) return; // 如果没有boll数据就返回 }

3. Realizar un pedido y hacer seguimiento

  1. De acuerdo con la lógica de la estrategia anterior, ejecutar operaciones de compra y venta. Primero, determina si se cumplen las condiciones del precio y del indicador, luego determina si se cumplen las condiciones de la posición y, finalmente, ejecuta la función de orden comercial ( ).
// 价差说明 // basb = (合约A卖一价 - 合约B买一价) // sabb = (合约A买一价 - 合约B卖一价) if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨 if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "closebuy"); // 合约A平多 } if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "closesell"); // 合约B平空 } } else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨 if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "closesell"); // 合约A平空 } if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "closebuy"); // 合约B平多 } } if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额 if (data.basb < boll.down) { // 如果basb价差低于下轨 if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "buy"); // 合约A开多 } if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "sell"); // 合约B开空 } } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨 if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "sell"); // 合约A开空 } if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "buy"); // 合约B开多 } } }
  1. Una vez realizado el pedido, es necesario gestionar situaciones anormales como pedidos no cumplidos y la celebración de un único contrato. y dibujar gráficos.
data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约

En lo anterior, hemos creado una sencilla estrategia de arbitraje entre períodos de moneda digital en poco más de 200 líneas. El código completo es el siguiente:

// 全局变量 // 声明一个配置图表的 chart 对象 var chart = { __isStock: true, tooltip: { xDateFormat: '%Y-%m-%d %H:%M:%S, %A' }, title: { text: '交易盈亏曲线图(详细)' }, rangeSelector: { buttons: [{ type: 'hour', count: 1, text: '1h' }, { type: 'hour', count: 2, text: '3h' }, { type: 'hour', count: 8, text: '8h' }, { type: 'all', text: 'All' }], selected: 0, inputEnabled: false }, xAxis: { type: 'datetime' }, yAxis: { title: { text: '价差' }, opposite: false, }, series: [{ name: "上轨", id: "线1,up", data: [] }, { name: "中轨", id: "线2,middle", data: [] }, { name: "下轨", id: "线3,down", data: [] }, { name: "basb", id: "线4,basb", data: [] }, { name: "sabb", id: "线5,sabb", data: [] }] }; var ObjChart = Chart(chart); // 画图对象 var bars = []; // 存储价差序列 var oldTime = 0; // 记录历史数据时间戳 // 参数 var tradeTypeA = "this_week"; // 套利A合约 var tradeTypeB = "quarter"; // 套利B合约 var dataLength = 10; //指标周期长度 var timeCycle = 1; // K线周期 var name = "ETC"; // 币种 var unit = 1; // 下单量 // 基础数据 function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约 this.accountData = _C(exchange.GetAccount); // 获取账户信息 this.positionData = _C(exchange.GetPosition); // 获取持仓信息 var recordsData = _C(exchange.GetRecords); //获取K线数据 exchange.SetContractType(tradeTypeA); // 订阅套利A合约 var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据 exchange.SetContractType(tradeTypeB); // 订阅套利B合约 var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据 this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间 this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价 this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价 this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价 this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价 // 正套价差(合约A卖一价 - 合约B买一价) this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price; // 反套价差(合约A买一价 - 合约B卖一价) this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price; } // 获取持仓 Data.prototype.mp = function (tradeType, type) { var positionData = this.positionData; // 获取持仓信息 for (var i = 0; i < positionData.length; i++) { if (positionData[i].ContractType == tradeType) { if (positionData[i].Type == type) { if (positionData[i].Amount > 0) { return positionData[i].Amount; } } } } return false; } // 合成新K线数据和boll指标数据 Data.prototype.boll = function (num, timeCycle) { var self = {}; // 临时对象 // 正套价差和反套价差中间值 self.Close = (this.basb + this.sabb) / 2; if (this.timeA == this.timeB) { self.Time = this.time; } // 对比两个深度数据时间戳 if (this.time - oldTime > timeCycle * 60000) { bars.push(self); oldTime = this.time; } // 根据指定时间周期,在K线数组里面传入价差数据对象 if (bars.length > num * 2) { bars.shift(); // 控制K线数组长度 } else { return; } var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标 return { up: boll[0][boll[0].length - 1], // boll指标上轨 middle: boll[1][boll[1].length - 1], // boll指标中轨 down: boll[2][boll[2].length - 1] // boll指标下轨 } // 返回一个处理好的boll指标数据 } // 下单 Data.prototype.trade = function (tradeType, type) { exchange.SetContractType(tradeType); // 下单前先重新订阅合约 var askPrice, bidPrice; if (tradeType == tradeTypeA) { // 如果是A合约下单 askPrice = this.askA; // 设置askPrice bidPrice = this.bidA; // 设置bidPrice } else if (tradeType == tradeTypeB) { // 如果是B合约下单 askPrice = this.askB; // 设置askPrice bidPrice = this.bidB; // 设置bidPrice } switch (type) { // 匹配下单模式 case "buy": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); case "sell": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closebuy": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closesell": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); default: return false; } } // 取消订单 Data.prototype.cancelOrders = function () { Sleep(500); // 撤单前先延时,因为有些交易所你懂的 var orders = _C(exchange.GetOrders); // 获取未成交订单数组 if (orders.length > 0) { // 如果有未成交的订单 for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组 exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单 Sleep(500); //延时0.5秒 } return false; // 如果取消了未成交的单子就返回false } return true; //如果没有未成交的订单就返回true } // 处理持有单个合约 Data.prototype.isEven = function () { var positionData = this.positionData; // 获取持仓信息 var type = null; // 转换持仓方向 // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2 if (positionData.length % 2 != 0 || positionData.length != 2) { for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组 if (positionData[i].Type == 0) { // 如果是多单 type = 10; // 设置下单参数 } else if (positionData[i].Type == 1) { // 如果是空单 type = -10; // 设置下单参数 } // 平掉所有仓位 this.trade(positionData[i].ContractType, type, positionData[i].Amount); } } } // 画图 Data.prototype.drawingChart = function (boll) { var nowTime = new Date().getTime(); ObjChart.add([0, [nowTime, boll.up]]); ObjChart.add([1, [nowTime, boll.middle]]); ObjChart.add([2, [nowTime, boll.down]]); ObjChart.add([3, [nowTime, this.basb]]); ObjChart.add([4, [nowTime, this.sabb]]); ObjChart.update(chart); } // 交易条件 function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据 if (!boll) return; // 如果没有boll数据就返回 // 价差说明 // basb = (合约A卖一价 - 合约B买一价) // sabb = (合约A买一价 - 合约B卖一价) if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨 if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "closebuy"); // 合约A平多 } if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "closesell"); // 合约B平空 } } else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨 if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "closesell"); // 合约A平空 } if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "closebuy"); // 合约B平多 } } if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额 if (data.basb < boll.down) { // 如果basb价差低于下轨 if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "buy"); // 合约A开多 } if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "sell"); // 合约B开空 } } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨 if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "sell"); // 合约A开空 } if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "buy"); // 合约B开多 } } } data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约 } //入口函数 function main() { // 过滤控制台中不是很重要的信息 SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP"); exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种 ObjChart.reset(); //程序启动前清空之前绘制的图表 LogProfitReset(); //程序启动前清空之前的状态栏信息 while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

El arbitraje de precios se originó a partir de la estrategia de negociación de acciones de Morgan Stanley. Su concepto es el siguiente: las fluctuaciones de la diferencia de precios de dos productos altamente correlacionados se ajustan al "proceso de las palomitas de maíz", es decir, la diferencia de precios vuelve constantemente a la media a partir de la posición que se desvía de la media histórica. , y luego otra desviación de la media.

A partir de esto, podemos obtener ganancias comprando barato y vendiendo caro en función de la diferencia de precios. Entonces, de acuerdo con el principio de desviación estándar en estadística, las bandas de Bollinger se componen de un carril intermedio y carriles superior e inferior calculados por la desviación estándar. Forma tres mallas. Es muy útil en operaciones de arbitraje de spreads.

Después de las pruebas, se encontró que si se sigue la estrategia, sin considerar los costos de manejo y los costos de impacto, aunque el beneficio cada vez no es muy alto, el beneficio general es relativamente estable. Cabe señalar que, dado que se trata de arbitraje estadístico, existe el riesgo de que la diferencia de precios se amplíe en la dirección opuesta, y debemos considerar el problema del stop loss al diseñarlo. En segundo lugar, también debemos prestar atención al costo del impacto. Cuando la liquidez de los dos contratos involucrados en la transacción disminuye, esto tendrá un impacto significativo en los retornos, y los inversores deberían evitarlo según corresponda.

4. Iteración avanzada del desarrollo de la estrategia de CTA

4.1 Cómo evitar los riesgos de las estrategias de CTA de futuros

En las últimas dos clases, escribimos una estrategia de tendencia en lenguaje Mai y una estrategia de arbitraje en JavaScript, y no encontramos ningún problema en el backtesting de la estrategia. Sin embargo, el trading cuantitativo no se trata solo de escribir un programa y luego negociarlo directamente una vez que la prueba retrospectiva es exitosa.
De hecho, el backtesting es simplemente una simulación de una estrategia, que solo se utiliza para evaluar el rendimiento de la estrategia en datos históricos, lo que permite a los traders evaluar y abandonar rápidamente algunas estrategias comerciales.

En muchos casos, las estrategias que parecen excelentes en las pruebas retrospectivas a menudo no cumplen con los estándares de las pruebas retrospectivas en el trading real. Hay muchas razones, algunas de las cuales están fuera del control del trader, pero algunas de las fallas se deben a errores comunes o potenciales. .

Datos estáticos vs. datos dinámicos
Cuando hacemos un análisis cuantitativo, primero debemos tener un concepto de datos estáticos y datos dinámicos. En el backtesting, utilizamos datos históricos estáticos. Los precios de cada línea K están completos y cada señal de trading puede venderse al 100 %. Pero los datos del mercado real son dinámicos. Por ejemplo, si el precio más alto es mayor que el precio más alto dentro de 1 hora después de la apertura, entonces compre. Sin embargo, si la línea K actual no se ha completado, entonces el precio más alto es dinámico y la señal comercial puede parpadear de un lado a otro. . Esta situación indica que la estrategia utiliza funciones futuras para determinar las condiciones de las transacciones de compra y venta.

Función futura
¿Qué es una función futura? Veamos primero cómo lo explica la Enciclopedia Baidu: si una cantidad depende de otra cantidad, como la cantidad A y la cantidad B, y un cambio en B causa un cambio en A, entonces A es una función de B. Si B es una función posterior, cantidad, A es Para una cantidad anterior, A cambia con B, y A es la función futura de B. Todo el mundo puede estar confundido.

En términos simples, es una función que hace referencia a datos futuros, como usar el precio de mañana para predecir el precio de mañana. Si un indicador técnico contiene una función futura, su señal es incierta. A menudo, se emite una señal comercial en el momento, pero cuando aparece la siguiente línea K, la señal desaparece o cambia de posición.

El precio de cierre es una función futura. Antes de que se complete la última línea K, el precio de cierre siempre cambia. Debe esperar hasta que se complete la línea K para determinar el precio de cierre. Dado que el precio de cierre en sí mismo es una función del futuro, todos los indicadores técnicos basados ​​en el precio de cierre también son funciones del futuro.

Por lo tanto, si un indicador técnico utiliza un precio de cierre confirmado como dato básico, y las señales de compra y venta no cambian sin importar cuánto tiempo haya pasado, se puede decir que este indicador técnico no hace referencia a una función futura. Sin embargo, los datos básicos que utiliza son el precio de cierre que aún no ha sido confirmado, por lo que este indicador técnico se refiere a la función futura y las señales de compra y venta pueden cambiar en aplicaciones reales.

Precios pasados
La función de futuro utiliza precios futuros, pero también puede utilizar precios pasados. Este es un problema que muchos novatos tienden a pasar por alto. Para ilustrar mejor este problema en el futuro, tomemos un ejemplo: si el precio más alto actual es mayor que el precio más alto dentro de 1 hora después de la apertura, compre al precio de apertura. Obviamente, no hay nada malo con las condiciones de esta señal de compra y venta, pero el precio utilizado para colocar la orden es el precio pasado.

En el backtest, la estrategia es normal, porque el motor de backtest basado en datos estáticos puede completar la transacción el 100% de las veces siempre que haya una señal de compra. Sin embargo, en el mercado real, cuando el precio más alto es mayor que el precio más alto, precio más alto dentro de 1 hora después de la apertura. En este momento, ciertamente ya no puede usar el precio de apertura anterior para realizar pedidos.

Vacío de precios
El llamado vacío de precios se refiere al precio que se muestra en el gráfico de la línea K, pero que no se puede negociar en el mercado real. Se divide principalmente en las siguientes situaciones:

  1. Cualquiera que haya operado sabe que es difícil comprar cuando el precio alcanza su límite superior, y es difícil vender cuando el precio alcanza su límite inferior. Sin embargo, es posible operar en el backtest.
  2. El mecanismo de emparejamiento del intercambio es: prioridad de precio y prioridad de tiempo. Algunos productos suelen tener una gran cantidad de pedidos. Si realiza un pedido de compra o venta en tiempo real, debe esperar detrás de los pedidos de otras personas y esperar hasta que se ejecuten los pedidos de otras personas antes de poder completar la transacción. En algunos casos, el El precio puede haber cambiado antes de que pueda completar la transacción. Sin embargo, durante el backtesting, si su estrategia es colocar órdenes, entonces la transacción se completará de manera oportuna, lo que es diferente del entorno comercial real.
  3. Si estás usando una estrategia de arbitraje, entonces la ganancia del backtesting es muy alta, porque cada vez que haces un backtesting, asumes que has capturado estas diferencias de precios. En realidad, muchos spreads no están disponibles o solo hay una pata disponible. En términos generales, la que no sea favorable para su dirección se negociará primero, por lo que debe completar la otra pata inmediatamente. En este momento, el deslizamiento ha Ya ocurrió. No se trata de 1 o 2 puntos, sino que la propia estrategia de arbitraje gana dinero con la diferencia de precio de estos puntos. Esta situación no se puede simular en el backtesting. El beneficio real no es tan bueno como el del backtest.
  4. Aunque los eventos de cisne negro no son comunes, aún tienen un gran impacto en el trading cuantitativo. Por ejemplo, en el evento de cisne negro del franco suizo, el gráfico muestra que hay aperturas altas y cierres bajos. De hecho, en el extremo Condiciones del mercado del día, el precio en el medio es un vacío, una gran cantidad de órdenes de stop loss provocan estampidas, la liquidez es cero y las transacciones son muy difíciles, pero se pueden lograr stop loss en backtesting.
    img

Sobreajuste
El sobreajuste es un error común que cometen los principiantes en el trading cuantitativo. ¿Qué es el sobreajuste? Tomemos un ejemplo sencillo: cuando hacen exámenes en la escuela, algunas personas usan la táctica de hacer muchas preguntas y memorizarlas todas. Si durante el examen las preguntas se modifican ligeramente, no podrá responderlas. Porque memorizó el planteamiento de cada pregunta de una forma muy complicada, pero no abstrajo las reglas generales.
img

Como se muestra en la imagen de arriba, siempre que un modelo sea lo suficientemente complejo, puede adaptarse perfectamente a los datos. Lo mismo ocurre con el sobreajuste en el trading cuantitativo. Si su estrategia es compleja y tiene muchos parámetros externos, entonces en el backtest de datos históricos limitados, siempre habrá uno o varios parámetros que puedan ajustarse perfectamente a la estrategia. De acuerdo con las condiciones históricas del mercado .

Sin embargo, en el futuro, los cambios de precios pueden superar las limitaciones de su estrategia. De hecho, la esencia del desarrollo de una estrategia de trading cuantitativo es el proceso de hacer coincidir datos locales no aleatorios a partir de una gran cantidad de datos aparentemente aleatorios. Por lo tanto, Necesitamos utilizar estadísticas. ¿Cómo podemos utilizar el conocimiento para evitar esta trampa?

Una solución de compromiso es utilizar datos tanto de la muestra como de fuera de ella. Divida todos los datos en dos partes, utilice los datos de la muestra como conjunto de entrenamiento y sea responsable de las pruebas retrospectivas de los datos. Los datos fuera de la muestra se utilizan como conjunto de prueba para la verificación. Si hay pocos datos históricos, también puede utilizar el método de prueba cruzada.

Si descubre que los datos fuera de la muestra no funcionan bien, pero cree que es una pena descartar el modelo o no está dispuesto a admitir que su modelo no es bueno y continúa optimizándolo -datos fuera de la muestra hasta que funcione igual de bien en los datos fuera de la muestra, entonces el que salga perjudicado al final es Debe ser su dinero real.

Sesgo de supervivencia
El sesgo de supervivencia se puede explicar con los siguientes ejemplos:

  1. Si te sitúas en el lugar adecuado, incluso los cerdos pueden volar.
  2. Todas las reseñas de los paracaídas vendidos online son positivas, porque no hay personas que tengan problemas con sus paracaídas.
  3. Los periodistas entrevistaron a las personas en el autobús para ver si habían comprado billetes, porque los que no podían comprarlos no podían subir al autobús.
  4. Los medios de comunicación promueven la posibilidad de ganar la lotería, porque los medios de comunicación no promoverán activamente a las personas que no han ganado la lotería.

De los ejemplos anteriores se desprende que la información que la gente suele recibir ha sido en realidad filtrada, lo que hace que se ignoren selectivamente una gran cantidad de datos o muestras. El resultado es que las conclusiones basadas en el sesgo de supervivencia se han desviado del tiempo real. Luego, en el trading cuantitativo, también debemos considerar si el resultado del backtest se debe a la suerte. En muchos casos, el resultado del backtest puede ser el mejor desempeño de todo el backtest. Preste atención a la siguiente imagen:
img

La imagen de la izquierda muestra una estrategia de trading muy buena. Tiene una buena curva de capital, no presenta grandes pérdidas y permite obtener ganancias estables. Pero, por favor, mire la imagen de la derecha: es simplemente la que tiene el mejor rendimiento entre estos cientos de backtests comerciales. Por otro lado, cuando observamos el mercado financiero, siempre hay más estrellas que longevas. Si la estrategia del trader está en línea con las condiciones del mercado, entonces las condiciones del mercado de cada año pueden crear un grupo de estrellas, pero Es raro ver una estrella que pueda vivir más de tres años consecutivos. Un cumpleañero con ganancias estables.

Impacto en los costos
A menos que esté colocando una orden pendiente, puede experimentar una caída de precios al operar. En el caso de productos que se comercializan activamente, el precio de oferta y el precio de venta suelen tener una diferencia de un punto. En el caso de productos que se comercializan con menor actividad, el diferencial puede ser mayor. Cada vez que quieras operar activamente, necesitarás al menos un spread, o incluso más. Sin embargo, en el backtesting no es necesario considerar el problema de la transacción. Mientras exista una señal, la transacción puede completarse. Por lo tanto, para simular el entorno comercial real, se debe agregar al menos un deslizamiento.

Especialmente en el caso de estrategias con una frecuencia de negociación relativamente alta, al realizar pruebas retrospectivas de la estrategia, si no se incluye el deslizamiento, la curva de capital siempre estará inclinada hacia arriba. Una vez que se agrega un deslizamiento razonable, se convertirá inmediatamente en una pérdida. Además, este fenómeno no se debe únicamente al problema de la propagación. En un entorno comercial real, también deben tenerse en cuenta cuestiones como el retraso de la red, los sistemas de software y hardware y la respuesta del servidor.

Capacidad política
La misma estrategia puede tener efectos muy diferentes, o incluso completamente opuestos, en mercados eficientes e ineficientes. Por ejemplo, en mercados ineficientes como el mercado de valores nacional, los futuros de materias primas y las monedas digitales extranjeras, la capacidad de las estrategias de alta frecuencia en sí mismas no es muy grande debido a la pequeña base de volumen de operaciones. Si más personas las usan, habrá No habrá margen de beneficio, e incluso las estrategias originales de alta frecuencia no serán rentables. Una estrategia rentable se convierte en una estrategia deficitaria. Pero en un mercado cambiario eficiente, hay lugar para muchos tipos diferentes de estrategias de alta frecuencia.

Los problemas y dificultades que pueden surgir durante el desarrollo y uso de una estrategia son los mencionados anteriormente. Para un desarrollador de sistemas de trading experimentado, el backtesting es una necesidad. Porque puede indicarle si una idea de estrategia puede verificarse como efectiva en transacciones históricas. Pero muchas veces el backtesting no significa rentabilidad futura. Debido a que existen muchos obstáculos en el backtesting, no lo entenderás a menos que gastes dinero para aprender algunas lecciones. Y estas lecciones se aprenden con dinero real. Este curso al menos puede ayudarle a evitar muchos desvíos y trampas cuantitativas.

4.2 Establecer una gestión óptima de la posición

En Reminiscencias de un Operador de Bolsa, hay un episodio interesante: Old Turkey (originalmente llamado Partridge), que trabajaba en la misma compañía de valores que el protagonista Livermore, siempre hacía grandes compras y ventas. Siempre que alguien le sugería que lo vendiera después obtener ganancias y luego volver a comprarlas cuando el precio de las acciones baje. El viejo pavo siempre dice con seriedad: ¡No, ya sabes, este es un mercado alcista!

Incluso Livermore finalmente suspiró: no hay nada de bueno en predecir la tendencia correctamente. En el mercado, siempre se pueden encontrar muchas personas que han sido optimistas en un mercado alcista y pesimistas en un mercado bajista. Pero siempre son buenos negociando con el mercado, tratando de comprar en el punto más bajo y vender en el punto más alto. Al igual que el viejo pavo, quienes realmente ganan mucho dinero son aquellos que ven el mercado correctamente y mantienen sus posiciones firmemente. Esto también es lo más difícil de aprender. Esto no sólo implica seleccionar objetivos y tiempos, sino también una pregunta más importante: ¿qué tan grande es la posición (riesgo) que se debe mantener (tomar)?

Los traders que fracasan tienen un pensamiento unilateral. Cuando operan, las personas codiciosas solo miran los beneficios y no los riesgos, mientras que las personas tímidas solo miran los riesgos y no los beneficios. Aquellos que son a la vez codiciosos y tímidos se olvidan de los riesgos cuando los riesgos son demasiado altos. El mercado está subiendo. Olvídate de las ganancias cuando baja. Pero los traders exitosos considerarán tanto el riesgo como la recompensa, es decir, por cada dólar ganado, asumirán varios dólares de riesgo. Entonces el indicador para medir el rendimiento y el riesgo es la relación rendimiento-riesgo.

Mucha gente sabe que cuanto mayor es el beneficio, mayor es el riesgo, es decir, la rentabilidad es proporcional al riesgo. En opinión de algunas personas, la relación entre rentabilidad y riesgo debería ser la siguiente, con el eje horizontal representando el porcentaje de riesgo y el eje vertical representando el porcentaje de beneficio:
img

Sin embargo, en las transacciones reales, los rendimientos y los riesgos están lejos de ser tan simples como una línea recta entre dos puntos; al menos no siempre se mueven linealmente. El riesgo real es la pérdida máxima que puede sufrir con el rendimiento esperado, lo que llamamos volatilidad máxima. Aunque a veces la pérdida flotante máxima no es necesariamente igual a la pérdida de cierre de los resultados de la transacción, la pérdida flotante máxima es real.

De esto se desprende que la relación beneficio-riesgo de la figura anterior no es una representación verdadera. En un entorno de trading real, la relación beneficio-riesgo debería ser la que se muestra en la siguiente figura:
img

Observemos la imagen de arriba. La curva amarilla representa la fluctuación del valor neto bajo diferentes riesgos. A medida que el rendimiento esperado continúa aumentando, el riesgo también se expande gradualmente. Si fijamos la quiebra en 0,5, lo que significa que la pérdida máxima alcanza el 50%, entonces se trata de una estrategia comercial fallida. Aunque el retorno final de esta estrategia es positivo, en realidad ha quebrado a mitad de camino.

Incluso si su estrategia es una estrategia de expectativas positivas, aun así se arruinará debido a una gestión incorrecta de la posición. Desde esta perspectiva, es más importante cuánto comprar o vender que cuándo comprar o vender. Cómo gestionar las posiciones de forma científica se ha convertido en una cuestión fundamental en las transacciones financieras. Así que antes de intentar resolver este problema, veamos cómo realizar apuestas científicamente en el juego.
img

Tomemos como ejemplo el lanzamiento de una moneda. Suponiendo que las dos caras de una moneda tienen el mismo peso, si aparece el anverso, la ganancia es de 2 yuanes, y si aparece el reverso, la pérdida es de 1 yuan. Obviamente, esto es Un juego de expectativa positiva, con una tasa de ganancias del 50% y una pérdida de 2 yuanes. Aquí viene la pregunta: ahora tienes 100 yuanes, ¿cómo puedes realizar apuestas repetidamente para que los 100 yuanes lleguen a 1 millón de yuanes lo más rápido posible?

Si no lo pensamos bien, pensaremos que como el beneficio de cada apuesta es del 50%,*2-50%*1, es decir, el 50 %. Para obtener rápidamente el máximo beneficio, debes invertir la mayor cantidad de capital posible en cada apuesta. La apuesta debe ser del 100 %.

Pero obviamente no es razonable invertir el 100% del capital en cada juego de apuestas, porque si pierdes solo una vez, el capital desaparecerá, incluso si la posibilidad es muy pequeña. Porque mientras juegues suficientes veces, perderás dinero seguramente sucederá.

Alguien podría preguntar, dado que una apuesta del 100% no es razonable, ¿qué pasa con una apuesta del 90% o menos? De hecho, para resolver este problema, podemos hacer un experimento para simular este juego de apuestas y ver cuáles son los resultados de cada apuesta. Como se muestra en la siguiente imagen:

img

De la figura se desprende que cuando reducimos gradualmente la posición del 90%, 80%, 70%, 60% y 50%, los resultados de la misma apuesta son completamente diferentes. Los amigos cuidadosos tal vez ya se hayan dado cuenta de que A medida que la posición se reduce gradualmente, los fondos finales en realidad aumentan gradualmente.

Alguien podría preguntarse si es mejor apostar cada vez cantidades más pequeñas, como un 10 %. No se puede calcular cada proporción de apuestas, ¿verdad? Este es el problema que la famosa fórmula de Kelly está diseñada para resolver. En estadística, la fórmula de Kelly puede maximizar la tasa de crecimiento a largo plazo de una estrategia con apuestas repetidas esperadas positivas calculando la relación de apuestas óptima en cada apuesta.

No sólo eso, asumiendo que el capital y la apuesta pueden dividirse infinitamente, usar la fórmula de Kelly hará imposible ir a la quiebra en cualquier apuesta. Especialmente en la aplicación real de las transacciones financieras, se trata de una estrategia de gestión de posiciones que combina tanto la ofensiva como la defensa. Veamos cómo se calcula la fórmula de Kelly, mira la siguiente imagen:

img

  • f es la tasa de apuestas óptima del capital existente
  • b son las probabilidades, que también pueden denominarse relación de ganancias y pérdidas en el trading.
  • p es la tasa de éxito
  • q es la tasa de fallos

Luego podemos usar la fórmula de Kelly para calcular el ejemplo de juego de azar en esta clase. Con un capital inicial de 100 yuanes, si la tasa de ganancia es del 50% y las probabilidades son 2, ¿qué proporción de apuestas se debe usar para aprovechar al máximo el capital? ¿Es rentable? La velocidad más rápida alcanza el millón de yuanes. Usando la fórmula de Kelly, el proceso de cálculo es:

(0.5*(2+1) -1)/2=0.25

Una tasa de ganancia del 50% es 0,5, multiplicado por las probabilidades 2 más 1, luego restado 1 y finalmente dividido por 2. El resultado es 0,25, lo que significa que en cada apuesta se utiliza el 25% del capital para apostar. Puede alcanzar 1 millón de yuanes a la velocidad más rápida. Podemos simularlo manualmente en función de los resultados del cálculo para ver si es correcto.

img

La imagen de arriba es el resultado de una simulación manual. Observe la última línea. Para la misma apuesta, después de más de 100 rondas, el 25 % de las posiciones alcanzaron primero el millón de yuanes. Los resultados del 90%, 80%, 70% y 60% de las posiciones son negativos, lo que demuestra plenamente que incluso una estrategia comercial con una expectativa positiva fracasará debido a una gestión incorrecta de las posiciones.

También podemos ver que el 50% de las posiciones no perderán ni ganarán al final, lo que también está en línea con el resultado de la ley de los grandes números. Para ilustrar mejor el problema, también se agregó una posición del 10% durante la simulación manual. Aunque el resultado final fue un rendimiento positivo, el efecto fue varios órdenes de magnitud peor que el de la posición del 25%.

Has visto el poder de la fórmula de Kelly. Si eliges una posición de capital del 10 % en la aplicación real, entonces en más de 100 apuestas, tu capital será de más de 30 000. Aunque la ganancia es enorme, sin embargo, en comparación con el resultado de una posición principal del 25% equivale a no ganar dinero. Éste es el poder del conocimiento.

Si quieres utilizar la fórmula de Kelly para ganar dinero en la vida, debes cumplir con las condiciones de aplicación de la fórmula de Kelly. No hay duda de que esta apuesta debe provenir del mercado financiero. Especialmente en el trading cuantitativo, mediante pruebas retrospectivas de datos históricos, se pueden calcular de forma aproximada la tasa de ganancias y las probabilidades correspondientes.

Por supuesto, la aplicación real de la fórmula de Kelly en las transacciones financieras no es tan sencilla. Aún quedan muchos detalles por resolver, como el coste de los fondos en las transacciones apalancadas, la imposibilidad de separar los fondos y las posiciones en las transacciones reales y La diferencia entre la tasa de ganancia y la posición en las transacciones. Las probabilidades cambian dinámicamente, etc. Pero sea como sea, la fórmula de Kelly nos muestra cómo establecer el mejor método de gestión de posiciones.

Related Recommendations
Comment
All comments (3)

    学习学习

    4 years ago

    学习

    5 years ago

    学习

    6 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)