Open chao5monkey opened 1 year ago
Creo que la dificultad está en definir el endpoint de los datos de argy, el scraper en si mismo. Podemos empezar por ahí.
Tenes pensado como se puede aplicar un LLM a la solucion?
Muy bueno el aporte! Muy ordenado y fácil de entender.
JPM - JPMorgan Chase & Co., BAC - Bank of America Corporation, C - Citigroup Inc., WFC - Wells Fargo & Co., GS - The Goldman Sachs Group, Inc., MS - Morgan Stanley.
Luego se analizan cuando comprar o vender en términos de las métricas definidas.
Pasos a efectuar:
[ ] Calcular los índices más usados de value investing en una clase. Ejemplos con Price-to-Earnings, Price-to-Book, Return on Equity, Dividend Yield
def calculate_pe_ratio(price_per_share, earnings_per_share):
return price_per_share / earnings_per_share
def calculate_pb_ratio(market_price_per_share, book_value_per_share):
return market_price_per_share / book_value_per_share
def calculate_roe(net_income, shareholders_equity):
return (net_income / shareholders_equity) * 100
[ ] Elegir un rubro y acciones de ese sector con datos de fácil acceso. Por ejemplo, la info de las acciones que puse se puede sacar de yahoo finance, google finance, reuters, etc.
[ ] Efectuar un análisis de la evolución de estos índices con el tiempo y compararlos con su competencia
Gracias Emma por los detalles.
Ahí mandé un PR nuevo (https://github.com/Emmatassone/GE-Bots/pull/16) para empezar a trabajar un poco sobre esto. La idea en principio es definir una capa intermedia que haga más fácil la comunicación entre el que recolecta los datos (de la fuente que sea) y el que los procesa para generar informes, sin tener que crear clases o cosas complejas. La motivación principal es definir algún estándar que nos permita mover data de un lado a otro en dataframes, registros, dicts o lo que sea, sin tener que andar fijándonos en cosas como "ah pero fulanito llamó a la columna roe y yo la llamé return_on_equity" y que se vuelva todo confuso o tedioso porque hay que andar viendo qué nombre se usó acá o allá para x concepto, y si efectivamente fulanito quiso decir lo que yo creo que quiso decir.
La idea es definir y documentar los nombres de conceptos con los que trabajamos como constantes (e.g. NET_INCOME, RETURN_ON_EQUITY) en un solo lugar. Por ejemplo:
"""
NET_INCOME (np.float64), equivalent to the XBRL US GAAP taxonomy concept us-gaap:NetIncomeLoss, defined as the
"portion of profit or loss for the period, net of income taxes, which is attributable to the parent."
"""
NET_INCOME = 'net_income'
"""
RETURN_ON_EQUITY (np.float64) is net income divided by shareholder's equity. In terms of XBRL US GAAP taxonomy
elements, it can be defined as the ratio us-gaap:NetIncomeLoss / us-gaap:StockholdersEquity.
"""
RETURN_ON_EQUITY = 'return_on_equity'
"""
STOCKHOLDER_EQUITY (np.float64), equivalent to the XBRL US GAAP taxonomy concept us-gaap:StockholdersEquity, defined
as the "amount of equity (deficit) attributable to parent. Excludes temporary equity and equity attributable to
noncontrolling interest."
"""
STOCKHOLDER_EQUITY = 'stockholder_equity'
Después estos nombres se pueden usar para crear DataFrames por un lado (del lado del recolector de datos):
data = pd.DataFrame([
{
concept.TICKER_SYMBOL: 'XYZ',
concept.PERIOD_START: np.datetime64('2021-01-01'),
concept.NET_INCOME: 2000.0,
concept.STOCKHOLDER_EQUITY: 2000.0,
},
{
concept.TICKER_SYMBOL: 'XYZ',
concept.PERIOD_START: np.datetime64('2022-01-01'),
concept.NET_INCOME: 1000.0,
concept.STOCKHOLDER_EQUITY: 2000.0,
},
])
y métricas del otro (del lado del que genera los reportes o hace algún tipo de análisis):
def return_on_equity(df: pd.DataFrame) -> pd.Series:
"""
Computes standard RETURN_ON_EQUITY given a dataframe with standard columns NET_INCOME and STOCKHOLDER_EQUITY.
The result is returned as a pandas series.
"""
return df[concept.NET_INCOME] / df[concept.STOCKHOLDER_EQUITY]
data[concept.RETURN_ON_EQUITY] = metrics.return_on_equity(data)
Por supuesto, no es más que una propuesta y está todo abierto a debate.
Saludos.
Introducción
Este ticket es una propuesta de feature. La tarea consiste en producir y proveer un análisis financiero que permita determinar la solidez financiera de una o varias empresas en base a información públicamente disponible.
Motivación: Una empresa con finanzas estables puede ser una buena oportunidad de inversión si adicionalmente se encuentra que está sub-valuada acorde a diversas técnicas de valuación. Este issue trata principalmente sobre la parte del análisis para determinar el rendimiento financiero; la valuación puede ser definida en un issue separado. Estos features podrían eventualmente ser parte de uno más grande para la identificación automatizada de oportunidades de inversión.
Detalle del procedimiento
1) El usuario provee un conjunto de tickers de empresas.
2) Para el conjunto de empresas definido por el usuario, se recolecta información públicamente disponible. Para el caso de empresas de EE.UU. es posible obtener los reportes anuales en formato XBRL del sitio de la SEC. Para empresas argentinas será necesario identificar otras fuentes.
3) Para cada empresa, utilizando la información recolectada, calcular una variedad de métricas. Utilizando estas métricas, ejecutar una serie de evaluaciones para identificar aspectos positivos y negativos del funcionamiento de la empresa e.g. ❌ cobertura de intereses <= 1, ✅ patrimonio neto >>> pasivos. Sería ideal que estas evaluaciones sean definidas por alguien con experiencia en análisis financiero y value investing.
4) Generar un informe con las distintas evaluaciones organizadas por categoría (definir formato).
Cómo continuar
Sería ideal llegar a un consenso sobre la validez del procedimiento que se describe arriba, y adicionalmente definir en más detalle los items 2, 3 y 4. Alternativamente, si estamos de acuerdo en la validez del proceso, se puede implementar una versión básica pero extensible , empezando con unos pocos criterios y un reporte simple, y eventualmente extender con métricas adicionales.