Acceder

Participaciones del usuario bacterio77

bacterio77 09/01/24 17:11
Ha respondido al tema Valores conservadores/ largo plazo
A Grifols, con la deuda que tiene reconocida la veo como para no tocar ni con un palo. No hace falta que tenga más deuda oculta para desplomarse…De todas formas, pinta feo lo de Gotham.
Ir a respuesta
bacterio77 18/11/23 14:26
Ha respondido al tema Valores conservadores/ largo plazo
Yo tengo algo de liquidez, pero me parece más probable que sigamos con inflación alta a pesar de tipos también altos, con intermitencias. Creo que esto puede hundir a empresas mediocres, especialmente si se endeudan, pero que se hagan inalcanzables las cotizaciones de las empresas buenas, por lo que también puede ser peligroso estar fuera del mercado.En cualquier caso, 20% de liquidez parece razonable…Qué vas a hacer con la liquidez?. Depósitos bancarios?. Renta fija?. Criptomonedas? (espero que esa última no).
Ir a respuesta
bacterio77 04/09/23 19:16
Ha respondido al tema Búsqueda de información.
https://www.jeroenbouma.com/projects/financetoolkit Es una api para descargar información con Python.SI no usas Python, quizas te interesa la api original:https://site.financialmodelingprep.com/Como te comenté por privado, estoy planteándome contratar la versión de pago (cuesta menos que Tikr y sospecho que usan la misma base de datos en origen), pero de momento el analisis de datos es un hobby y me estoy centrando en analizar datos relacionados con mi trabajo (para nada relacionado con las finanzas). Si encuentro resultados satisfactorios, quizás me anime a descargar datos de empresas y analizar los fundamentales...¿Qué tipo de análisis de datos tenías pensado?Un saludo
Ir a respuesta
bacterio77 04/09/23 15:33
Ha respondido al tema Búsqueda de información.
Paiporta, eso es muy interesante. Yo alguna vez me lo he planteado, de cara a hacer analisis de datos, pero haría falta que los datos fueran homogéneos. Recientemente me recomendaron una api de pago que te permite bajar info parecida a la de tikr, incluso a menor precio (cuotas mensuales), pero todavía no he tenido tiempo de probarla (estuve trasteando un poco en el modo prueba, y tenia buena pinta).
Ir a respuesta
bacterio77 10/08/23 17:27
Ha respondido al tema Valores conservadores/ largo plazo
Esta mañana, Tapestry ha anunciado la compra de Capri Holdings (antigua Michael Kors, pero que ahora incluye también, tras sendas adquisiciones, las marcas Jimmy Choo (zapatos) y Versace.Como he mencionado en este hilo, anteriormente he tenido acciones de Capri (cuando todavía se llamaba Michalel Kors), que vendí en el momento en que anunció la compra del fabricante de zapatos de moda Jimmy Choo, que se compró con unos múltiplos muy elevados. No me gustó nada la operación, porque Capri-MK pasaba de tener un balance muy saneado a estar endeudado, en un momento en el que su propia valoración era muy baja y creo que les hubiera sido más interesante proseguir la recompra de acciones que había estado realizando los dos o tres años anteriores. Además, no me parecían demasiado claras las sinergias que iba a tener el nuevo grupo...En cambio, la adquisición de Capri por Tapestry puede ser más interesante: Tapestry es principalmente propietaria de marcas de complementos de moda, especialmente fabricantes de bolsos (Coach, Kate Spade, Weitzsman) y las sinergias con Michael Kors, cuyo principal producto es el mismo, son interesantes. Vamos, que no parece una inversión al tuntún o "diworsification". Además, Tapestry me parece, en su política de retribución al accionista, más íntegra que Capri (reparte dividendo, cosa que Capri no hacía; otra cosa es si éste debería moderarse después de la adquisición). (Espero que con la adquisición se deshagan del consejo directivo de Capri).Por otro lado, hay algunas cosas que no me gustan del anuncio:- el precio que Tapestry ha ofertado por cada acción de Capri me parece demasiado alto, 57$,  un 64% por encima de la cotización del día anterior (una muy buena noticia para los accionistas de Capri, pero no tanto para los de Tapestry). También es cierto que, como Capri cotizaba a múltiplos bajos, el precio de compra equivaldría a un PER 12-13, que tampoco es tan excesivo como las compras que realizó anteriormente Capri.- Cuentas que he hecho de cara a la fusión: precio de compra de Capri: 6700 Millones $; deuda neta de Capri 3355 Millones de $; Deuda neta previa de Tapestry: 2644 Millones $; esto supone que Tapestry quedaría tras la fusión, sumando costes de compra y deuda adquirida, con una deuda neta de 12,700 Millones de $; el flujo de caja de ambas compañías quedaría en torno a 1200 MM al año, lo que supondría que la deuda representaría 10 años de ingresos.Esa deuda me parece bastante alta ante la expectativa de subida de tipos. De hecho, ya que han aumentado deuda, para mí lo sensato sería reducir dividendo hasta digerirla, aunque lo primero que han hecho, junto con el anuncio de compra, es anunciar que seguirían aumentando dividendo.Me parece que hay muchas interrogantes sobre el futuro de la empresa que resultará de la adquisición. Si los tipos de interés siguen subiendo, esto dañará doblemente a la empresa: por supuesto, supondrá mayores costes de financiación y, por otro lado, afectará también a sus ingresos. Las marcas de  Capri y Tapestry, si bien de renombre, ocupan un puesto medio en el sector del lujo, y no tienen el caché de marcas de alto lujo como LVMH. La clientela de Capri y Tapestry, clases medias-altas, se resiente más de las crisis que el alto lujo, y los ingresos y márgenes de la empresa resultante serán mas vulnerables que empresas como LVMH. En fin, por estos dos factores, una subida de tipos puede resultar doblemente perjudicial.Por el momento, Tapestry se deja un -12% tras el anuncio.Con las consideraciones anteriores, creo que merece la pena mantener y ver que pasa, incluso me apetecería un poco comprar un poco más aprovechando la caída, pero no lo voy a hacer (al menos de momento) porque como he comentado otras veces, no me gustan las empresas con ese rango de deuda: demasiadas variables en juego (habría que estar MUY atentos a la evolución de ventas y márgenes, y calendarios de financiación de la deuda).¿Alguna opinión del asunto?
Ir a respuesta
bacterio77 24/07/23 20:08
Ha respondido al tema Análisis técnico: ¿alguien reconoce algún patrón característico?
Con esta variante del código, puedes ver al mismo tiempo varias curvas, superpuestas.Las líneas largas en diagonal representan rachas en las que siempre aparece el mismo resultado, ya sea cara o cruz (ej: subir podria ser cara, bajar cruz, o al revés, vendría a ser lo mismo). Las salvas de varias veces con cara o varias veces con cruz son más comunes de lo que creemos. 5 series de 100 lanzamientos de moneda, seed=1  #######import numpy as npimport matplotlib.pyplot as pltsesiones = 100seed = Nonecurvas=5np.random.seed(seed)plt.clf()for i in range(curvas):  datos = np.random.choice([-1,1], sesiones)  datos[0]=0  plt.plot( datos.cumsum() ) plt.show()#####En algún lugar leí (¿creo que en alguno de los libros de Taleb?), refiriéndose a este fenómeno, que los programadores de videojuegos habían observado que la aparición de este tipo de rachas provocaban enfado en los jugadores, que solían pensar que el videojuego estaba mal programado. Para evitar este malestar, muchas veces cambiaban generadores aleatorios por otra serie de generadores, ya no aleatorios, en los que se intentaba evitar que aparecieran este tipo de rachas.
Ir a respuesta
bacterio77 24/07/23 19:56
Ha respondido al tema Análisis técnico: ¿alguien reconoce algún patrón característico?
Sí, de hecho es más fácil de simular. La diferencia es que, a la hora de representarlo, en lugar de que en cada sesión suba o baje una cantidad variable, en cada tirada sube o baja siempre una unidad.En principio, con el siguiente código, partiendo de 0, la gráfica se desplazaría en una unidad hacia arriba o hacia abajo según el resultado fuera cara o cruz.Adjunto codigo y resultado con seed=1 cara o cruz, seed=1  ########import numpy as npimport matplotlib.pyplot as pltsesiones = 100seed = Nonenp.random.seed(seed)datos = np.random.choice([-1,1], sesiones)datos[0]=0plt.clf()plt.plot( datos.cumsum() )plt.show() 
Ir a respuesta
bacterio77 24/07/23 17:57
Ha respondido al tema Análisis técnico: ¿alguien reconoce algún patrón característico?
Teniendo el código disponible, podéis ejecutarlo cuantas veces queráis, y en cada ejecución mostrará una gráfica aleatoria diferente. Veréis que es muy común, casi la norma, que se observen movimientos aleatorios importantes, por lo que los que seáis partidarios del análisis técnico, tenéis que tener claro que no necesariamente tiene que haber un motivo detrás de estos sucesos.En un primer momento, configuré el generador de datos para que, en cada sesión, multiplicara el valor previo (la supuesta "cotización") por 1 +/- una pequeña variabilidad aleatoria que seguiría una distribución normal. Sin embargo, esto hacía que los datos tuvieran cierta tendencia a descender. Sin entrar en detalle, el motivo por el que ocurría esto era porque, en una sucesión de estas características, tienen más peso los descensos que los ascensos (por ejemplo, con ese método, una subida del 5% en una sesión y descenso del 5% en la siguiente sería equivalente a multiplicar 1.05 * 0.95, que no daría 1, sino 0.9975; con oscilaciones más grandes, el efecto aumenta; ej 1.2 * 0.8 = 0.96, etc. Al final, por ese motivo he usado una transformación logaritmica en la que el efecto sería neutro.Pero lo más interesante, he destacado una serie de parámetros configurables. Para modificarlos, basta con cambiar el valor inicial que aparece en el recuadro de parámetros.- sigma (línea 9): permite ajusta la volatilidad. Indicaría, en tantos por cien, el margen de oscilación que se esperaría en aproximadamente el 67% de las sesiones (1 desv estandard). Con 1 (valor por defecto), el 67% de las sesiones cambiarían en un rango entre -1% y +1%.- rentab_anual (línea 11): indica el % del valor final esperable (sin contar la variación aleatoria) respecto al inicial. Vendría a representar algo así como el alfa de la acción. El valor por defecto es el 100%, con lo que, si se elimina la variabilidad (sigma=0), obtendremos una línea plana. Si se usan valores altos de rentab (ej: 300), obtendremos una curva exponencial (si se ajusta a 365 sesiones, y sin ruido - alfa=0 -, el valor final quedaría exactamente en 300).- seed: lo que comentaba de las semillas. Por defecto, sin semilla (seed=None), por lo que cada ejecución será diferente. Manteniendo el resto de parámetros como vienen inicialmente, si usamos los valores de semilla 1, 2 y 3 obtendremos, necesariamente, las figuras 1, 2 y 3 (quizás esto pueda cambiar si se usan versiones diferentes de Python o de sus módulos, pero con Google colab a fecha de hoy obtendreis esta figura). (para cambiar los valores: seed = 1, seed = 2, etc).- sesiones: como os imagináis y se describe, indica cuantas sesiones aparecerán en el gráfico.Se que puede parecer un poco engorroso y no apetecer hacer la prueba, pero seguro que si seguís las instrucciones delante del pc, en menos de 5 minutos ya estaréis habiendo vuestras pruebas.Si os animáis a trastear con el, me gustaría que comentarais vuestras conclusiones.
Ir a respuesta
bacterio77 24/07/23 17:29
Ha respondido al tema Análisis técnico: ¿alguien reconoce algún patrón característico?
 import numpy as npimport matplotlib.pyplot as plt#############################################  PARAMETROS AJUSTABLES## sigma: desviacion estandard del cambio diario (%)sigma = 1# rentab_anual:  rentabilidad anual (descontando efecto del ruido) (% respecto valor inicial;# 100% implicaría mantener el valor, 50% reducir a la mitad, 200% duplicar)rentab_anual = 100# seed (semilla del generador aleatorio) (opcional): fuerza a que siempre que# se introduzcan los mismos parámetros, se obtenga el mismo resultadoseed = None# numero de sesiones a mostrar en la graficasesiones = 1000#################################################factor_sigma = np.log(1+sigma/100)alpha = np.log(rentab_anual/100) / 365#creacion de datosnp.random.seed(seed)datos = np.random.randn(sesiones)*factor_sigma + alphadatos = np.exp(datos)datos = datos.cumprod()# reinicio y creacion del graficoplt.clf()plt.plot(datos) 
Ir a respuesta