La Programación
Bueno, dado que hace unos días expliqué la diferencia entre las finanzas qunatitativas del sell side vs las del buy side, o dicho de otro modo las diferencias entre los que somos quants del mundo P vs lo quants del mundo Q les dejo el link por si se perdieron esa nota:
Y va quedando claro que este blog va a dedicarse a difundir temas de finanzas quantitativas desde el enfoque “P” me parece atinado comenzar los primeros artículos hablando de programación o una breve introducción al tema
Voy a hacer un breve tutorial de como iniciarse en el mundo de la programación a quienes les parece algo ajeno ya que es la columna vertebral del análisis quantitativo, dado que sin la herramienta de la programación todo análisis quant posible quedaría muy limitado
Hay muchas cosas que me preguntan los que quieren iniciarse en este mundo de la programación (y esto mas allá puntutalente de los interesados en finanzas quant), que se repiten y quisiera dar mi punto de vista
- Edad para arrancar
No hay edad alguna, es cierto que un chico de 20 años es capaz de de estar trabajando 3 dias seguidos sin dormir, o casi sin dormir, y con todas las pilas cuando para alguien de 50 eso está fuera del alcance, pero también es cierto que a los 20 no tenés la visión global y sistémica de las cosas que sí tenés a los 50s, y así podría enumerar cientos de ventajas y desventajas de una y otra edad, con lo cual a la larga se neutralizan, es una disciplina como cualquier otra, habrá ventajas y desventajas para cualquier grupo etario, pero no hay ninguna razón lógica para la cual sea mas ventajoso ser jove
- Background Previo
Da igual esto para un cheff, un instructor de educación física o un contable, la programación es otro chip, no sabría como explicarlo pero es ver al mundo y sobre todo a los datos que lo componen de otra forma, hay mucho de creatividad, de enfoque de pensamiento lateral por sobre todo, y mucho de prueba, error y mucha parte psicológica de tolerancia a las frustraciones, es antinatural para nosotros pensar como una máquina, nosotros no pensamos asi! (por suerte) con lo cual es común darse contra la pared muchas veces, sobre todo al principio, así que no se sientan en desventaja contra un ingeniero porque vienen de afuera del rubro
- Es que yo siempre fui malo con la matemática
NO IMPORTA!, Como decirlo, obvio que saber matematica ayuda, a mi me gusta mucho la matemática y por suerte tengo una buena base, pero les cuento algo, cuando veo una genialidad en programación en la inmensa mayoría de los casos vienen de alguien que no sabe de matemática formal o tiene ideas muy vagas al respecto. Insisto, la creatividad y el pensamiento lateral juegan un rol fundamental. Se habla de que hay mucha abstracción de código hoy en día, eso significa que las cuestiones mas conocidas y fáciles de modelar (la matemática formal) ya estáncodeadas por otros y hay librerías disponibles para que las podamos usar con unos clics, lo que suma mas valor en realidad es la parte creativa para resolver cada problema concreto
- Tengo miedo de no estar a la altura ¿es muy dificil?
Facil no es, no voy a mentir, hagamos la analogia con aprender a manejar, si ves un par de videos o lees un tutorial de como aprender a manejar, y agarras el auto y sales a andar, va a parecer difícil, pero el punto es que para aprender necesitas horas de practica manejando. Con Python es lo mismo, si piensas que esto es ver un par de videos y copiar y pegar, no, no funciona así, funciona con horas y horas dándose con los problemas, resolviendo, equivocándose mucho y volviendo a probar hasta que sale.
- ¿Se gana plata haciendo bots?
Es como preguntar si se puede ganar plata poniendo un bar o montando un negocio de venta de ropa, depende como lo hagas, se puede ganar o perder, la diferencia con los bots es que de manera mucho mas acelerada que manualmente (para ambos lados), lo cual pone el acento aun mucho mas fuerte en el “”COMO” mas que en el “QUE”
- ¿Sirve saber de Python, mas alla del trading o las finanzas?
Si, de hecho es un antes y un despues de aprender a programar, te abre la cabeza, pero fundamentalmente te da herramientas super utiles y productivas para la vida laboral en cualquier carrera. Una tarea que se automatiza que llevaba 30 minutos diarios, al año significa un mes entero de trabajo en horas netas ahorradas, y les puedo asegurar que cualquier tarea administrativa que se les ocurra tiene cosas automatizables!
En fin, no los quiero aburrir, si están leyendo aún es porque les interesa meterse en este mundo y entienden que el futuro es por ese lado
Primera decisión
Mi primer consejo es respecto al lenguaje a elegir, en realidad casi que da igual porque la base de la programación es resolver problemas y el lenguaje es solo la forma de redactar la solución, peeero, tampoco seamos ingenuos:
Hay lenguajes como C que se llaman de bajo nivel que son muy poco amigables para arrancar, no es la mejor idea empezar por ahí..
En el medio tenemos lenguajes como Java que es muy potente pero que tiene una curva de aprendizaje un poco pesada al comienzo (al principio hay que definir muchas cosas y tipear demasiadas líneas parra hacer algo dentro de todo muy sencillo que en otros lenguajes llevaban una sola línea de código o muy pocas)
Y en el otro extremo tenemos lenguajes como javascript o mejor aun Python, que están pensados mas en la productividad del programador que en la del lenguaje en sí. Así que estos lenguajes son los ideales para arrancar de cero
Como escribo en un blog de finanzas me voy a enfocar en Python porque mas allá de ser multipropósito al igual que javascript, el caso de Python está muy avanzada la comunidad de data science y no para de crecer
Otro tema no menor que vale la pena destacar es que en Python todo es gratis, todo es open source, es decir que no vamos a tener que pagar ni una sola licencia
Una vez elegido el lenguaje hay que elegir la interfaz, o el paquete de software a utilizar, y si bien luego van a ver muchas cosas mejores y mas productivas, para iniciar les recomiendo fuertemente instalar una sola cosa ANACONDA
Les dejo link: https://www.anaconda.com/products/individual
Primeros pasos
Lo bueno de instalar esta distribución es que viene con infinidad de cosas integradas, un IDE muy completo, los hermosos Jupyter notebooks, y todas las librerías infaltables para trabajar
Bueno, una vez instalado (no cambien nada de lo que sugiere el instalador), abren jupyer notebook
Luego navegamos como si fuera el explorador de archivos de windows, y vamos a la carpeta que queramos o creamos una nueva y de ahi gestionamos nuestros archivos y proyectos, para ello vamos al botón New y elegimos python3 para crear un nuevo notebook de python.
Una vez creado un nuevo Notebook, vemos que tenemos celdas
Las celdas permiten la cantidad de lineas de código que quieran y al ejecutarla se ejecuta todo lo que esté dentro de la celda, para ejecutarlo podemos apretar el botón Run o bien las teclas: Shift + Enter
Aquí les muestro un código bien básico, las típicas primeras líneas que uno prueba siempre
Celda 1: La típica impresion en pantalla o el primer "Hola mundo"
Celda 2: Un comentario y una cuenta
Celda 3: Una cuenta usando variables
Celda 4: Importamos una librería y definimos una función propia
Obviamente son ejemplos hiper básicos para mostrar que es como escribir en un cuaderno, nada del otro mundo
Luego empieza la parte mas tediosa de aprender a programar cosas en serio, pero les voy a proponer un atajo interesante, vamos a importar una librería que haga funciones mas interesantes, esa librería "math" que les mostré en la imagen anterior ya viene instalada en anaconda porque es de las más básicas.
Bajando precios y calculando con series de stocks de USA
Hay otras librerías que podemos isntalar nosotros, por ejemplo les voy a mostrar primero una librería que sirve para bajar precios
Para usar una libreria que no viene instalada obviamente el primer paso es instalarla, para ello se usa desde jupyter el comando:
!pip install nombre_de_la_libreria_a_instalar" # asi poniendo el signo de exclamacion inicial
Vamos a instalar entonces esta librería para jugar un poco con precios:
!pip install yfinance
Les ejecuta unas líneas similares a como se ve en la imagen
Y en la otra celda ya puedo importar la libreria con:
import yfinance (con el "as yf" le doy un alias como una abreviacion para llamarla luego mas facil)
Fíjense que solo "codeo" 5 líneas
1- importo la libreria que acabo de instalar
2- descargo los precios de AAPL
3- calculo las variaciones diarias sobre los precios de cierre
4- calculo la volatilidad anual como el desvio estandar anualizado de las ulitmas 250 jornadas de cada dia
5- Grafico la volatilidad historica
Mas librerías
Ahora les muestro una librería super sencilla que construimos con ejemplos de mis alumnos de las primeras clases, esta librería la hicimos solo a fines didácticos y es super sencillo construirla, ya les digo la hicimos con alumnos que arrancaron de cero a los 2 mesees de curso
Ejecutando la funcion de la libreria juanpy que se llama trends y poniendo como argumento el ticker (Banco santander de la bolsa de madrid) y la fecha de inicio y fin, me devuelve toda la tabla de precios historicos desde la fecha indicada con sus valores maximos y mínimos vigentes y las pendientes de los ultimos máximos y minimos y me grafica todo
fíjense que tipeando solo un par de líneas ya pueden empezar a jugar con cosas medianamente interesante, nótese que el comando trae los precios en tiempo real
Yo les aseguro que esto es solo el comienzo, es un ejemplo super sencillo de funciones que enseño a hacer en mis cursos iniciales para alumnos que arrancar de cero y a los pocos meses pueden hacer funciones como esas y mucho mas por su cuenta
Librerías de backtesting
Veamos otra librería un poco mas avanzada ya que estamos
Con esta librería que les muestro acá se puede ver todo un backtest completo de un activo (o estrategia sobre un activo si quisieran)
En este caso la tienen aue instalar tambien con:
!pip install QuantStats
Una vez instalada la pueden usar, y miren esta magia, esta si que esta buena como librería!
3 líneas de codigo y obtengo un Backtesting completo de un ticker cualquiera contra un benchmark cualquiera tambien a elección de uno
Fíjense todo lo que nos devuelve Python con esas 4 líneas de código!
Todo tipo de ratio de riesgo, Sharpe, Sortino, alfa, beta, CAGR, calmar ratio, profit ratio, profit factor etc etc
Y eso no es todo también me reporta graficamente
Arranca con los tippicos gráficos de retorno acumulado de la estrategia vs el benchmark que elegimos (aqui pusimos una serie tipo buy&hold de un activo pero podriamos haber codeado una estrategia mas activa, de momentum por ejemplo), en mi caso como elegí una accion de USA tomé como benchmark el SPY que replica las acciones del sp500
Luego me muestra el comportamiento año a año, que es una buena medida para ver como camina la estrategia vs el benchmark en diferentes etapas dle mercado tanto alcistas como bajistas o laterales
Tambien me muestra un histograma de los retornos diarios
Luego la parte de risk management, los rolling Beta, Sharpe, Sortino etc
También muestra los Drawdowns (a ver, todo esto lo hace solo Python ehh!)
Y por ultimo muestra los retornos mensuales y estacionalidad en un heatmap sencillito pero muy claro
Y los boxplots con los rangos intercuartiles y los outliers para todos los timeframes desde diario hasta anual
Y todo eso con solo 4 lineas de codgo en un totorial para dar los primeros pasos!
Obviamente que eso es solo el comienzo, les aseguro que Python es un viaje de ida, es sorprendente lo que se puede lograr con esta tecnología que hoy tenemos al alcance de la mano, creo que es algo que sencillamente es ridículo pasar por alto como si no existiera
Bueno, los saludo por hoy, espero que esto los anime a sentarse a estudiar estos lenguajes de programacion como Python que tanto prometen y mas en campos como las finanzas, saludos
Juanpy
@johnGalt_is_www