Análisis financiero general en Python (Parte 1)

El último artículo examinó cómo puede obtener información sobre instrumentos financieros. A continuación, se publicarán varios artículos sobre lo que se puede hacer inicialmente con los datos obtenidos, cómo analizar y elaborar una estrategia. Los materiales se basan en publicaciones en fuentes extranjeras y cursos en una de las plataformas en línea.

Este artículo discutirá cómo calcular la rentabilidad, la volatilidad y construir uno de los principales indicadores.

import pandas as pd
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt

sber = yf.download('SBER.ME','2016-01-01')

Rentabilidad


Este valor representa el cambio porcentual en el valor de las acciones por día de negociación. No tiene en cuenta los dividendos y las comisiones. Es fácil de calcular utilizando la función pct_change () del paquete Pandas.

Como regla general, se utiliza la rentabilidad del registro, ya que le permite comprender mejor e investigar los cambios a lo largo del tiempo.

#   `
daily_close = sber[['Adj Close']]

#  
daily_pct_change = daily_close.pct_change()

#  NA   0
daily_pct_change.fillna(0, inplace=True)

print(daily_pct_change.head())

#   
daily_log_returns = np.log(daily_close.pct_change()+1)

print(daily_log_returns.head())

imagen

Para conocer la rentabilidad semanal y / o mensual de los datos obtenidos, use la función resample ().

#   `sber`      
monthly = sber.resample('BM').apply(lambda x: x[-1])

#  
print(monthly.pct_change().tail())

#  `sber`        
quarter = sber.resample("4M").mean()

#  
print(quarter.pct_change().tail())

imagen

La función pct_change () es conveniente de usar, pero a su vez oculta cómo se obtiene el valor. Se puede realizar un cálculo similar, que ayudará a comprender el mecanismo, utilizando shift () del paquete del paquete Pandas. El precio de cierre diario se divide por el precio pasado (desplazado por uno) y una unidad se resta del valor recibido. Pero hay una desventaja menor: el primer valor como resultado es NA.

El cálculo de la rentabilidad se basa en la fórmula:

imagen

donde, p es el precio, t es el instante de tiempo yr es la rentabilidad.

A continuación, se construye un diagrama de distribución de rentabilidad y se calculan las estadísticas principales:

#  
daily_pct_change = daily_close / daily_close.shift(1) - 1

print(daily_pct_change.head())

imagen

#  `daily_pct_c`
daily_pct_change.hist(bins=50)

plt.show()

#  
print(daily_pct_change.describe())

imagen

La distribución se ve muy simétrica y normalmente se distribuye alrededor de un valor de 0.00. Para obtener otros valores estadísticos, se utiliza la función description (). Como resultado, se ve que el valor promedio es ligeramente mayor que cero, y la desviación estándar es casi 0.02.

Rendimiento acumulado


Los rendimientos diarios acumulativos son útiles para determinar el valor de una inversión durante un período de tiempo específico. Se puede calcular como se muestra en el siguiente código.

#   
cum_daily_return = (1 + daily_pct_change).cumprod()

print(cum_daily_return.tail())

imagen

#    
cum_daily_return.plot(figsize=(12,8))

plt.show()

imagen

Puede volver a calcular el rendimiento en el período mensual:

#   
cum_monthly_return = cum_daily_return.resample("M").mean()

print(cum_monthly_return.tail())

imagen

Saber calcular los rendimientos es valioso al analizar las existencias. Pero es aún más valioso en comparación con otras acciones.

Tome algunas acciones (su elección es completamente al azar) y construya su gráfico.

ticker = ['AFLT.ME','DSKY.ME','IRAO.ME','PIKK.ME', 'PLZL.ME','SBER.ME','ENRU.ME']

stock = yf.download(ticker,'2018-01-01')

#    `daily_close_px`
daily_pct_change = stock['Adj Close'].pct_change()

# 
daily_pct_change.hist(bins=50, sharex=True, figsize=(20,8))

plt.show()

imagen

Otro gráfico útil es la matriz de dispersión. Se puede construir fácilmente usando la función scatter_matrix (), que es parte de la biblioteca de pandas. Daily_pct_change se usa como argumentos y se establece el parámetro Estimación de densidad del núcleo. Además, puede establecer la transparencia con el parámetro alfa y el tamaño del gráfico con el parámetro figsize.

from pandas.plotting import scatter_matrix

#   `daily_pct_change`  
scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(20,20))

plt.show()

imagen

Eso es todo por ahora. El siguiente artículo cubrirá el cálculo de la volatilidad, el promedio y el uso del método de mínimos cuadrados.

All Articles