Acceder

Algoritmo funcional basado en datos COT

10 respuestas
Algoritmo funcional basado en datos COT
1 suscriptores
Algoritmo funcional basado en datos COT
#1

Algoritmo funcional basado en datos COT

Hola, hoy quiero presentaros mi algoritmo basado en datos COT.

¿Que son los datos COT? Actualmente todos los actores del mercado dejan reflejado en el mercado sus posiciones abiertas, y todos los martes deben rendir cuentas sobre dichas posiciones. Estos informes se pueden descargar de https://www.cftc.gov/MarketReports/CommitmentsofTraders/index.htm y se publican todos los viernes a última hora del día.

¿Por qué programar un algoritmo basado en datos de posiciones de otros actores?
En el pasado he desarrollado diversos algoritmos basados patrones de precio, patrones de volumen, análisis fundamental, etc. y al final llegas a la conclusión que estudiando el comportamiento del pasado puedes programar un conjunto de reglas que descifrando los datos del pasado puedas obtener rendimientos. Un patrón es un comportamiento que se repite cada cierto tiempo y permite estudiar la probabilidad de éxito en el pasado. ¿pero qué pasa con el futuro? ¿se comporta de la misma manera?

Depende del fundamento de tu algoritmo el resultado será robusto o no en el futuro. Por ejemplo: un algoritmo basado en el movimiento del precio pretende estudiar patrones o figuras de sus movimientos en el pasado. Se pueden buscar comportamientos de velas japonesas, estudiar la rapidez de estos movimientos, el número de velas consecutivas creciendo o decreciendo, figuras charsistas, etc. pero al final y al cabo son movimientos del precio, y el precio es lo último en moverse. Antes de que el precio se mueva pasan cosas muy interesantes, como por ejemplo se podría estudiar la oferta y demanda del mercado, la volatilidad implícita de las opciones del subyacente, etc.

El fundamento de un algoritmo que estudia los datos COT se basa en la cantidad de posiciones que los distintos actores del mercado tienen actualmente, creo que hay pocas cosas que influyan más que esto. Si un institucional no para de comprar contratos ampliando su Open Interest podría estar interesado en comprar más contratos y eso hace que el precio suba, pero que suba no implica que vaya a subir más, sólo dependerá de si compran más o no, y sobretodo de quién lo compra.
Por ejemplo, a veces el precio sube y las grandes cuentas están saliendo del mercado, claro que puede seguir subiendo pero lo lógico sería salir del activo. Digamos que el precio siempre puede hacer lo que quiera, y a veces, hace cosas ilógicas, pero al fin y al cabo el precio manda y debemos tener en cuenta que a veces podemos tener desviaciones en las previsiones, lo importante es saber interpretar lo que está ocurriendo.

Una vez explicado el motivo de por qué elegir este tipo de análisis hay que dar un paso más. Ahora nos debemos centrar en el comportamiento del dinero y no del precio, el precio sólo nos dirá lo que hemos ganado o perdido, pero nada más. ¿Qué actores influyen en un activo? Cuando se realiza una operación es porque alguien está comprando y alguien está vendiendo, pero cómo saber quién compra o quién vende. En los ficheros COT descargados nos podemos encontrar con:

Los Dealer: son conocidos como proporcionadores de liquidez. Normalmente ellos toman las posiciones contrarias al resto con el único objetivo de proporcionar liquidez, ellos juegan con instrumentos estructurados, opciones, futuros, etc. Éstos no suelen mover el mercado.
Comerciales: el objetivo mayoritario de este grupo es cubrirse ante movimientos adversos del precio con respecto al subyacente. Por ejemplo, un productor de oro se puede cubrir con futuros con la única intención de que si el precio se mueve en contra poder vender el oro al precio actual en el futuro. No cuentan con ganar en los mercados financieros, básicamente lo usan como seguro.
Institucionales: son los grandes especuladores, y los que tienen la capacidad para mover el mercado.
Otros especuladores obligados a declarar: son especuladores, normalmente con menos capital que los institucionales, y van siguiendo el precio del mercado.
No obligados a declarar: son el resto de los mortales, con poco capital. Especuladores sin poder alguno en los mercados, y muchas veces desinformados.

Basándose en estas premisas la gran pregunta es si podremos encontrar un algoritmo capaz de estudiar el comportamiento de estos actores para predecir el precio.

Para las pruebas debemos tener claro que un algoritmo basado en el dinero debería de funcionar en la mayoría de los activos, ya que no se está estudiando un activo en concreto, y no se buscan patrones del precio ni de volumen en el pasado. Se pretende estudiar el comportamiento de estos actores y cómo ha influido en el precio futuro, una vez ellos han tomado sus posiciones.

