Metodología
Cómo calculamos returns, seleccionamos picks y manejamos recompras.
Última actualización: 2026-04-10
1. Introducción
Esta página documenta el método exacto con el que calculamos el rendimiento del portafolio y seleccionamos las posiciones que aparecen en páginas como /lecciones. El objetivo es que cualquier persona (humana o agente de IA) pueda auditar nuestro track record sin tener que confiar en nuestra palabra.
2. Tamaño de posición
Cada posición se modela como una inversión de $50 USD. Compramos fracciones de acciones, así que la cantidad de shares es $50 / precio_compra. Esto NO representa montos reales de inversión — es un tamaño hipotético fijo para poder comparar picks de forma consistente sin que el tamaño de posición distorsione los returns.
3. Cálculo del return
El return de una posición individual se calcula así: return_pct = ((precio_actual − precio_promedio_ponderado) / precio_promedio_ponderado) × 100. Los precios actuales se obtienen del último snapshot diario almacenado en nuestra base de datos, que a su vez los fetchea de Yahoo Finance en cada día de mercado.
4. Precio promedio ponderado (recompras)
Cuando tenemos varias compras del mismo ticker, el precio efectivo es el promedio ponderado. En nuestro modelo cada transacción invierte los mismos $50 hipotéticos, así que el promedio ponderado por shares es equivalente a: precio_promedio = suma($50) / suma($50/precio_i). Una recompra a precio más bajo mejora el promedio y reduce la pérdida; una recompra a precio más alto lo empeora.
Ejemplo: Si compramos XYZ a $100 y luego a $50, cada tramo de $50 compra 0.5 + 1 = 1.5 shares. El precio promedio es $100 / 1.5 ≈ $66.67. Si el precio actual es $60, el return es (60 − 66.67) / 66.67 ≈ −10%, no −40%.
5. Selección de picks perdedores (lecciones)
La lista en /lecciones se genera con un algoritmo puro que opera sobre el mismo cálculo de return. El algoritmo NO puede ser editado manualmente — todo cambio requiere modificar el código fuente público.
- 1. Agrupar todas las transacciones por ticker y calcular el precio promedio ponderado
- 2. Calcular el return % basado en el precio actual del snapshot más reciente
- 3. Filtrar posiciones con al menos 30 días desde la PRIMERA compra (para evitar ruido de corto plazo)
- 4. Filtrar posiciones con return < 0
- 5. Ordenar ASC por return_pct (peor primero). Desempate: fecha de primera compra más antigua
- 6. Tomar los primeros 5. Si hay menos de 5 negativas, mostrar solo las que haya
6. Splits de acciones
Detectamos splits automáticamente comparando el precio histórico con el precio actual. Si el ratio indica un split (ej. 2:1, 3:1), ajustamos el precio de compra retroactivamente para que las shares y el return reflejen la realidad post-split. El detector está en `src/lib/split-detection.ts`.
7. Frecuencia de actualización
Los precios se actualizan en cada día de mercado abierto (lunes a viernes, salvo días feriados) a las 4:30 PM ET mediante un cron job que obtiene cotizaciones de Yahoo Finance y guarda un snapshot en Supabase. Las páginas públicas que dependen de estos datos se cachean por ~5 minutos con stale-while-revalidate.
8. Qué NO está incluido
Nuestros cálculos son BRUTOS. No incluyen: impuestos sobre dividendos ni ganancias de capital, comisiones de bróker, slippage de ejecución, diferencias de tipo de cambio para acciones no-USD. Los returns reales que obtendría un inversor particular serán siempre menores que los mostrados.
9. Limitaciones conocidas
Nuestro modelo asume ejecución instantánea a precio de cierre, reinversión perfecta de dividendos (actualmente no modelados), y disponibilidad de fracciones de shares (lo cual no siempre es posible en todos los brókers). Estas simplificaciones son estándar en la mayoría de los backtests pero importan a la hora de comparar con rendimientos reales de una cuenta.
10. Cómo auditar todo esto
Todo el código es público. Los cálculos viven en `src/lib/position-utils.ts` (aggregatePositions) y `src/lib/lessons.ts` (selectLessons). Las transacciones viven en `src/data/stocks.ts` y cada una tiene un attestation UID on-chain. Si encuentras un error en el cálculo o la metodología, abre un issue en GitHub o escribe a Hello@vectorialdata.com.