Sector concentration rules¶
Regla inicial era "30% cap por sector GICS". Resuelve SR-03. Refinamiento: agregar cap por sub-industry (ej. "Software-Systems", "Semiconductors") de 15% para evitar "big-tech concentration" disfrazada.
El problema del GICS sector¶
GICS tiene 11 sectors principales:
- Communication Services
- Consumer Discretionary
- Consumer Staples
- Energy
- Financials
- Health Care
- Industrials
- Information Technology
- Materials
- Real Estate
- Utilities
Problema: Information Technology incluye AAPL, MSFT, NVDA, AMD, INTC, ORCL, ADBE, etc. Todos con exposición similar a mega-cap tech + AI boom.
Un portfolio con 30% tech = 3 holdings en tech con ~10% cada uno. Todos moverán juntos durante tech correction.
Ejemplo reciente: marzo 2022 → nov 2022, IT sector perdió 35% mientras Energy subió 50%. Un portfolio sin cap sub-industry habría quedado expuesto.
Sub-industries — GICS nivel 4¶
Dentro de Information Technology, sub-industries incluyen:
- Software - Systems (MSFT, ORCL, SAP)
- Software - Applications (ADBE, CRM)
- Semiconductors (NVDA, AMD, INTC)
- Technology Hardware (AAPL, Dell)
- IT Services (Accenture, IBM)
- etc.
Cap por sub-industry reduce correlación dentro del portfolio.
Recomendación¶
Stack de 3 caps:
1. Por posición (ya existente)¶
- Max 10% por ticker (equal weight con 10 posiciones).
- Hard rule — Risk Agent reject.
2. Por sector GICS (ya existente)¶
- Max 30% por sector nivel 1 (11 sectors).
- Soft rule — si el composite ranking tiene 4 top holdings en un sector, accept pero warn.
3. Por sub-industry GICS nivel 4 (NUEVO)¶
- Max 15% por sub-industry.
- Hard rule — si agregar una posición llevaría sub-industry sobre 15%, rank check el siguiente en composite.
4. Correlation cap adicional (avanzado, post-MVP)¶
- Max 3 holdings con correlation 0.7+ en último 6m.
- Captura correlation emergente que GICS no refleja (ej. empresas que no son "mismo sector" pero reaccionan similar a FED rates).
- Requiere correlation matrix del portfolio — complejidad adicional.
Implementación¶
SECTOR_CAP = 0.30
SUB_INDUSTRY_CAP = 0.15
POSITION_CAP = 0.10
def check_concentration(proposed_position, current_portfolio):
new_port = current_portfolio + [proposed_position]
# Position
if position_pct(new_port, proposed_position) > POSITION_CAP:
return REJECT, "position cap"
# Sector
sector_pct = sum_pct_by_sector(new_port, proposed_position.sector)
if sector_pct > SECTOR_CAP:
return REJECT, f"sector {proposed_position.sector} cap"
# Sub-industry
subind_pct = sum_pct_by_subindustry(new_port, proposed_position.subindustry)
if subind_pct > SUB_INDUSTRY_CAP:
return REJECT, f"sub-industry {proposed_position.subindustry} cap"
return APPROVE
Integra al Risk Agent (concepts/agent-prompts).
Efecto sobre ranking¶
Supongamos Strategy Agent rankea top 10:
1. NVDA (Semi) 2.5
2. AMD (Semi) 2.3
3. AVGO (Semi) 2.2 ← sub-industry Semi ya en 20%, REJECT
4. MSFT (Software-Systems) 2.1
5. ...
AVGO es rejected por sub-industry cap. El slot va al siguiente fuera del top 3 semis.
Pérdida de alpha estimada: si 3 semis top 10 vs 2 semis + sustituto rank 11, diferencia composite score ~0.5. Cost esperado: <1% annualized en return.
Ganancia de risk: diversification reduce portfolio volatility. Esperable Sharpe mejora ~0.05-0.1.
Net: worth it.
Casos especiales¶
ETFs sectoriales¶
Si el user decide incluir sector ETFs (XLK, XLF, etc.) en el universe: treat cada ETF como sus top 3 holdings combinados para caps. Evita "meta-concentration" de incluir XLK + AAPL + MSFT.
REITs y financials¶
Estos sectors tienen sub-industries muy correlacionadas internally. Caps adicionales útiles:
- REITs: max 2 holdings.
- Banks: max 2 holdings.
- Insurance: max 2 holdings.
Sector ciclicas vs defensivas¶
Cyclicals (Industrials, Materials, Discretionary) se mueven juntos en recessions. Si el regime filter (concepts/regime-detection) marca "transition", considerar reducir cap cyclicals de 30% → 20% temporalmente.
Gaps¶
- Exact sub-industry mapping para los top 100 — requiere fuente GICS (SimFin tiene, verificar).
- Empirical test: ¿cuánto cambia performance vs sin el sub-industry cap en backtest?
- Interaction entre caps y factor scores: ¿qué pasa si value factor está concentrado en Financials por macro?
Relaciones¶
- Resuelve: SR-03.
- Refina: concepts/trading-guardrails (reglas numéricas duras).
- Implementación en: concepts/agent-prompts (Risk Agent check).
- Protección adicional ante: analysis/momentum-crash-risk (sectors concentrados amplifican crash).