Lo primero es descargar los datos históricos de los datos COT, que se encuentran en el enlace indicado arriba. Lo segundo es descargar los precios históricos de varios activos. Lo tercero es intentar buscar patrones de comportamiento de las posiciones con respecto al precio, para esto ayudaría tener una representación visual de los precios y datos COT, porque de otra manera podría ser muy difícil.
Lo deseado sería obtener una herramienta para evaluar dichos comportamientos simulando aperturas y cierres de operación. Además esta ayudaría una herramienta para la búsqueda de patrones del dinero.

Una vez encontramos un algoritmo que parezca funcionar, habría que evaluar sus puntos fuertes y débiles. Para evaluar si un algoritmo es de calidad hay que tener varios conceptos claros:

- Beneficio Neto: beneficio neto en la moneda base.
- DrawDown: máxima pérdida consecutiva.
- Recovery Factor: beneficio entre máxima pérdida consecutiva.
- Porcentaje de operaciones ganadoras: importante tener un algoritmo con más operaciones ganadoras que perdedoras. Hay algoritmos que tienen más operaciones perdedoras, pero en las que se gana lo hace con mucha más ganancia, pero personalmente a mi no me gusta pues, hay que tener en cuenta que para la obtención de un algoritmo se suele estudiar, optimizar, etc. y si aun así no se consigue un buen porcentaje puede que en la realidad nos encontremos con una racha de operaciones perdedoras que se inaguantable.
- Número de operaciones: está claro que cuantas más operaciones más preciso será el estudio, pero hay que tener en cuenta que en este caso sale un dato cada semana, si tenemos en cuenta que hay 52 semanas al año, haciendo una simulación de 10 años tendremos únicamente sobre los 500 datos a estudiar sobre un mismo activo. Por lo que tendrá menos ocasiones de realizar operaciones si lo comparamos con un algoritmo que evalúe 10 horas a velas de minuto: 60 minutos por 10H = 600 velas de minuto
- Ganancia potencial: máxima ganancia posible desde que se abrió la operación hasta que se cerró. No es la ganancia realizada, es la mejor ganancia en el caso que se hubiera cerrado en el momento más óptimo.
- Exposición al mercado: tiempo que tienes posiciones en el mercado.
Y más indicadores...

Voy a dejar un ejemplo de simulación de algoritmos sobre el Crudo.
El periodo simulado son 10 años y se combinan 5 algoritmos distintos sobre el mismo activo al mismo tiempo. Cada algoritmo podrá abrir como máximo 1 futuro, es decir, 1000 barriles de crudo. Es difícil que varios algoritmos abran al mismo tiempo, pero se puede dar el caso por lo que hay que contar con el capital suficiente.




En la gráfica se puede apreciar que el beneficio es de 282.776 $ en los 10 años. Quitando la mejor operación de cada algoritmo el beneficio se quedaría en 249.840 $.
La máxima pérdida es de 17.370 $
160 operaciones de las cuales 124 son ganadoras y 36 son perdedoras.
Duración media de cada operación: 1.34 semanas (no llega a semana y media)

¿Qué se necesita para llevar a cabo esta inversión? A pesar de tener una máxima pérdida de 17.370$, yo no empezaría con un capital inferior a 25.000$. Además contaría con el beneficio estimado, es decir, sobre los 250.000$ a los 10 años. Por lo que de media salen un 100% de beneficio estimado.
Parece una brutalidad pensar que un algoritmo puede dar estos rendimientos, pero debemos tener en cuenta que podemos tener un periodo de 1 año prácticamente sin ganar y no todo el mundo está dispuesto a estar pendiente todas las semanas de los datos para no tener un rendimiento en el corto plazo.

¿Seríais capaces de aguantar la ejecución de un algoritmo de estas características?

Saludos
#2

Re: Algoritmo funcional basado en datos COT

Buenas acoydan,

Me parece super interesante este hilo, me gusta la idea de buscar metodos alternativos, y en este caso basarlo en datos de las operaciones abiertas.

En principio la unica pega que le veo es que me parece una muestra de datos pequeña, seguramente los datos COT tengan un comportamiento distinto a los precios de cierre semanal, pero personalmente me gusta trabajar con datos historicos de varios miles de registros.

Influyen tantisimas variables en el modelo, que es facil que se produzca "sobre-ajuste" (creo que se conoce asi), y mas si se analizan un monton de patrones con un mismo reducido conjunto de datos.

No seria raro encontrar un patron que se sale de la tabla en un backtest de 10 años (o en menos tiempo pero con mas datos), y el año numero 11 en real no da una, ni el 12 ni el 13...

