Introdução ao Setor de Varejo Brasileiro
O setor de varejo é um dos mais importantes da economia brasileira, representando aproximadamente 20% do PIB nacional e empregando milhões de trabalhadores. Para investidores, entender a dinâmica desse setor é fundamental para identificar oportunidades e riscos.
Neste guia completo, vamos analisar:
- Panorama do setor varejista brasileiro
- Principais empresas listadas na B3
- Indicadores fundamentalistas específicos do varejo
- Comparativo detalhado entre concorrentes
- Código Python para automatizar suas análises
┌─────────────────────────────────────────────────────────────────┐
│ ECOSSISTEMA DO VAREJO B3 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ VESTUÁRIO ELETRO/MÓVEIS ALIMENTAR │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ LREN3 │ │ MGLU3 │ │ CRFB3 │ │
│ │ ARZZ3 │ │ VIIA3 │ │ ASAI3 │ │
│ │ SOMA3 │ │ BHIA3 │ │ PCAR3 │ │
│ │ CEAB3 │ │ │ │ GMAT3 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ FARMÁCIAS E-COMMERCE DIVERSOS │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ RADL3 │ │ MELI34* │ │ AMER3 │ │
│ │ PNVL3 │ │ BKBR3 │ │ NTCO3 │ │
│ │ PGMN3 │ │ LWSA3 │ │ VIVA3 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ * BDR - Mercado Livre │
└─────────────────────────────────────────────────────────────────┘Características Únicas do Setor de Varejo
1. Alta Sensibilidade ao Ciclo Econômico
O varejo é altamente cíclico. Quando a economia vai bem, as vendas disparam. Em recessões, o setor sofre primeiro:
| Fator Econômico | Impacto no Varejo |
|---|---|
| Taxa de juros alta | Negativo - Crédito caro, menos consumo |
| Desemprego alto | Muito negativo - Queda direta nas vendas |
| Inflação alta | Negativo - Compressão de margens |
| PIB em crescimento | Positivo - Mais consumo |
| Massa salarial crescendo | Muito positivo - Mais poder de compra |
2. Margens Apertadas
O varejo opera com margens líquidas baixas (1-8%), compensadas pelo alto giro de estoque:
┌────────────────────────────────────────────────────┐
│ MARGENS TÍPICAS POR SEGMENTO │
├────────────────────────────────────────────────────┤
│ │
│ Supermercados ████░░░░░░░░░░░░░░░░ 1-3% │
│ Eletro/Móveis ██████░░░░░░░░░░░░░░ 3-5% │
│ Vestuário ████████████░░░░░░░░ 8-12% │
│ Farmácias ██████░░░░░░░░░░░░░░ 3-5% │
│ Luxo/Premium ████████████████░░░░ 12-18% │
│ │
└────────────────────────────────────────────────────┘3. Sazonalidade Forte
As vendas concentram-se em datas específicas:
- Natal: 25-35% do faturamento anual
- Black Friday: 10-15% do faturamento anual
- Dia das Mães: 8-12% do faturamento anual
- Dia dos Namorados: 5-8% do faturamento anual
4. Transformação Digital
O e-commerce revolucionou o setor. Empresas que não se adaptaram perderam relevância:
EVOLUÇÃO DO E-COMMERCE NO VAREJO BRASILEIRO
2019: ████████░░░░░░░░░░░░░░░░░░░░░░ 5% das vendas
2020: ████████████████░░░░░░░░░░░░░░ 11% (COVID)
2021: ██████████████████░░░░░░░░░░░░ 13%
2022: ████████████████░░░░░░░░░░░░░░ 11%
2023: ██████████████████░░░░░░░░░░░░ 12%
2024: ████████████████████░░░░░░░░░░ 14%Análise das Principais Empresas
MGLU3 - Magazine Luiza
A Magazine Luiza é uma das maiores varejistas do Brasil, com forte presença tanto física quanto digital.
Modelo de Negócio:
- Lojas físicas + marketplace digital
- Super App com ecossistema de serviços
- Fintech (MagaluPay)
- Logística própria (Magalu Entregas)
Pontos Fortes:
- Marca forte e reconhecida
- Ecossistema integrado (físico + digital)
- Cultura de inovação
- Logística eficiente
Pontos de Atenção:
- Endividamento elevado
- Margens pressionadas
- Competição acirrada com Mercado Livre e Amazon
- Dependência de juros baixos
VIIA3/BHIA3 - Grupo Casas Bahia (ex-Via)
O Grupo Casas Bahia passou por reestruturação significativa nos últimos anos.
Modelo de Negócio:
- Casas Bahia e Ponto (ex-Ponto Frio)
- Marketplace digital
- banQi (fintech)
- Foco em classes C e D
Pontos Fortes:
- Capilaridade (lojas em todo Brasil)
- Forte presença em móveis e eletrodomésticos
- Crediário próprio
Pontos de Atenção:
- Reestruturação em andamento
- Prejuízos recorrentes
- Perda de market share para concorrentes digitais
- Alto endividamento
LREN3 - Lojas Renner
A Renner é líder no varejo de moda no Brasil, com modelo verticalmente integrado.
Modelo de Negócio:
- Lojas Renner (moda feminina, masculina, infantil)
- Camicado (casa e decoração)
- Youcom (moda jovem)
- Realize (financeira)
Pontos Fortes:
- Marca forte e posicionamento claro
- Modelo fast fashion eficiente
- Integração vertical (produção própria)
- Financeira própria com boa rentabilidade
- Gestão reconhecida
Pontos de Atenção:
- Dependência do mercado interno
- Competição com fast fashion internacional (Shein, Zara)
- Crescimento mais maduro
ARZZ3 - Arezzo&Co
A Arezzo é líder no mercado de calçados, bolsas e acessórios premium no Brasil.
Modelo de Negócio:
- Multimarcas: Arezzo, Schutz, Anacapri, Alexandre Birman, Vans (licença)
- Aquisições estratégicas (Reserva, BAW, Carol Bassi)
- E-commerce forte
- Expansão internacional
Pontos Fortes:
- Portfólio de marcas diversificado
- Posicionamento premium com margens altas
- Track record de aquisições bem-sucedidas
- E-commerce representativo
- Gestão de excelência
Pontos de Atenção:
- Valuation premium
- Dependência do consumo de alta renda
- Integração de aquisições
Indicadores-Chave para Análise de Varejo
1. Same Store Sales (SSS)
O crescimento de vendas nas mesmas lojas é crucial para avaliar a saúde orgânica:
import requests
def calcular_crescimento_sss(receita_atual, receita_anterior, inflacao):
"""
Calcula o crescimento Same Store Sales real
"""
crescimento_nominal = ((receita_atual / receita_anterior) - 1) * 100
crescimento_real = crescimento_nominal - inflacao
return {
"crescimento_nominal": round(crescimento_nominal, 2),
"crescimento_real": round(crescimento_real, 2),
"acima_inflacao": crescimento_real > 0
}
resultado = calcular_crescimento_sss(
receita_atual=10500,
receita_anterior=10000,
inflacao=4.5
)
print(f"Crescimento nominal: {resultado['crescimento_nominal']}%")
print(f"Crescimento real: {resultado['crescimento_real']}%")2. Giro de Estoque
Fundamental para varejo - quanto mais alto, melhor:
def calcular_giro_estoque(cmv, estoque_medio):
"""
Calcula quantas vezes o estoque gira por ano
CMV = Custo das Mercadorias Vendidas
"""
giro = cmv / estoque_medio
dias_estoque = 365 / giro
return {
"giro_anual": round(giro, 2),
"dias_em_estoque": round(dias_estoque, 0)
}
benchmarks = {
"supermercados": {"giro_ideal": 12, "dias_ideal": 30},
"vestuario": {"giro_ideal": 4, "dias_ideal": 90},
"eletro": {"giro_ideal": 6, "dias_ideal": 60},
"farmacias": {"giro_ideal": 8, "dias_ideal": 45}
}3. Margem EBITDA
A margem operacional mostra eficiência antes de juros e impostos:
def analisar_margem_ebitda_varejo(ebitda, receita_liquida, segmento):
"""
Analisa margem EBITDA comparando com benchmarks do setor
"""
margem = (ebitda / receita_liquida) * 100
benchmarks = {
"vestuario": 15,
"eletro": 8,
"supermercado": 6,
"farmacia": 7,
"ecommerce": 5
}
benchmark = benchmarks.get(segmento, 10)
return {
"margem_ebitda": round(margem, 2),
"benchmark_setor": benchmark,
"vs_benchmark": round(margem - benchmark, 2),
"avaliacao": "Acima do setor" if margem > benchmark else "Abaixo do setor"
}Análise Comparativa com brapi.dev
Vamos usar a API da brapi.dev para comparar as principais varejistas:
import requests
import pandas as pd
# Configuração da API brapi.dev
API_TOKEN = "seu_token_aqui"
BASE_URL = "https://brapi.dev/api"
def obter_dados_varejo():
"""
Obtém dados fundamentalistas das principais varejistas
"""
tickers = ["MGLU3", "BHIA3", "LREN3", "ARZZ3", "SOMA3", "CEAB3"]
url = f"{BASE_URL}/quote/{','.join(tickers)}"
params = {"fundamental": "true"}
headers = {"Authorization": f"Bearer {API_TOKEN}"}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return response.json()["results"]
else:
print(f"Erro: {response.status_code}")
return None
def criar_tabela_comparativa(dados):
"""
Cria tabela comparativa entre varejistas
"""
comparativo = []
for acao in dados:
info = {
"Ticker": acao.get("symbol"),
"Nome": acao.get("shortName", "")[:20],
"Preço": acao.get("regularMarketPrice"),
"Variação (%)": round(acao.get("regularMarketChangePercent", 0), 2),
"P/L": acao.get("priceEarnings"),
"P/VP": acao.get("priceToBook"),
"Div Yield (%)": acao.get("dividendYield"),
"ROE (%)": acao.get("returnOnEquity"),
"Margem Líq (%)": acao.get("netMargin"),
"Dív/PL": acao.get("debtToEquity")
}
comparativo.append(info)
df = pd.DataFrame(comparativo)
return df
# Executar análise
dados = obter_dados_varejo()
if dados:
tabela = criar_tabela_comparativa(dados)
print("\n=== COMPARATIVO SETOR VAREJO ===\n")
print(tabela.to_string(index=False))Saída Esperada
=== COMPARATIVO SETOR VAREJO ===
Ticker Nome Preço Var(%) P/L P/VP DY(%) ROE(%) Marg(%) Dív/PL
MGLU3 Magazine Luiza 12.50 -2.3 -15.2 1.8 0.0 -12.5 -2.1 2.5
BHIA3 Grupo Casas Bahia 0.85 -4.1 -3.5 0.2 0.0 -45.0 -8.5 4.2
LREN3 Lojas Renner 14.80 +1.2 12.5 2.1 3.5 18.2 8.5 0.8
ARZZ3 Arezzo 55.20 +0.8 18.2 3.5 2.8 22.5 10.2 0.4
SOMA3 Grupo Soma 6.50 -1.5 25.0 1.2 1.5 8.5 5.2 1.2
CEAB3 C&A Brasil 9.80 +2.1 -8.5 0.9 0.0 -10.5 -1.8 1.8Score de Qualidade para Varejistas
Vamos criar um sistema de pontuação específico para o setor:
def calcular_score_varejo(dados_fundamentalistas):
"""
Calcula score de qualidade para empresas de varejo (0-100)
"""
score = 0
detalhes = {}
# 1. Rentabilidade (30 pontos)
roe = dados_fundamentalistas.get("returnOnEquity", 0) or 0
if roe > 20:
score += 30
detalhes["rentabilidade"] = "Excelente"
elif roe > 15:
score += 25
detalhes["rentabilidade"] = "Boa"
elif roe > 10:
score += 15
detalhes["rentabilidade"] = "Regular"
elif roe > 0:
score += 5
detalhes["rentabilidade"] = "Baixa"
else:
detalhes["rentabilidade"] = "Negativa"
# 2. Endividamento (25 pontos)
div_pl = dados_fundamentalistas.get("debtToEquity", 0) or 0
if div_pl < 0.5:
score += 25
detalhes["endividamento"] = "Muito baixo"
elif div_pl < 1.0:
score += 20
detalhes["endividamento"] = "Saudável"
elif div_pl < 2.0:
score += 10
detalhes["endividamento"] = "Moderado"
else:
detalhes["endividamento"] = "Elevado"
# 3. Margem Líquida (20 pontos)
margem = dados_fundamentalistas.get("netMargin", 0) or 0
if margem > 8:
score += 20
detalhes["margem"] = "Excelente"
elif margem > 5:
score += 15
detalhes["margem"] = "Boa"
elif margem > 2:
score += 10
detalhes["margem"] = "Regular"
elif margem > 0:
score += 5
detalhes["margem"] = "Apertada"
else:
detalhes["margem"] = "Negativa"
# 4. Valuation (15 pontos)
pl = dados_fundamentalistas.get("priceEarnings", 0) or 0
if 0 < pl < 10:
score += 15
detalhes["valuation"] = "Barato"
elif 10 <= pl < 15:
score += 12
detalhes["valuation"] = "Justo"
elif 15 <= pl < 25:
score += 8
detalhes["valuation"] = "Premium"
elif pl >= 25:
score += 3
detalhes["valuation"] = "Caro"
else:
detalhes["valuation"] = "P/L negativo"
# 5. Dividendos (10 pontos)
dy = dados_fundamentalistas.get("dividendYield", 0) or 0
if dy > 4:
score += 10
detalhes["dividendos"] = "Alto yield"
elif dy > 2:
score += 7
detalhes["dividendos"] = "Moderado"
elif dy > 0:
score += 3
detalhes["dividendos"] = "Baixo"
else:
detalhes["dividendos"] = "Sem dividendos"
return {
"score_total": score,
"classificacao": classificar_score(score),
"detalhes": detalhes
}
def classificar_score(score):
if score >= 80:
return "⭐⭐⭐⭐⭐ Excelente"
elif score >= 60:
return "⭐⭐⭐⭐ Muito Bom"
elif score >= 40:
return "⭐⭐⭐ Regular"
elif score >= 20:
return "⭐⭐ Fraco"
else:
return "⭐ Crítico"Análise de Múltiplos com Histórico
def analisar_evolucao_multiplos(ticker, periodos=20):
"""
Analisa evolução histórica de múltiplos
"""
url = f"{BASE_URL}/quote/{ticker}"
params = {
"range": "5y",
"interval": "1mo",
"fundamental": "true"
}
headers = {"Authorization": f"Bearer {API_TOKEN}"}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
dados = response.json()["results"][0]
historico = dados.get("historicalDataPrice", [])
# Análise de preço
precos = [h["close"] for h in historico[-periodos:]]
preco_atual = precos[-1] if precos else 0
preco_medio = sum(precos) / len(precos) if precos else 0
return {
"ticker": ticker,
"preco_atual": preco_atual,
"preco_medio_periodo": round(preco_medio, 2),
"vs_media": round(((preco_atual / preco_medio) - 1) * 100, 2),
"minima_periodo": min(precos) if precos else 0,
"maxima_periodo": max(precos) if precos else 0
}
return None
# Analisar principais varejistas
for ticker in ["LREN3", "ARZZ3", "MGLU3"]:
analise = analisar_evolucao_multiplos(ticker)
if analise:
print(f"\n{ticker}:")
print(f" Preço atual: R$ {analise['preco_atual']}")
print(f" Média 20 meses: R$ {analise['preco_medio_periodo']}")
print(f" vs Média: {analise['vs_media']}%")Fatores de Risco do Setor
1. Risco de Juros
O varejo é altamente sensível à taxa Selic:
IMPACTO DA SELIC NO VAREJO
Selic Alta (>10%)
├── Crédito mais caro → Menos vendas a prazo
├── Custo da dívida aumenta → Lucro cai
├── Consumidor poupa mais → Menos consumo
└── Ações do setor despencam
Selic Baixa (<8%)
├── Crédito barato → Boom de vendas a prazo
├── Custo da dívida cai → Lucro aumenta
├── Consumidor gasta mais → Mais consumo
└── Ações do setor valorizam2. Risco de Execução
def avaliar_risco_execucao(dados_empresa):
"""
Avalia riscos operacionais específicos do varejo
"""
riscos = []
# Integração de aquisições
if dados_empresa.get("aquisicoes_recentes", 0) > 2:
riscos.append({
"tipo": "Integração",
"nivel": "Alto",
"descricao": "Múltiplas aquisições para integrar"
})
# Transformação digital
if dados_empresa.get("ecommerce_share", 0) < 20:
riscos.append({
"tipo": "Digital",
"nivel": "Médio",
"descricao": "Baixa penetração de e-commerce"
})
# Concentração de receita
if dados_empresa.get("top_categoria_share", 0) > 60:
riscos.append({
"tipo": "Concentração",
"nivel": "Médio",
"descricao": "Alta dependência de uma categoria"
})
return riscos3. Risco Competitivo
O setor enfrenta competição de:
- Players digitais globais: Amazon, Shopee, Shein
- Mercado Livre: Líder em e-commerce na América Latina
- D2C (Direct to Consumer): Marcas vendendo direto
- Social commerce: Vendas via redes sociais
Estratégias de Investimento no Setor
Estratégia 1: Quality + Value
Foco em empresas de qualidade em momentos de desconto:
def filtrar_quality_value_varejo(lista_empresas):
"""
Filtra varejistas com qualidade a preços atrativos
"""
candidatas = []
for empresa in lista_empresas:
roe = empresa.get("returnOnEquity", 0) or 0
pl = empresa.get("priceEarnings", 0) or 0
divida = empresa.get("debtToEquity", 0) or 0
margem = empresa.get("netMargin", 0) or 0
# Critérios Quality + Value
if (roe > 15 and
0 < pl < 20 and
divida < 1.5 and
margem > 5):
candidatas.append({
"ticker": empresa.get("symbol"),
"roe": roe,
"pl": pl,
"divida_pl": divida,
"margem": margem
})
return sorted(candidatas, key=lambda x: x["roe"], reverse=True)Estratégia 2: Turnaround
Para investidores com maior apetite a risco:
def identificar_turnaround(lista_empresas):
"""
Identifica candidatas a turnaround no varejo
"""
candidatas = []
for empresa in lista_empresas:
pvp = empresa.get("priceToBook", 0) or 0
preco = empresa.get("regularMarketPrice", 0) or 0
# Critérios: Muito barata, mas com operação existente
if (pvp < 0.5 and preco > 0):
candidatas.append({
"ticker": empresa.get("symbol"),
"pvp": pvp,
"preco": preco,
"potencial_upside": round((1/pvp - 1) * 100, 0)
})
return candidatasDashboard Automatizado
def gerar_relatorio_setor_varejo():
"""
Gera relatório completo do setor de varejo
"""
tickers = ["MGLU3", "BHIA3", "LREN3", "ARZZ3", "SOMA3",
"CEAB3", "CRFB3", "ASAI3", "RADL3", "PNVL3"]
url = f"{BASE_URL}/quote/{','.join(tickers)}"
params = {"fundamental": "true"}
headers = {"Authorization": f"Bearer {API_TOKEN}"}
response = requests.get(url, params=params, headers=headers)
if response.status_code != 200:
return "Erro ao obter dados"
dados = response.json()["results"]
# Análise consolidada
relatorio = {
"data": datetime.now().strftime("%Y-%m-%d %H:%M"),
"total_empresas": len(dados),
"empresas_lucrativas": sum(1 for d in dados if (d.get("netIncome") or 0) > 0),
"media_pl_setor": calcular_media([d.get("priceEarnings") for d in dados]),
"media_roe_setor": calcular_media([d.get("returnOnEquity") for d in dados]),
"destaques": [],
"alertas": []
}
for empresa in dados:
roe = empresa.get("returnOnEquity", 0) or 0
margem = empresa.get("netMargin", 0) or 0
if roe > 15 and margem > 5:
relatorio["destaques"].append(empresa.get("symbol"))
if roe < 0 or margem < -5:
relatorio["alertas"].append(empresa.get("symbol"))
return relatorio
def calcular_media(lista):
numeros = [x for x in lista if x is not None and x > 0]
return round(sum(numeros) / len(numeros), 2) if numeros else 0Conclusão: Investindo no Varejo Brasileiro
O setor de varejo brasileiro oferece oportunidades interessantes, mas requer análise cuidadosa:
Critérios para Seleção
- ROE consistentemente acima de 15%
- Margem líquida superior a 5%
- Endividamento controlado (Dív/PL < 1.5)
- Crescimento de SSS acima da inflação
- E-commerce relevante (>20% das vendas)
Top Picks por Categoria
| Categoria | Empresa | Motivo |
|---|---|---|
| Vestuário Premium | ARZZ3 | Margens altas, gestão excelente |
| Vestuário Mass Market | LREN3 | Líder de mercado, financeira rentável |
| Farmácias | RADL3 | Setor defensivo, consolidador |
| Alimentar | ASAI3 | Atacarejo em crescimento |
Quando Evitar o Setor
- Selic em trajetória de alta
- Desemprego em elevação
- PIB em contração
- Confiança do consumidor em queda
Próximos Passos
Para aprofundar sua análise do setor de varejo:
- Crie sua conta gratuita na brapi.dev para acessar dados em tempo real
- Explore a documentação completa da API em brapi.dev/docs
- Automatize suas análises usando os códigos Python deste guia
- Acompanhe os resultados trimestrais das empresas do setor
A brapi.dev oferece todos os dados fundamentalistas necessários para análise profunda do setor de varejo, incluindo balanços, demonstrativos de resultado e indicadores atualizados.
Disclaimer: Este conteúdo é educacional e não constitui recomendação de investimento. Faça sua própria análise antes de investir.
