En SIKURI rediseñamos GoldModel como un framework cuantitativo en Python (v2.2) basado en finanzas conductuales. El precio del oro se modela con nueve features point-in-time que combinan sentimiento y condiciones macro. A diferencia de la v1 (hoja de cálculo con pesos fijos 40/25/35), la v2.2 pondera cada feature por su Information Coefficient (IC) rolling con el retorno futuro del oro, aplica una capa de gestión de riesgo y valida el resultado con walk-forward honesto y permutation test. El resultado central es honesto: no hay evidencia estadística de skill (p = 0.196).
ADVERTENCIA: GoldModel es software educativo únicamente. No constituye asesoría de inversión ni recomendación de compra o venta de activos financieros. No es un caso de estudio ni una validación empírica de una estrategia de trading. El permutation test sobre datos reales salió no significativo (p = 0.196); no se reivindica skill predictivo. El desempeño pasado no garantiza resultados futuros. Consulte a un asesor financiero autorizado antes de tomar decisiones de inversión.
Premisa central: El oro no se comporta como un activo financiero tradicional: no genera flujos de caja y su precio responde a variables de sentimiento (miedo/euforia colectiva) y a variables macro (tasas reales, dólar, inflación, crédito, volatilidad). GoldModel captura ambas dimensiones en un solo framework accionable, y la validación honesta decide si esas señales tienen valor real.
Arquitectura del modelo
GoldModel v2.2 opera en cuatro capas: (1) extracción point-in-time desde fuentes primarias (LBMA, FRED, CFTC, Yahoo Finance), (2) ingeniería de features estrictamente rolling —z-scores y percentiles con ventanas pasadas y lags de publicación—, (3) modelo con pesos adaptativos por IC más capa de riesgo (vol-targeting, multiplicador de régimen, stop-loss), y (4) validación honesta: walk-forward con refit por fold, fold distribution, permutation test, stress test y sensibilidad. El output es un panel mensual, la serie de posición y un reporte JSON; ya no un archivo Excel de 9 hojas.
Fuentes de datos
| Fuente | Dato | Cobertura |
|---|---|---|
| LBMA | Precio del oro (fixing PM) — disponible el mismo mes, sin lag | 1971–presente |
| FRED | TIPS, DXY, Credit Spread, Breakeven, VIX — desplazados 3 días por lag de publicación | Variable por serie |
| CFTC | Posicionamiento institucional (Managed Money) — desplazado por lag de publicación antes del resample mensual | 2006–presente |
| Yahoo Finance | GDX ETF (minería de oro) | 2004–presente |
Features de sentimiento (Animal Spirits)
Capturan la psicología colectiva del mercado del oro. Todos los scores se normalizan en una escala 0–100 donde un valor alto es más alcista; la interpretación es contraria en extremos.
| Feature | Qué captura | Relación con el oro |
|---|---|---|
| Gold vs MA 12M | Momentum: desviación del precio respecto a su media anual | Directa |
| Gold 6M streak | Percentil rolling del retorno a 6 meses | Directa |
| GDX / Gold Ratio | Sentimiento del sector minero: las mineras anticipan al oro | Directa |
| COT Managed Money | Posicionamiento neto institucional (CFTC) | Directa — contraria en extremos |
Features macro (Financial Index)
Anclan el modelo a la macro. TIPS, DXY y VIX se invierten para que un valor alto del score indique condiciones favorables al oro; todo se computa con ventanas pasadas y lag de publicación (sin look-ahead).
| Feature | Qué captura | Relación con el oro |
|---|---|---|
| TIPS Real Yield | Tasas reales a 10 años | Inversa |
| DXY | Índice del dólar | Inversa |
| Credit Spread | Moody Baa − Aaa: estrés crediticio | Directa |
| Breakeven Inflation | Expectativas de inflación a 10 años | Directa |
| VIX | Volatilidad implícita (CBOE) | Inversa |
Pesos adaptativos por Information Coefficient
En lugar de pesos fijos (v1: 40/25/35), el modelo pondera cada feature por su IC de Spearman rolling con el retorno a un mes del oro. El IC solo usa valores conocidos hasta t−1, sin look-ahead.
- Se computa el IC rolling de cada feature contra el retorno futuro del oro (ventana configurable).
- Los pesos negativos se recortan a cero —las features que no predicen se descartan— y se re-normalizan a suma 1.
- Los pesos cambian con el tiempo según el poder predictivo reciente; los umbrales de señal son percentiles de la distribución pasada del score, no bandas fijas.
Capa de gestión de riesgo
La posición nunca es binaria. El mismo stack de riesgo se aplica en entrenamiento (refit por fold) y en despliegue, para no optimizar sobre un pipeline que no se ejecuta.
- Vol-targeting: la posición se escala hacia una volatilidad objetivo anual.
- Multiplicador de régimen (vol + tendencia): tamaño reducido en regímenes estresados.
- Stop-loss mensual y control de drawdown propio de la estrategia.
- Costos amplificados en regímenes de alta volatilidad (spreads más anchos).
Señales y posicionamiento
La señal es un score continuo. La posición resultante se sitúa entre una posición mínima y una máxima, sin buckets discretos.
- Compra fuerte cuando el score supera el percentil alto (buy_threshold_pct) de su propia distribución pasada; venta fuerte bajo el percentil bajo.
- Exposición continua: min_position ≤ posición ≤ max_position, escalada por vol-targeting y régimen.
- El balance de señales es más realista que en la v1: ~39% HOLD, ~32% BUY y ~29% SELL frente al 89% NEUTRO de la hoja de cálculo.
Implementación técnica
GoldModel v2.2 es un paquete Python con pipeline, tests y CLI. Se distribuye vía pip y se ejecuta desde la línea de comandos.
Instalación
git clone https://github.com/Writecode4/goldmodel.git
cd goldmodel
pip install -e .
Python API
from goldmodel_v2 import run_analysis
results = run_analysis()
print(results['walk_forward'].metrics)
print(results['fold_sharpes'])
print(results['permutation'].p_value)
CLI
python -m goldmodel_v2
python -m goldmodel_v2 --json summary.json
Output: reporte JSON de validación
El modelo genera un panel mensual, la serie de posición y un reporte JSON con las métricas de validación honesta:
| Sección | Contenido |
|---|---|
| Walk-forward | Sharpes fold a fold con refit; la CLI imprime la variante ejecutada. |
| Fold distribution | Mínimo, mediana, máximo y % de folds positivos — métrica principal. |
| Permutation test | Sharpe observado vs distribución nula (bloques de 36m), p-value y bandera de degeneración. |
| OOS hold-out | Últimos 36 meses separados antes de cualquier análisis; resultado indicativo. |
| Stress test | Episodios canónicos del oro (2008, 2013-15, 2020) vs buy-and-hold. |
| Sensitivity | Barrido de ventana de IC y umbrales con dispersión de métricas. |
Métricas de backtest (datos reales, 2026-08)
Sharpe por variante: modelo refit (0.96) vs fijo (0.708) vs benchmark (0.98)
Permutation test: observado 0.708 vs null media 0.508 (p95 0.764) — p = 0.196
Distribución de Sharpes por fold (9 folds): min 0.25 · mediana 2.62 · max 8.85
Nota importante (honestidad metodológica): El walk-forward con refit muestra Sharpe 0.96 frente a un benchmark de 0.98, y la fold distribution fue 9/9 positiva. Sin embargo, el permutation test (50 shuffles, bloques de 36m) dio p = 0.196: no hay evidencia estadística de skill. Con solo 12 meses por fold, la dispersión (min 0.25, max 8.85) es demasiado amplia para concluir. GoldModel v2.2 se publica como un ejercicio de validación transparente, no como una estrategia rentable.
Limitaciones conocidas
- Sin evidencia estadística de skill: el permutation test sobre datos reales salió p = 0.196 (no significativo); el edge del pipeline de parámetros fijos no se distingue de ruido.
- Muestra pequeña por fold: 12 meses por fold hacen que la fold distribution sea muy dispersa (min 0.25, max 8.85).
- OOS de 36 meses indicativo: un solo camino, sin poder estadístico; se usa una única vez al final.
- Long-only sobre oro, sin apalancamiento; hay gaps históricos en TIPS/DXY/VIX y ruido de costos en regímenes estresados.
- Frecuencia mensual: no captura oportunidades semanales o intradía.
¿Por qué usamos behavioral finance?
Los modelos tradicionales de valoración (DCF, múltiplos) funcionan mal con el oro porque el oro no genera flujos de caja. Su precio está determinado por la psicología colectiva y las condiciones macro. GoldModel aborda esto desde dos ángulos:
- Sentimiento (Animal Spirits): captura el ruido emocional del mercado — el miedo y la codicia que mueven los flujos institucionales.
- Macro (Financial Index): ancla el modelo a tasas reales, dólar, inflación, crédito y volatilidad.
La combinación de ambas familias permite construir scores continuos. La validación honesta (permutation test, fold distribution) decide si esos scores tienen valor real: en este dataset, la evidencia aún no lo confirma.
Próximos pasos
- Calibrar el null con más shuffles y bootstrap para ganar poder estadístico.
- Frecuencia semanal en lugar de mensual.
- Features on-chain (flujos de ETF de oro) y señales por régimen de mercado.
- Paper trading de 6-12 meses antes de cualquier uso real.
- Calibración de costos por régimen con datos de ejecución reales.