A mi en concreto me sucede, y me parece uno de los mayores retos, por eso me fuerzo a trabajar con muchos registros.
Cuantos mas registros, mas dificil es caer en el sobre-ajuste. Un algoritmo que funcionase bien digamos con los 100 ultimos años del sp500 en diario, tendria muchas posibilidades de seguir haciendolo bien.

En cualquier caso, no significa que este sea tu caso, no conozco las tecnicas que has usado para ese algoritmo, ni he trabajado con datos COT, solamente hablo desde mi propia experiencia.

Te animo a que sigas adelante con el hilo, yo por aqui estare a ver si me viene por fin algo de inspiracion.

Saludos.



#3

Re: Algoritmo funcional basado en datos COT

Buenos días 
Súper interesante tu explicación, como me gustaría tener a mi lado alguien como tú para que desde otro punto de vista al mío , poder hacer trading 
Un saludo 

Dá tu opinión ,y deja que los demás den la suya .Gracias muy amable

#4

Re: Algoritmo funcional basado en datos COT

Así es Paiton, el principal inconveniente es el número de operaciones, pero no se pueden descargar más datos, o por lo menos eso creo.
A mí también me ha pasado sobre optimizar un algoritmo y luego en la realidad no se comporta igual que en el tiempo simulado, por eso es muy importante preguntarte si el fundamento del algoritmo es el correcto: ¿el movimiento del precio en el pasado tiene fundamento? ¿el volumen del pasado tiene fundamento?

He leído que el volumen puede ser manipulado por los algoritmos de Alta Frecuencia, contratos que se supone que han cambiado de mano, pero en la realidad no es así. No sé lo cierto de esto, pero la realidad es que estos informes reflejan la realidad de los contratos en ese momento.

Lo más interesante es coger estos algoritmos y procesarlos en otro activo. Por ejemplo, en mi simulación con el oro puedo usar 3 de los 5 algoritmos obteniendo buenísimos resultados, por lo que se podría decir que 3 de estos 5 algoritmos podrían evaluarse de manera más genérica, con más operaciones. Por lo que aumentaría la esperanza en el futuro de resultados similares.

Saludos
#5

Re: Algoritmo funcional basado en datos COT

Siempre pasa lo mismo, gratuito solamente encontramos las migajas... y para nuestros analisis no compensa soltar las fortunas que piden a cambio de detallados historicos.
Ya te digo que nunca he tratado con datos COT, pero creo que comprendo tu punto de vista y que pudieran tener un valor añadido respecto al dato del precio en si.
Entiendo que por tus analisis has visto una diferencia a favor de estos frente a datos de cierre semanales.
Se me ocurren 2 razones:
-Realmente son una buena prevision (tipo inteligencia de enjambre)
-Son las propias previsiones las que hacen que el precio se mueva en esa direccion.

Respecto a si precio o volumenes pasados tienen fundamento para hacer previsiones, pues yo estoy convencido de que si, pero con matices claro.
Lo que veo muy complicado es diseñar un algoritmo que funcione bien con distintos activos de manera sostenida.
Tampoco soy ningun experto, he leido tu blog y veo que te lo has montado todo en VB desde cero, yo ando muy lejos aun.. trabajo con python de manera muy rudimentaria, y tengo el nivel justo para desarrollar mis ideas.
Asi que mis algoritmos son extremadamente sencillos.

Hasta ahora he podido comprobar que donde mejor funcionan es con el sp500, con bonos americanos, con el indice dolar, y con alguna materia prima.
Al principio pensaba que era debido a sus extensos datos historicos (>40 años), permitiendo que el algoritmo absorbiese mas matices.
Mi interpretacion ahora es que la solidez del algoritmo depende de la solidez del activo.
El algoritmo que mejor me funciona, lo hace en el sp500, y no es porque yo sea ningun crack, sino porque los datos historicos del sp500 son mucho mas "limpios" que los de cualquier otro indice. La fortaleza de su economia y su influencia internacional hacen que le afecten menos factores que a otros.

Con esto a lo que voy es que si pruebo este mismo algoritmo (aun afinado con datos del indice a analizar) por ejemplo con el ibex, o yendo al extremo, con un chicharro rabioso, voy a obtener unos resultados espantosos. Los datos historicos de estos activos, ademas de reducidos, estan llenos de puro ruido, dependen de mil factores, y ademas de lo que haga el sp500.

Ahora en lo que ando es intentando incorporar distintos algoritmos o indicadores a un unico modelo, que analiza basicamente el sp500, los bonos, el indice dolar, el wti y el oro. Aun estoy en ello claro, y esta todo en pañales.

