Saltar a contenido

Handling de dividendos en efectivo

Los holdings pagan dividendos. ¿Reinvertir en el mismo stock, redistribuir al portfolio, o mantener cash? Resuelve OP-02. Decisión: cash accumulado + rebalance next monthly (opción C).

Las 3 opciones

A. DRIP (Dividend Reinvestment)

  • Cada dividendo se reinvierte automáticamente en el stock que lo pagó.
  • Pro: zero fricción adicional (si el broker lo ofrece gratis).
  • Con: sesga el portfolio hacia dividend-paying stocks over time. Aumenta position concentrada sin signal.

No recomendado — puede violar cap de position.

B. Redistribute inmediato al portfolio

  • Cada dividendo se divide proporcionalmente entre todos los holdings actuales.
  • Pro: mantiene el portfolio balanceado.
  • Con: 10 micro-trades por cada dividendo. Fricción masiva con RACIONAL spread 0.99%. Si el dividendo es $50 y 10 micro-trades de $5 cada uno @ 0.99% spread = $5 en fricción = 10% del dividendo consumido.

No recomendado — inviable en RACIONAL por fees.

C. Cash accumulado + rebalance next monthly ← ELEGIDO

  • Dividendos quedan en cash hasta el próximo monthly rebalance.
  • En rebalance, el cash se aplica al buying de whatever el composite score determina.
  • Pro: zero extra fricción entre rebalances. Cash es "dry powder" para el próximo.
  • Con: portfolio temporal slightly under-invested (cash balance small).

Magnitud esperada

S&P500 dividend yield actual: ~1.5% anual.

Portfolio $10k → ~$150/año en dividendos → ~$12/mes promedio.

Sobre un portfolio de $10k, $12 cash representa 0.12% under-investment promedio — irrelevant.

Sobre un portfolio $100k: $120/mes → aún <0.12% under-investment.

Implementación

# En Data Agent daily run
def fetch_pending_dividends(positions_md):
    # Check cada ticker in positions.md vs dividend calendar
    # yfinance.Ticker(sym).dividends tiene dates
    # Filter dividends pagados en last 7 days
    for pos in positions:
        divs = get_recent_dividends(pos.ticker, since=today-7d)
        for div in divs:
            if div.pay_date <= today:
                amount = div.per_share * pos.qty
                update_cash_balance(positions_md, +amount)
                log_dividend(pos.ticker, amount, div.pay_date)

En positions.md:

## Cash balance
- Cash: $156.30
- Pending dividends: $25.00 (AAPL ex-div 2026-04-15, pay 2026-04-29)

Durante rebalance mensual

El Strategy Agent ve el cash balance. Al buying new positions:

  • Priority 1: cerrar sells de stocks que salieron del top 10.
  • Priority 2: comprar new entries usando cash total (previous cash + proceeds de sells + dividendos acumulados).
  • Equal-weight target: cada new position 10% del portfolio value.

Edge cases

Stock dividends (no cash)

  • Algunos stocks pagan dividendos en más shares en lugar de cash.
  • Handling: ajustar qty en positions.md manualmente. No afecta composite.

Special dividends

  • Distribuciones especiales (ej. spin-off, merger cash consideration).
  • Trata como cash dividend pero marca en el log por tax purposes.

Withholding impact

  • Ver concepts/chile-us-tax-regime: 15% withholding US sobre dividends con treaty.
  • Cash que llega a RACIONAL ya está post-withholding. El user aún debe reportar al SII.

Dividend calendar

  • Los dividendos son announced ex-date, recorded ex-date, paid ~2 semanas después.
  • El Data Agent debe monitorear: si un holding tiene ex-div en próxima semana, mark it como "pending cash".

Tax loss harvesting conjunto (sinergias)

El cash dividendo queda en portfolio. Durante end-of-year:

  • Si algún holding está en loss posición → considerar sell para realizar loss.
  • Use el cash acumulado para buy un equivalent stock (no el mismo, para evitar wash sale).
  • Reduce SII payable sin perder exposure al mercado.

Gaps

  • Automatización de detección de ex-div dates (Data Agent enhancement).
  • Tratamiento específico de ADR dividends (foreign stocks in US listings) — withholding puede ser diferente.
  • Si RACIONAL cobra fee por distribución de dividends — verificar con user.

Relaciones