Acceder

¿Aprender a programar ahora?

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 

12
¿Te ha gustado mi artículo?
Si quieres saber más y estar al día de mis reflexiones, suscríbete a mi blog y sé el primero en recibir las nuevas publicaciones en tu correo electrónico
  1. #12
    20/01/22 21:58
    Espectacular el potencial de Python, poco a poco lo voy descubriendo, espero llegar a hacer cosas así de sorprendentes. 
  2. #11
    08/11/20 18:49
    Hola  Juanpy,

    muchas gracias por este artículo de introducción a la programación de finanza cuantitativa.
    Me han encantado los ejemplos sencillos y las librerias que has utilizados.

    Saludos
  3. en respuesta a Juanpy
    -
    #10
    Cadenaperpetua
    20/10/20 21:00
    lógico que empieces facil, yo me he puesto con Python hace un mes, pero me dan ganas de abrir esas librerias y mirar si lo comprendo y ver si se puede cambiar cosas al gusto, tambien ir exportando datos de lista[ ] que me interese saber, etc.

    Se hacerme cosas desde 0 en otros lenguajes y de hecho las tengo hechas pero para conectar a API de los brokers me han dado problemas asi que he optado por python. 
    Pero si que al final tienes que hacerte tu muchas cosas, y aunque cueste muuuuuchisimo mas, sabes lo que estas haciendo, y eso es fundamental cuando te juegas un dinero.

    Es muy interesante lo que enseñas, vamos en la linea quant que aqui no tiene muchos amigos
  4. en respuesta a David Snchz
    -
    #9
    20/10/20 11:45
    si es genial google colab, lo descubri hace muy poco y tengo que investigarlo un poco mejor tema privacidad, continuidad y virtualenvs, pero tal cual, para arrancar es genial la herramienta sobre todo porque no hay que instalar nada de nada
  5. en respuesta a Cadenaperpetua
    -
    #8
    20/10/20 11:43
    Hola, efectivamente es un b&h, lo del mode=full es por la cantidad de metricas del output, y coincido con tu vision de estas librerias, yo no soy muy usuario de las librerias con tanta abstraccion sino que me armo mis propios paquetes customizando, solo que en un post como este que es para motivar a meterse a programar me parece una gran herramienta para arrancar porque con 2 lineas de codigo salen cosas muy completas
  6. en respuesta a Cadenaperpetua
    -
    #7
    20/10/20 09:24
    En "Runtime" o "Entorno de ejecución", depende del idioma en que lo tengas configurado, puedes cambiar de entorno de ejecución, para determinados cálculos y determinadas librerías la GPU va más rápido. De todas formas, arriba a la derecha, en "Connect" puedes conectarno a un entorno local o a un entorno en un servidor.

    Saludos!
  7. en respuesta a David Snchz
    -
    #6
    Cadenaperpetua
    20/10/20 06:51
    buen aporte, no lo conocía, es interesante. Va muy lento, pero para trabaja en un ordenador que no es el tuyo esta genial
  8. #5
    19/10/20 18:07
    Hola Juanpy!

    Aquí otro que programa en Python! Muy buen artículo! :D

    Otra opción para empezar a programar con Python, en vez de utilizar anaconda, es utilizar los Notebooks de Google Colab. Si tienes una cuenta gmail puedes abrir uno por defecto en tu Google Drive, todo se almacena en la nube, no consume recursos de tu ordenador e incluso puedes utilizar 12h gratis de GPU para entrenar modelos de Deep Learning, y, por último, no necesita ninguna instalación.

    Un saludo!
  9. #4
    Cadenaperpetua
    19/10/20 13:29
    muchas gracias por tu tiempo y calidad en el tema.

    Intente sacar los graficos, pero de la estrategia pero parece no se, podrias apuntar el code del los graficos?

    por otro lado entiendo que la estrategia es un b&h por eso el argumento mode='full'

    sabes si en quantstats se pueden añadir las comisiones?
    como punto negativo todas estas librerias de python las veo muy blackbox para mi gusto 
  10. #3
    19/10/20 01:40
    @juanpy, podías animarte y hacer unos webinars para Rankia con unas micro-guías de como empezar utilizando notebooks para analizar compañías y derivados.

    Es decir desarrollar pormenorizado este artículo añadiendo un tutorial y más ejemplos.

    Creo que estaría súper bien y tendía una acogida brutal en la comunidad

    Muchas gracias por tú post!
  11. #2
    18/10/20 23:34
    Top! Gracias y esperando más artículos! 
  12. #1
    18/10/20 14:39
    Me ha gustado mucho tu artículo. Motiva bastante. Justo estoy jugando con la idea de aprender a programar con Python. Un saludo

Definiciones de interés