Communitygithub.com

jwd2a/skills

Analisa o portfólio de ações de Justin com comparação com o S&P 500 (SPY).

O que é skills?

Este skill fornece um conjunto completo de ferramentas de análise de portfólio de ações, voltado para o portfólio pessoal de Justin. Ele inclui cálculo de volatilidade, matriz de correlação, índice Sortino, diversificação e crescimento comparado ao benchmark S&P 500 (SPY). Além disso, oferece um monitor de trailing stops ajustados por beta, relatórios multi-cadência (diário, semanal, mensal, trimestral e anual) com formatação para Slack, um screener de momentum que vasculha o mercado em busca de ações com forte impulso, e um rastreador de rotação que registra entradas e saídas do portfólio. Os dados de preços são obtidos via Finnhub (cotações ao vivo) e AlphaVantage (histórico), com tratamento de limites de taxa. O skill é implementado em Python e projetado para ser executado via linha de comando, sendo útil para desenvolvedores e investidores que desejam automatizar a análise e o monitoramento de seus portfólios.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jwd2a/skills/tree/HEAD/portfolio

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Skill de Análise de Portfólio

Analisa o portfólio de ações de Justin com comparação com o S&P 500 (SPY).

Arquivos

  • portfolio.py — Classe Portfolio para gerenciar posições
  • analyze.py — Motor de análise (volatilidade, correlação, Sortino, diversificação, crescimento)
  • prices.py — Módulo de obtenção de preços

Uso

Atualizar portfólio a partir de CSV da Fidelity

from portfolio import Portfolio
p = Portfolio()
p.load_from_fidelity_csv("/caminho/para/export.csv")
p.save()

Executar análise

python analyze.py                    # Padrão 90 dias
python analyze.py --days 180         # Período personalizado
python analyze.py --json portfolio.json --days 60

Saída

Texto formatado para Slack com:

  • Volatilidade por posição e do portfólio (anualizada)
  • Matriz de correlação
  • Pontuação de diversificação
  • Índice Sortino (taxa livre de risco 0%)
  • Crescimento vs. benchmark SPY

Monitor de Trailing Stop

trailing_stops.py — Trailing stops de volatilidade ajustados por beta para cada posição.

Como funciona

  • Calcula volatilidade anualizada móvel de 30 dias e beta em relação ao SPY
  • Rastreia o preço máximo de cada posição
  • Calcula queda ajustada = queda bruta do máximo − (beta × queda do SPY do seu máximo)
  • Alerta quando a queda ajustada excede 1,5× a volatilidade diária por 2 dias consecutivos
  • Estado persistido em stops_state.json

Uso

python trailing_stops.py --status          # Mostra níveis atuais para todas as posições
python trailing_stops.py --check           # Monitoramento diário (dispara alertas em violação)

Saída

  • --status: Preço atual, máximo, volatilidade, beta, distância até o nível de stop
  • --check: Alerta se violado, senão "tudo limpo". Reinicia o estado após alerta.

Relatórios

report.py — Relatórios de portfólio em múltiplas cadências com saída formatada para Slack.

Uso

python report.py --cadence daily       # Resumo diário curto (cotações ao vivo Finnhub)
python report.py --cadence weekly      # Desempenho semanal + trailing stops
python report.py --cadence monthly     # Análise completa, retrospectiva de 30 dias
python report.py --cadence quarterly   # 90 dias + tendências momentum + deriva de pesos
python report.py --cadence yearly      # 252 dias + ranking anual + tendência de diversificação

Detalhes da Cadência

  • Diário: ~10-15 linhas. Cotações ao vivo, mudanças nas posições, melhor/pior, comparação com SPY
  • Semanal: ~20 linhas. Mudanças semanais, distâncias dos trailing stops, volatilidade
  • Mensal: Pacote completo — volatilidade, matriz de correlação, Sortino, diversificação, crescimento vs. SPY, P/L, trailing stops
  • Trimestral: Mensal + tendências de momentum (acelerando/desacelerando), deriva de peso em relação a pesos iguais
  • Anual: Mensal + rankings anuais, tendência da pontuação de diversificação por trimestre

Fontes de Dados

  • Diário: Cotações ao vivo Finnhub (sem problemas de limite de taxa)
  • Semanal+: Histórico AlphaVantage (atraso de 3s entre chamadas para controle de limite)

Screener de Momentum

momentum_screener.py — Varre o mercado em busca das principais ações com momentum usando dados do Yahoo Finance.

Uso

python3 momentum_screener.py                          # Padrão: top 20 por momentum de 10 dias
python3 momentum_screener.py --lookback 5             # Momentum de 5 dias
python3 momentum_screener.py --lookback 20            # Momentum de 20 dias (1 mês)
python3 momentum_screener.py --top 10                 # Top 10 resultados
python3 momentum_screener.py --universe bullpen       # Varre apenas ações do bullpen
python3 momentum_screener.py --universe sp500         # S&P 500 completo
python3 momentum_screener.py --min-volume 500000      # Filtro de volume médio diário mínimo
python3 momentum_screener.py --compare                # Marca posições atuais nos resultados
python3 momentum_screener.py --json                   # Saída JSON

Saída

Por ação: retorno bruto, volatilidade anualizada, momentum ajustado ao risco, consistência de dias positivos, volume médio.

Rastreador de Rotação

rotation_tracker.py — Registra entradas/saídas do portfólio e rastreia o desempenho da rotação.

Uso

python3 rotation_tracker.py --log GOOGL exit 311.49 "Violação de trailing stop"
python3 rotation_tracker.py --log POWL enter 85.20 "Seleção do screener de momentum"
python3 rotation_tracker.py --stats          # Estatísticas de negociação (taxa de acerto, ganho/perda médio, etc.)
python3 rotation_tracker.py --json           # Saída JSON

Documento de Estratégia

Veja docs/finance/STRATEGY.md para a documentação completa da estratégia de rotação de momentum.

Notas

  • Usa AlphaVantage para preços históricos (5 chamadas/min no nível gratuito, atraso de 3s entre chamadas)
  • Dados do portfólio armazenados como JSON em ~/hex/skills/portfolio/portfolio.json
  • SPAXX (fundo do mercado monetário) é excluído das análises

Habilidades Relacionadas