My Authors
Read all threads
Buenas amigos, lindo sábado para estudiar un poco, así que dedicado a mi amigo @GeroAlbornoz x la garra que le esta poniendo a aprender programación para bolseros, les dejo un instructivo para dar los primeros pasos en este campo
Empecemos, tema lenguaje: Python

No es mi lenguaje y no lo domino, pero posta es lo mejor para finanzas cuantitativas, así que empiecen por Python sin dudar

Para arrancar hay que instalar solo una cosa, les dejo el link, es la distribución anaconda anaconda.com/distribution/
Si bien no es necesario instalar anaconda, es muy practico y recomendado para principiantes ya q trae python, un IDE (Spyder, es un entorno muy piola) y muchas librerías impresionantes para data science, machine learning etc.. Instalen version 3.7 según su sist operativo
Una vez instalado vamos a agregar solo dos librerías especificas para la bolsa, una para bajar datos de mercado y otra que les quiero mostrar mas bien onda quant

Para ello, buscamos el prompt de conda (ver imagen), es una consola que abre en el directorio de instalación
La consola se ve asi y lo unico que hay que tipear es:

pip install yfinance
(esto es una librería para bajar datos de mercado, precios, opciones, etc..)

Esperen un rato que les instale el paquete y luego manden:

pip install pyfolio
(libreria de funciones quant)
Una vez hecho esto van a abrir el spyder que se instaló solo con el anaconda, esto es un IDE, que significa entorno de desarrollo, que es una mezcla de un editor de código mas una consola de salida, analizador de variables, etc etc
Al abrir spyder van a ver una mitad izquierda que es donde van a tipear el código, las instrucciones etc

Y la mitad de la derecha q tiene la salida, que es lo que nos "devuelve" el programa que escribimos

En menu herramientas->Preferencias pueden configurar el estilo
Antes de empezar a codear borren los comentarios que vienen en el archivo default, a saber:

-Todas las lineas que empiecen con el # son "comentarios" es decir que no se ejecutan esas lineas (son para agregar observaciones)

-Para comentar muchas lineas se usan comillas triples
Bueno, ok, a codear, lo primero que hacemos es llamar a las librerías que vamos a usar, empecemos por traer datos de mercado, para eso vamos a llamar a la librería que instalamos yfinance, y para ello tipeamos:

import yfinance as yf
Luego descargamos los datos de "GGAL" en $ de Byma, e imprimiremos en la consola los primeros 4 datos, para ello mandamos las sigueintes lineas:

ticker = "GGAL .BA"
data = yf .download(ticker, period='20y')
print(data.head(4))

