0 votos

Estimación de la iliquidez de Amihud en Python

He encontrado el siguiente código en el libro Python for Finance de Yuxing Yan, en la página 267 para estimar la iliquidez de Amihud

import numpy as np 
import statsmodels.api as sm 
from matplotlib.finance import quotes_historical_yahoo_ochl as getData 
begdate=(2013,10,1) 
enddate=(2013,10,30) 
ticker='IBM'                   # or WMT  
data= getData(ticker, begdate, enddate,asobject=True, adjusted=True) 
p=np.array(data.aclose) 
dollar_vol=np.array(data.volume*p) 
ret=np.array((p[1:] - p[:-1])/p[1:]) 
illiq=np.mean(np.divide(abs(ret),dollar_vol[1:])) 
print("Aminud illiq for =",ticker,illiq) 

El módulo matplotlib.finance ha quedado obsoleto. El nuevo módulo no admite la recogida de datos financieros, así que he encontrado otra forma de recogerlos:

import pandas as pd
import pandas_datareader.data as web
end = '2013-10-30'
start = '2013-10-1'
get_px = lambda x: web.DataReader(x, 'yahoo', start=start, end=end)['Adj Close']

symbols = ['IBM']
data = pd.DataFrame({sym:get_px(sym) for sym in symbols})
data = data.rename({'IBM': 'Adj Close'}, axis=1)
p1 = data
p = p1['Adj Close'].ravel()

Hasta aquí todo bien.Pero no sé por el código original lo que el data.volume hace y cómo puedo traducir dollar_vol=np.array(data.volume*p) con las funciones existentes de cualquier módulo en Python.

1voto

xrost Puntos 129

Desde el documentación de matplotlib.finance ( _en parse_yahoo_historical_ochl(...)_ ) se especifica que los dólares negociados/volumen en dólares es el volumen no ajustado multiplicado por los precios de cierre ajustados del ticker dado ( _En quotes_yahoo_historical_ochl(...) se refieren a la función anterior para entender el formato de salida_ ):

ajustado : bool

Si es True (por defecto) reemplaza los precios de apertura, cierre, alto y bajo por sus valores ajustados. El ajuste es por un factor de escala, S = adjusted_close/close. Los precios ajustados son los precios reales multiplicados por S.

El volumen no se ajusta porque ya está ajustado hacia atrás por Yahoo. Si desea calcular los dólares negociados, multiplique el volumen por el cierre ajustado, independientemente de que elija ajustado = True|False .

Aquí, data.volume obtiene la correspondiente matriz de volumen "sin ajustar" del getData de salida. Si quiere replicar dollar_vol necesita obtener el volumen ajustado a la división hacia atrás (por ejemplo, de Yahoo finance) para su correspondiente ticker ya que parece que ya tiene los precios de cierre ajustados.

Si haces algo a lá:

from pandas_datareader import data

IBM = data.DataReader("IBM", 
                       start='2013-10-1', 
                       end='2013-10-30', 
                       data_source='yahoo')

dollar_vol = IBM['Volume'] * IBM['Adj Close']

Deberías obtener el dollar_volume/dollars_traded como se describe en la documentación y en tu primer fragmento de código.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X