En la imagen se ve la curva que tiene una volatilidad anualizada del 20.52% y una ganancia media del 19.54%. Eso resulta en un Sharpe de 0.95.
En el código he puesto que pinte el letrero en marzo de 2008 porque la curva de capital empieza en el año 2008. Pero eso refleja mi poca experiencia en Python. Quizás alguien quiera corregirlo y decirme como ajustar el letrero de forma relativa a la esquina superior izquierda :)
----------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 26 22:12:03 2017
@author: OSCAR
ESTADISTICAS DEL EQUITY
"""
import pandas as pd
import matplotlib.pyplot as plt
#LEEMOS LOS FICHEROS DE LA CARPETA QUOTES
path = 'C:/Users/OSCAR/Documents/Quotes/'
#ticker = '~~~EQUITY'
ticker = '~~~EQUITY'
precios = pd.read_csv(path + ticker + '.csv',
usecols = ['Date','Close'], index_col=["Date"], parse_dates=True)
#DIFERENCIAS
dif = precios - precios.shift()
dif_porc = dif / 100000 #todo respecto de 100.000
print(dif_porc.describe())
#DESV ANUALIZADA
desv_an = 100 * dif_porc.std() * 16
print("Desv Anualizada = %f " % desv_an)
#MEDIA
media = 100 * dif_porc.mean() * 252
print("Media Anualizada = %f " % media)
#SHARPE
SH = media/desv_an
print("SHARPE = %f " % SH)
#PINTAMOS EL EQUITY
plt.figure() #inicializar el gráfico
plt.plot(precios, color = 'blue', label = ticker)
plt.legend(loc = 'lower right')
plt.xlabel('Fecha')
plt.ylabel('Precio')
plt.text('2008-03-01',precios.iloc[-1]*0.8,
'Std = %0.3f' % desv_an['Close'] +' %'
+ '\n' + 'Med = %0.3f'% media['Close'] +' %'
+ '\n' + 'SH = %0.3f' % SH )
"""
Created on Sun Mar 26 22:12:03 2017
@author: OSCAR
ESTADISTICAS DEL EQUITY
"""
import pandas as pd
import matplotlib.pyplot as plt
#LEEMOS LOS FICHEROS DE LA CARPETA QUOTES
path = 'C:/Users/OSCAR/Documents/Quotes/'
#ticker = '~~~EQUITY'
ticker = '~~~EQUITY'
precios = pd.read_csv(path + ticker + '.csv',
usecols = ['Date','Close'], index_col=["Date"], parse_dates=True)
#DIFERENCIAS
dif = precios - precios.shift()
dif_porc = dif / 100000 #todo respecto de 100.000
print(dif_porc.describe())
#DESV ANUALIZADA
desv_an = 100 * dif_porc.std() * 16
print("Desv Anualizada = %f " % desv_an)
#MEDIA
media = 100 * dif_porc.mean() * 252
print("Media Anualizada = %f " % media)
#SHARPE
SH = media/desv_an
print("SHARPE = %f " % SH)
#PINTAMOS EL EQUITY
plt.figure() #inicializar el gráfico
plt.plot(precios, color = 'blue', label = ticker)
plt.legend(loc = 'lower right')
plt.xlabel('Fecha')
plt.ylabel('Precio')
plt.text('2008-03-01',precios.iloc[-1]*0.8,
'Std = %0.3f' % desv_an['Close'] +' %'
+ '\n' + 'Med = %0.3f'% media['Close'] +' %'
+ '\n' + 'SH = %0.3f' % SH )
----------------------------------------------------------------------------------------
Hola Óscar,
ResponderEliminarEstaba leyendo este post y no entiendo qué quieres decir con lo siguiente:
"En el código he puesto que pinte el letrero en marzo de 2008 porque la curva de capital empieza en el año 2008. Pero eso refleja mi poca experiencia en Python. Quizás alguien quiera corregirlo y decirme como ajustar el letrero de forma relativa a la esquina superior izquierda"
Me podrías aclarar? :-) Gracias...
Hola Alejandro. Lo que quiero decir con eso es que para pintar el letrero he mirado una fecha en el gráfico que salga más o menos en la parte izquierda (valor del eje x = marzo 2008). Pero eso es un "apaño" porque no servirá cuando cambien los años. Alguien con experiencia en Python pondrá coordenadas relativas al eje X y le servirá cualquier rango de fechas. Me refiero a hacerlo al estilo de lo que hice con el eje Y, pintar el cartel en el 80% del rango. No le he dedicado mucho tiempo a esto y aunque funciona es muy mejorable :) Saludos,
ResponderEliminarY algo así? https://drive.google.com/open?id=1YMg6tZmogsWg_vM7VV3pxZB0pOxiGaUS
ResponderEliminarAquí el código modificado:
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 26 22:12:03 2017
@author: OSCAR
ESTADISTICAS DEL EQUITY
"""
import pandas as pd
import matplotlib.pyplot as plt
#LEEMOS LOS FICHEROS DE LA CARPETA QUOTES
path = 'C:/Users/OSCAR/Documents/Quotes/'
#ticker = '~~~EQUITY'
ticker = '~~~EQUITY'
precios = pd.read_csv(path + ticker + '.csv',
usecols = ['Date','Close'], index_col=["Date"], parse_dates=True)
#DIFERENCIAS
dif = precios - precios.shift()
dif_porc = dif / 100000 #todo respecto de 100.000
print(dif_porc.describe())
#DESV ANUALIZADA
desv_an = 100 * dif_porc.std() * 16
print("Desv Anualizada = %f " % desv_an)
#MEDIA
media = 100 * dif_porc.mean() * 252
print("Media Anualizada = %f " % media)
#SHARPE
SH = media/desv_an
print("SHARPE = %f " % SH)
#PINTAMOS EL EQUITY
plt.figure() #inicializar el gráfico
plt.xlabel('Fecha')
plt.ylabel('Precio')
plt.plot(precios, color = 'blue', label = ticker)
#####################################################################################
plt.plot([], [], ' ', label='Std = %0.3f' % desv_an['Close'] + ' %')
plt.plot([], [], ' ', label='Med = %0.3f' % media['Close'] + ' %')
plt.plot([], [], ' ', label='SH = %0.3f' % SH + ' %')
#####################################################################################
plt.legend(loc='upper left')
Ahora sí! muchas gracias Alejandro, funciona perfectamente. Me alegra ver que alguien con pericia en Python sigue el blog :))))
ResponderEliminar