Para ejecutar -> boton verde "play"
la primera linea solo define en una variable el nombre del activo (si no se pone el ".BA" y se deja solo el "GGAL" traerá cotización de USA

La segunda linea es la que descarga los datos

La ultima linea imprime las primeras 4 filas de la tabla de datos
Bueno, ahora podemos empezar a ver algún comando mas, agreguen estas lineas:
print('\n--Describe--\n', data.describe())
print('\n--Columns--\n', data.columns)

una es para ver las columnas de la serie y la otra te tira: media, desvió estandar y los 4 cuartiles y mediana
Tiremos un primer graf, para ello importamos una librería que viene con conda
import matplotlib.pyplot as plt

Y mandamos esto:
plt .style.use('dark_background')
plt.rcParams['figure.figsize'] = [12.0, 5]
plt.yscale('log')
data['Adj Close'].plot(kind='line',title='GGAL en pesos')
Como ven las instrucciones se entienden solas, les puse las mas básicas, pero si quieren indagar mas de esta librería de python que gráfica vayan a la documentación oficial que esta super completa, les dejo link matplotlib.org/3.1.1/contents…
vamos a empezar a graficar cosas mas interesantes
Empecemos por agrupar datos, fíjense esto:

variaciones = data['Adj Close'].pct_change()*100

agrupados = variaciones.groupby(data.index.year).sum()
agrupados.plot(kind='bar',title='GGAL - Suma de Rendimientos/año')
plt .show()
El codigo es bastante claro creo que se entiende solo que hace cada linea, prueben esto ahora:

agrupados = variaciones.groupby(data.index.dayofweek).mean()
agrupados.plot(kind='bar',title='GGAL - Rendimientos/Dia Semana')
plt .show()
# bien los viernes ehh
Otra forma es resamplear las series, paso código:

data['Adj Close'].resample('W').last()
variaciones = data['Adj Close'].pct_change()*100
agrupados = variaciones.groupby(data.index.week).mean()
agrupados.plot(kind='bar',title='GGAL- Rendimientos/Semana del Año')
plt .show()
Bueno, ahora vamos a armar un portafolio de accciones/etfs, para esto importamos la librería que vamos a usar luego (pyfolio), y otra que viene con anaconda que se llama pandas, es para trabajar con matrices

import pandas as pd
import pyfolio as pf
import yfinance as yf
Luego metan este código

cartera = ['YPF','GGAL','AMZN','AAPL','TLT','SHY','IEF']
data = pd.DataFrame(columns=cartera)

for ticker in cartera:
data[ticker] = yf .download(ticker, period='10y')['Adj Close']

data = data.pct_change().dropna().mean(axis=1)
print(data.describe())
Hasta acá solo armamos la serie de los rendimientos diarios, 10yr a hoy, de la cartera con esos tickers y vemos que el rendimiento diario es de 0,055% con un desvío estandar del 0,93%
Pero agárrense que viene la magia, solo agreguen esto:

pf.create_full_tear_sheet(data)
Esa simple línea, te devuelve todo tipo de info, que voy mostrando

Empezamos por lo mas básico que son los retornos acumulados desde el inicio con la cartera, base T0 = 1, así que si termina en 2 es que al final la cartera rindió un 100%
Sigue con un gráfico de retornos que nos da un pantallazo de la volatilidad positiva diferenciada de la negativa (para los que manejan sharpe vs sortino este graf te marca los contrapuntos entre ambos)
y luego un hermoso graf de volatilidad semestral histórico y medio
Sigue con el ratio sharpe roleado a 6 meses, para los que no lo conozcan es un indicador (indirecto e imperfecto) del nivel retorno por unidad de riesgo asumida, es decir que nos da una idea de si el riesgo de la cartera se justifica con un buen retorno, arriba de 1 es excelente
Después muestra la distribución y el comportamiento en los 5 periodos de mayores caídas, y nos muestra el peor momento de cada una de esas caídas, este dato es conocido como máximo drawdown
Esto ya es sublime, te muestra un mapa de color de rendimientos mensuales, uno de columnas de rend anuales y la distribución de los retornos mensuales en un histograma de frecuencias para cada rango. Finalmente nos da barras con los int de conf. en frec diaria, semanal y mensual
Finalmente nos muestra el compoortamiento de la cartera en los periodos mas relevantes (en gral para el mkt y a nivel global) dentro del periodo seleccionado

Por ultimo, les muestro como guardar lo que se pueden guardar en un excel de la api
Hay un metodo para guardar en excel cualquier serie:
data .to_csv('nombre_archivo.csv')
Eso guarda los datos de la varaible "data" en un archivo que se llama "nombre_archivo.csv" de la carpeta que esten trabajando
en el sig tw pongo ej. para descargar toda la cadena de opciones
#remplazar calls x puts para bajar puts

ticker="GGAL"
data = yf.Ticker(ticker)
vencimientos = data.options
for vencimiento in vencimientos:
nombre_arch=ticker+"_calls_"+vencimiento+".csv"
contratos = data.option_chain(vencimiento)
contratos .calls.to_csv(nombre_arch)
@GeroAlbornoz se ofrece para hacer un vivo del paso a paso en video, avisenle si quieren participar

Missing some Tweet in this thread? You can try to force a refresh.

Enjoying this thread?

Keep Current with ae^((-(x-b)^2)/(2c^2))

Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!