De todas formas creo que tu te mueves en plazos mas cortos, y es probable que todo sea muy distinto, tal vez lidiar con el ruido te lleve a diseñar algoritmos todo-terreno.

Saludos.





#6

Re: Algoritmo funcional basado en datos COT

Si me permites una recomendación, cualquier algoritmo basado en el precio de un activo debería tener en cuenta la divisa en la que se mueve con respecto a otras. Operando el sp500 podrías evaluar lo que está haciendo el DOLAR frente al EURO o al YEN. Puede parecer una tontería, pero por ejemplo, el ORO suele crecer más rápido cuando el YEN baja frente al DOLAR, y por ejemplo el CRUDO está más suelto cuando el EURO crece frente al DOLAR.
No he estudiado el SP500, pero evaluando divisas podrías invalidar operaciones que hubieras entrado de no tener en cuenta las divisas. Por lo menos merecería la pena que lo evaluaras a ver si hay algún tipo de relación. Al igual que si tienes en cuenta la volatilidad implícita de las opciones del mismo SP500, estas a veces revelan movimientos amplios que están por venir.

Saludos
#7

Re: Algoritmo funcional basado en datos COT

Si, mas o menos es esa la idea, relaciono varios activos a la hora de generar el patron.
Por ej. si ayer el sp500 subio, el dolar bajo, el oro bajo y etc, el patron generado seria algo asi como "sp_up, dollar_down, gold_down...".
Esto simplificando, ya que ademas incorpora la variacion porcentual (fraccionada y normalizada), y ademas se generan patrones diarios, semanales, mensuales...

Despues a la hora de analizar los patrones, en cada caso se analiza cuantas veces a subido y bajado, su variacion media.... mirando logicamente hacia delante y en sus distintos timeframes (diario, semanal...).

Para terminar filtro los patrones que se desmarcan, aunque cuando hay pocos casos de un patron, es posible que este sesgado, asi que tambien los marco como poco confiables.

Se que hay metodos mucho mas sofisticados, e incluso este tipo de analisis ya se deberian hacer con herramientas de machine learning, pero todo esto se me hace demasiado complicado para mi nivel.

Seria bueno que desarrollases un poco por encima que tecnicas utilizas para diseñar y detectar patrones.

Saludos.


#8

Re: Algoritmo funcional basado en datos COT

En mi caso para desarrollar patrones uso concatenación de variables. Imagina que tengo 20 variables, la combinación de todas ellas en todos sus valores sería imposible de testar.

Empiezo con una visualización de las variables combinadas con respecto al precio, imagina que aprecio que cuando los Institucionales aumentan las posiciones largas netas junto con el aumento de su Open Interest normalmente el precio sube. Por lo que ya tengo un punto de partida: dos variables (aumento de posiciones Netas y aumento de Open Interest)

Esto es muy genérico pues no siempre que sus posiciones largas aumentan sube el precio, por lo que ahora tengo que descartar operaciones malas.
Ahora toca combinar estas dos variables con el resto, en mi caso, me interesa la variación de posiciones, me da igual que tengan 2000 posiciones netas largas, que 5000, ya que lo interesante es que aumentan o disminuyen semana tras semana. En los datos COT se pueden diferenciar OPCIONES de FUTUROS, por lo que hay que discriminar posiciones de un tipo y de otro, y a nivel global (la suma de las dos).

Una vez evaluadas con el incremento o decremento con respecto al resto de variables, escojo la mejor combinación, y ya tendría 3 variables establecidas.

Para saber si una combinación es buena, no se escoge la que tenga mejor beneficio neto, sino que establezco una especie de NOTA de clasificación. Esto es configurable: imagina que busco algoritmos conservadores con poco drawdown, pues el recovery factor tendrá bastante fuerza para calcular la NOTA. Imagina que descarto algoritmos con rachas largas de operaciones perdedoras, pues al porcentaje de operaciones ganadoras le doy fuerza también. Si también quiero que sea estable, habría que evaluar la pendiente de beneficios, es decir, que sea constante en el tiempo y no me coja configuraciones que estén 9 años en tablas y en un año lo gane todo..... pues así con todos los indicadores de calidad que deseo (incluso el número de operaciones mínimas, etc).

Establecido el sistema de NOTAS tengo la evaluación de todas las configuraciones simuladas. Para encontrar la configuración de variables deseada, basta con ir añadiendo variables nuevas a la configuración simulada. Esto yo lo he automatizado para que me lo busque sólo, porque hacerlo manualmente podría ser un poco tedioso.

Si nos quedamos aquí podemos caer en la trampa de tener una configuración muy optimizada y que no se corresponde con los resultados futuros. Hay que destacar que lo que se intenta es valorar el poder del dinero para predecir el precio, por lo que el dinero es el mismo en un activo que en otro. Con esto me refiero a que pudiera ser que en un activo los INSTITUCIONALES pueden ser más fuertes y en otro activo puede que sean los COMERCIALES, u otro grupo. Por lo que la cosa es más compleja, una variable podría ser la suma de posiciones netas de INSTITUCIONALES + COMERCIALES, esto es un ejemplo (no tiene por qué ser así).
Llegados hasta aquí, queda evaluar esta configuración con otros activos, y si el resultado es bueno, tendríamos una configuración válida.

Puede que tú hayas optimizado la configuración para 5 años del ORO, pero si es capaz de ser un buen algoritmo para 10 años del ORO, para 10 años del crudo y 10 años de la PLATA (por poner un ejemplo). Tenemos que con 5 años de optimización estás evaluando 30 años del comportamiento del dinero. Si se comporta de la misma manera o parecida, es perfecto. La originalidad en las variables es lo que aporta un valor añadido, como lo que dije en otro comentario, puedes evaluar lo que está haciendo el dinero en este activo, pero también puedes estudiar como se mueve el dinero en otros activos: OPCIONES, DIVISAS, etc

Lo que me gustaría hacer es que cuando evalúo todas las variables para añadir otra nueva a la configuración, el sistema de evaluación me cogiera las X mejores variables, y no sólo la mejor encontrada, añadiendo a las X configuraciones a una cola para añadir otras Z variables más. Esto me abriría el abanico de posibilidades a configuraciones nuevas. Pero tengo que sacar algo de tiempo para eso.

Lo que hay que tener claro es que se busca comportamiento del dinero, por lo que si yo obtengo una configuración optimizada en datos de 40 años, está claro en esos 40 años la cosa irá bien, pero el CRACK del 29 es anterior a esos 40 años, ¿qué hubiera pasado en ese caso? por lo que no podemos quedarnos ahí. Tenemos que encontrar una configuración en un periodo relativamente corto y luego evaluar un rango de datos mayor que no está en el estudio de optimización, aunque tengas que irte a otros activos a evaluar.

No se me ha ocurrido otra forma de buscar patrones, espero que si alguien tiene otra forma de hacerlo nos cuente algo más y podamos seguir aprendiendo todos.

saludos
#9

Re: Algoritmo funcional basado en datos COT

Que bueno, me alegra ver que utilizamos tecnicas similares (concatenacion), aunque obviamente las tuyas son mas complejas.
Es una pena que la gente no acostumbre a compartir este tipo de ideas.
Tambien es cierto que Rankia esta mas orientada a las plataformas tradicionales, yo muchas veces he echado de menos un formulario de entrada de codigo, pero entiendo que para eso estan webs tipo stackoverflow...
No obstante tampoco por esos lares la gente se estira a publicar mucho mas de lo que todos sabemos.

Gracias por tu claridad.

Saludos.




#10

Re: Algoritmo funcional basado en datos COT

No te entiendo con un formulario de entrada de código, no sé si te refieres a esto:


Lo tengo preparado para que no sea necesario programar para configurar un algoritmo. Te pongo un ejemplo de condiciones de apertura iniciales muy básicas. Cualquiera podría coger el software y crearse sus configuraciones a base de imaginación. Además que también cuenta con el buscador de configuraciones partiendo de una semilla inicial.

Si tuviera más tiempo podría crear una web donde cada uno crearía sus combinaciones, creando ranking de configuraciones buenas, pero macho no me atrae nada programar en WEB, y tampoco hay nada que conozca para simular con datos COT en la web.

Si alguien se apunta y quiere programar la web yo me comprometo a crear los servicios necesarios para invocar la ejecución de testeo y simulación.
#11

Re: Algoritmo funcional basado en datos COT

Me referia a un formulario para publicar codigo al postear en Rankia:


Del estilo a los foros de programacion.

Veo que eres un monstruo, te ayudaria con la programacion web, pero no estoy a la altura... Para que te hagas una idea, esta es mi web:

https://www.paiton.org

Probablemente la mas cutre de toda la red.
Programada en html a pelo (generado desde Python), totalmente estatica, se mueve menos que los ojos de espinete.
Cada cierto tiempo se ejecuta un script que genera las imagenes, un texto sencillo, el codigo html, y lo sube todo via FTP... tecnologia punta.

Ah, y todo el codigo python (descarga, analisis, graficado) corre en una Raspberry.

Saludos.