Uma das dúvidas mais comuns entre investidores brasileiros é escolher entre ações e fundos imobiliários (FIIs). Ambos são ativos de renda variável negociados na B3, mas possuem características bem diferentes em termos de rentabilidade, dividendos, tributação e riscos.
Neste guia comparativo, vamos analisar cada aspecto para ajudá-lo a decidir qual (ou qual proporção de cada) faz mais sentido para seus objetivos de investimento.
Resumo Comparativo
| Característica | Ações | FIIs |
|---|---|---|
| O que é | Participação em empresas | Cotas de fundos imobiliários |
| Rendimento | Dividendos + Valorização | Dividendos mensais + Valorização |
| Frequência dividendos | Trimestral/Anual | Mensal |
| IR sobre dividendos | Isento (PF) | Isento (PF) |
| IR sobre ganho de capital | 15% (swing trade) | 20% |
| Isenção mensal | Até R$ 20.000 | Não há |
| Volatilidade | Alta | Média |
| Liquidez | Alta | Média |
| Gestão | Passiva (investidor) | Profissional (gestor) |
O Que São Ações?
Ações representam participação societária em empresas de capital aberto. Ao comprar ações, você se torna sócio da empresa, com direito a:
- Receber dividendos proporcionais
- Participar das assembleias (ações ordinárias)
- Beneficiar-se da valorização da empresa
Tipos de Ações
| Tipo | Código | Características |
|---|---|---|
| Ordinárias (ON) | 3 (ex: PETR3) | Direito a voto em assembleias |
| Preferenciais (PN) | 4 (ex: PETR4) | Preferência nos dividendos |
| Units | 11 (ex: TAEE11) | Combinação de ON + PN |
Exemplos de Ações por Perfil
Dividendos (renda passiva):
- TAEE11 (Taesa) - Setor elétrico
- BBAS3 (Banco do Brasil) - Bancário
- ITSA4 (Itaúsa) - Holding
Crescimento (valorização):
- WEGE3 (WEG) - Industrial
- PRIO3 (PetroRio) - Petróleo
- TOTS3 (Totvs) - Tecnologia
O Que São FIIs?
Fundos Imobiliários são veículos de investimento coletivo que aplicam recursos em ativos imobiliários. São negociados na bolsa como ações, mas funcionam como fundos.
Tipos de FIIs
| Tipo | Características | Exemplos |
|---|---|---|
| Tijolo | Imóveis físicos (shoppings, galpões, lajes) | HGLG11, XPLG11, VISC11 |
| Papel | CRIs, LCIs, títulos imobiliários | KNCR11, MXRF11, RECR11 |
| FOF | Cotas de outros FIIs | BCFF11, HFOF11 |
| Híbrido | Combinação de tijolo e papel | KNRI11, BRCR11 |
Vantagens dos FIIs
- Dividendos mensais: Distribuição obrigatória de 95% dos lucros
- Isenção de IR: Dividendos isentos para pessoa física
- Diversificação imobiliária: Acesso a grandes empreendimentos
- Gestão profissional: Administrador cuida dos imóveis
- Baixo valor inicial: A partir de R$ 10-100
Comparativo de Rentabilidade
Histórico: Ações vs FIIs
Analisando os últimos anos:
| Período | IBOV | IFIX | CDI |
|---|---|---|---|
| 2020 | +2,9% | -10,2% | +2,8% |
| 2021 | -11,9% | -2,3% | +4,4% |
| 2022 | +4,7% | +2,2% | +12,4% |
| 2023 | +22,3% | +15,5% | +13,0% |
| 2024* | +10,5% | +8,2% | +10,8% |
*Dados parciais
Simulação Comparativa com brapi.dev
import requests
from typing import Dict, Any, List
from datetime import datetime
def comparar_acoes_vs_fiis(
acoes: List[str],
fiis: List[str],
periodo_meses: int,
aporte_mensal: float,
token: str
) -> Dict[str, Any]:
"""
Compara performance de carteira de ações vs FIIs
Args:
acoes: Lista de símbolos de ações
fiis: Lista de símbolos de FIIs
periodo_meses: Período de análise
aporte_mensal: Valor do aporte mensal
token: Token da API brapi.dev
Returns:
Comparativo detalhado
"""
def calcular_retorno_carteira(simbolos: List[str], tipo: str) -> Dict[str, Any]:
"""Calcula retorno de uma carteira"""
retornos = []
dividendos_totais = 0
for symbol in simbolos:
url = f"https://brapi.dev/api/quote/{symbol}"
params = {
"range": f"{periodo_meses}mo",
"interval": "1mo",
"modules": "dividendsData",
"token": token
}
response = requests.get(url, params=params)
data = response.json()
if 'results' not in data or len(data['results']) == 0:
continue
result = data['results'][0]
historico = result.get('historicalDataPrice', [])
if len(historico) < 2:
continue
preco_inicial = historico[0].get('close', 0)
preco_final = historico[-1].get('close', 0)
if preco_inicial > 0:
retorno = (preco_final / preco_inicial - 1)
retornos.append({
"symbol": symbol,
"retorno": retorno,
"preco_inicial": preco_inicial,
"preco_final": preco_final
})
# Calcular dividendos (aproximação)
dividends_data = result.get('dividendsData', {})
if dividends_data:
cash_divs = dividends_data.get('cashDividends', [])
for div in cash_divs:
dividendos_totais += div.get('rate', 0)
if not retornos:
return {"erro": "Sem dados"}
# Retorno médio ponderado (igual peso)
retorno_medio = sum(r["retorno"] for r in retornos) / len(retornos)
return {
"tipo": tipo,
"num_ativos": len(retornos),
"retorno_medio_%": round(retorno_medio * 100, 2),
"dividendos_por_cota": round(dividendos_totais / len(retornos), 2),
"detalhes": retornos
}
resultado_acoes = calcular_retorno_carteira(acoes, "Ações")
resultado_fiis = calcular_retorno_carteira(fiis, "FIIs")
# Simulação de patrimônio acumulado
meses = periodo_meses
aporte_total = aporte_mensal * meses
# Taxa mensal aproximada
if 'retorno_medio_%' in resultado_acoes:
taxa_mensal_acoes = (1 + resultado_acoes['retorno_medio_%']/100) ** (1/meses) - 1
else:
taxa_mensal_acoes = 0.01 # 1% fallback
if 'retorno_medio_%' in resultado_fiis:
taxa_mensal_fiis = (1 + resultado_fiis['retorno_medio_%']/100) ** (1/meses) - 1
else:
taxa_mensal_fiis = 0.008 # 0.8% fallback
# Calcular patrimônio com aportes mensais
patrimonio_acoes = 0
patrimonio_fiis = 0
for mes in range(1, meses + 1):
patrimonio_acoes = (patrimonio_acoes + aporte_mensal) * (1 + taxa_mensal_acoes)
patrimonio_fiis = (patrimonio_fiis + aporte_mensal) * (1 + taxa_mensal_fiis)
return {
"parametros": {
"periodo_meses": periodo_meses,
"aporte_mensal": aporte_mensal,
"aporte_total": aporte_total
},
"acoes": {
**resultado_acoes,
"patrimonio_final": round(patrimonio_acoes, 2)
},
"fiis": {
**resultado_fiis,
"patrimonio_final": round(patrimonio_fiis, 2)
},
"diferenca": round(patrimonio_acoes - patrimonio_fiis, 2),
"vencedor": "Ações" if patrimonio_acoes > patrimonio_fiis else "FIIs"
}
# resultado = comparar_acoes_vs_fiis(
# acoes=["PETR4", "VALE3", "ITUB4", "BBDC4", "WEGE3"],
# fiis=["HGLG11", "XPLG11", "KNCR11", "MXRF11", "VISC11"],
# periodo_meses=12,
# aporte_mensal=1000,
# token="SEU_TOKEN"
# )Comparativo de Dividendos
Dividend Yield Médio
| Tipo | DY Médio Anual | Frequência |
|---|---|---|
| Ações (IDIV) | 6% a 10% | Trimestral/Semestral |
| FIIs (IFIX) | 8% a 12% | Mensal |
Simulação de Renda Passiva
def simular_renda_passiva(
patrimonio: float,
dy_acoes: float = 0.07,
dy_fiis: float = 0.10
) -> Dict[str, Any]:
"""
Simula renda passiva de ações vs FIIs
Args:
patrimonio: Valor investido
dy_acoes: Dividend yield anual das ações
dy_fiis: Dividend yield anual dos FIIs
Returns:
Comparativo de renda passiva
"""
# Ações: dividendos geralmente trimestrais
dividendo_anual_acoes = patrimonio * dy_acoes
dividendo_trimestral_acoes = dividendo_anual_acoes / 4
# FIIs: dividendos mensais
dividendo_anual_fiis = patrimonio * dy_fiis
dividendo_mensal_fiis = dividendo_anual_fiis / 12
return {
"patrimonio": patrimonio,
"acoes": {
"dy_anual_%": dy_acoes * 100,
"renda_anual": round(dividendo_anual_acoes, 2),
"renda_trimestral": round(dividendo_trimestral_acoes, 2),
"renda_mensal_media": round(dividendo_anual_acoes / 12, 2)
},
"fiis": {
"dy_anual_%": dy_fiis * 100,
"renda_anual": round(dividendo_anual_fiis, 2),
"renda_mensal": round(dividendo_mensal_fiis, 2)
},
"diferenca_mensal": round(dividendo_mensal_fiis - dividendo_anual_acoes/12, 2),
"melhor_para_renda": "FIIs" if dy_fiis > dy_acoes else "Ações"
}
# Exemplo: patrimônio de R$ 500.000
resultado = simular_renda_passiva(500000, 0.07, 0.10)
print("SIMULAÇÃO DE RENDA PASSIVA")
print(f"Patrimônio: R$ {resultado['patrimonio']:,.0f}")
print(f"\nAções (DY {resultado['acoes']['dy_anual_%']:.0f}%):")
print(f" Renda anual: R$ {resultado['acoes']['renda_anual']:,.2f}")
print(f" Renda mensal média: R$ {resultado['acoes']['renda_mensal_media']:,.2f}")
print(f"\nFIIs (DY {resultado['fiis']['dy_anual_%']:.0f}%):")
print(f" Renda anual: R$ {resultado['fiis']['renda_anual']:,.2f}")
print(f" Renda mensal: R$ {resultado['fiis']['renda_mensal']:,.2f}")Resultado do exemplo:
- Patrimônio: R$ 500.000
- Ações (DY 7%): R$ 2.917/mês (média)
- FIIs (DY 10%): R$ 4.167/mês
- FIIs pagam R$ 1.250/mês a mais
Tributação: Diferenças Importantes
Imposto de Renda
| Operação | Ações | FIIs |
|---|---|---|
| Dividendos | Isento | Isento |
| Venda com lucro (swing trade) | 15% | 20% |
| Venda com lucro (day trade) | 20% | 20% |
| Isenção mensal | Até R$ 20.000 em vendas | Não há |
| Compensação de prejuízos | Sim (mesmo tipo) | Sim (mesmo tipo) |
Impacto Prático
A isenção de R$ 20.000 mensais para ações é uma vantagem significativa para pequenos investidores:
def calcular_imposto_venda(
valor_venda: float,
lucro: float,
tipo_ativo: str # "acao" ou "fii"
) -> Dict[str, float]:
"""
Calcula IR na venda de ações ou FIIs
Args:
valor_venda: Valor total da venda no mês
lucro: Lucro obtido na venda
tipo_ativo: "acao" ou "fii"
Returns:
Detalhamento do imposto
"""
if tipo_ativo == "acao":
# Ações: isenção até R$ 20.000 em vendas/mês
if valor_venda <= 20000:
imposto = 0
isento = True
else:
imposto = lucro * 0.15 # 15% sobre o lucro
isento = False
else:
# FIIs: sem isenção
imposto = lucro * 0.20 # 20% sobre o lucro
isento = False
return {
"tipo_ativo": tipo_ativo,
"valor_venda": valor_venda,
"lucro": lucro,
"isento": isento,
"imposto_devido": round(max(0, imposto), 2),
"lucro_liquido": round(lucro - max(0, imposto), 2)
}
# Comparação
print("COMPARATIVO DE TRIBUTAÇÃO")
print("-" * 50)
# Cenário 1: Venda de R$ 15.000 com lucro de R$ 3.000
cenario1_acao = calcular_imposto_venda(15000, 3000, "acao")
cenario1_fii = calcular_imposto_venda(15000, 3000, "fii")
print(f"\nCenário 1: Venda R$ 15.000 | Lucro R$ 3.000")
print(f" Ações: IR = R$ {cenario1_acao['imposto_devido']:,.2f} (isento)")
print(f" FIIs: IR = R$ {cenario1_fii['imposto_devido']:,.2f}")
print(f" Diferença: R$ {cenario1_fii['imposto_devido'] - cenario1_acao['imposto_devido']:,.2f}")
# Cenário 2: Venda de R$ 50.000 com lucro de R$ 10.000
cenario2_acao = calcular_imposto_venda(50000, 10000, "acao")
cenario2_fii = calcular_imposto_venda(50000, 10000, "fii")
print(f"\nCenário 2: Venda R$ 50.000 | Lucro R$ 10.000")
print(f" Ações: IR = R$ {cenario2_acao['imposto_devido']:,.2f}")
print(f" FIIs: IR = R$ {cenario2_fii['imposto_devido']:,.2f}")
print(f" Diferença: R$ {cenario2_fii['imposto_devido'] - cenario2_acao['imposto_devido']:,.2f}")Riscos: O Que Considerar
Riscos das Ações
| Risco | Descrição | Mitigação |
|---|---|---|
| Mercado | Volatilidade do Ibovespa | Diversificação por setores |
| Empresa | Problemas específicos da companhia | Análise fundamentalista |
| Setorial | Crise em setor específico | Diversificação setorial |
| Liquidez | Dificuldade de vender | Preferir ações líquidas |
| Governança | Má gestão, fraudes | Avaliar governança corporativa |
Riscos dos FIIs
| Risco | Descrição | Mitigação |
|---|---|---|
| Vacância | Imóveis desocupados | FIIs com contratos longos |
| Inadimplência | Locatários não pagam | Diversificação de inquilinos |
| Juros | Alta de juros reduz atratividade | FIIs de papel se beneficiam |
| Concentração | Poucos imóveis/inquilinos | FOFs e fundos diversificados |
| Gestão | Decisões ruins do administrador | Avaliar histórico do gestor |
Volatilidade Comparada
def analisar_volatilidade(
simbolos_acoes: List[str],
simbolos_fiis: List[str],
token: str
) -> Dict[str, Any]:
"""
Compara volatilidade de ações vs FIIs
Args:
simbolos_acoes: Lista de ações
simbolos_fiis: Lista de FIIs
token: Token da API brapi.dev
Returns:
Análise de volatilidade
"""
import statistics
def calcular_volatilidade(simbolo: str) -> float:
"""Calcula volatilidade (desvio padrão dos retornos diários)"""
url = f"https://brapi.dev/api/quote/{simbolo}"
params = {
"range": "3mo",
"interval": "1d",
"token": token
}
response = requests.get(url, params=params)
data = response.json()
if 'results' not in data or len(data['results']) == 0:
return 0
historico = data['results'][0].get('historicalDataPrice', [])
if len(historico) < 20:
return 0
# Calcular retornos diários
retornos = []
for i in range(1, len(historico)):
preco_anterior = historico[i-1].get('close', 0)
preco_atual = historico[i].get('close', 0)
if preco_anterior > 0:
retorno = (preco_atual / preco_anterior - 1) * 100
retornos.append(retorno)
if len(retornos) < 10:
return 0
return statistics.stdev(retornos)
# Calcular volatilidade de cada ativo
vol_acoes = []
for s in simbolos_acoes:
vol = calcular_volatilidade(s)
if vol > 0:
vol_acoes.append({"symbol": s, "volatilidade": vol})
vol_fiis = []
for s in simbolos_fiis:
vol = calcular_volatilidade(s)
if vol > 0:
vol_fiis.append({"symbol": s, "volatilidade": vol})
# Médias
media_acoes = sum(v["volatilidade"] for v in vol_acoes) / len(vol_acoes) if vol_acoes else 0
media_fiis = sum(v["volatilidade"] for v in vol_fiis) / len(vol_fiis) if vol_fiis else 0
return {
"acoes": {
"volatilidade_media_%": round(media_acoes, 2),
"detalhes": sorted(vol_acoes, key=lambda x: x["volatilidade"], reverse=True)
},
"fiis": {
"volatilidade_media_%": round(media_fiis, 2),
"detalhes": sorted(vol_fiis, key=lambda x: x["volatilidade"], reverse=True)
},
"conclusao": f"FIIs são {round(media_acoes/media_fiis, 1) if media_fiis > 0 else 'N/A'}x menos voláteis que ações"
}Quando Escolher Ações
Perfil Ideal para Ações
- Horizonte longo: 5+ anos
- Tolerância a volatilidade: Alta
- Objetivo: Crescimento patrimonial
- Tempo para análise: Disponível para acompanhar empresas
- Estratégia: Buy and hold ou value investing
Melhores Cenários
- Jovem em fase de acumulação: Pode assumir mais risco
- Busca crescimento agressivo: Empresas de tecnologia, small caps
- Quer participar de setores específicos: Bancos, commodities
- Prefere empresas com governança: Tag along, Novo Mercado
Quando Escolher FIIs
Perfil Ideal para FIIs
- Objetivo: Renda passiva regular
- Tolerância a volatilidade: Média
- Prefere simplicidade: Gestão profissional
- Busca previsibilidade: Dividendos mensais
- Alocação imobiliária: Sem capital para imóveis físicos
Melhores Cenários
- Já aposentado ou perto: Precisa de renda mensal
- Complementar renda do trabalho: Dividendos mensais
- Diversificação imobiliária: Acesso a shoppings, galpões
- Gestão passiva: Não quer acompanhar empresas
Estratégia Híbrida: O Melhor dos Dois Mundos
Alocação por Idade
def calcular_alocacao_por_idade(idade: int) -> Dict[str, float]:
"""
Sugere alocação entre ações e FIIs baseada na idade
Regra: 100 - idade = % em renda variável
Dentro de RV: equilíbrio entre ações e FIIs conforme objetivo
"""
# Regra básica: 100 - idade = % em RV
percentual_rv = max(20, min(80, 100 - idade))
percentual_rf = 100 - percentual_rv
# Dentro de RV: quanto mais jovem, mais ações
if idade < 30:
acoes_rv = 0.70 # 70% ações, 30% FIIs
fiis_rv = 0.30
elif idade < 40:
acoes_rv = 0.60
fiis_rv = 0.40
elif idade < 50:
acoes_rv = 0.50
fiis_rv = 0.50
elif idade < 60:
acoes_rv = 0.40
fiis_rv = 0.60
else:
acoes_rv = 0.30 # Mais FIIs para renda
fiis_rv = 0.70
return {
"idade": idade,
"renda_variavel_%": percentual_rv,
"renda_fixa_%": percentual_rf,
"dentro_rv": {
"acoes_%": round(acoes_rv * percentual_rv, 1),
"fiis_%": round(fiis_rv * percentual_rv, 1)
},
"alocacao_final": {
"acoes": round(acoes_rv * percentual_rv, 1),
"fiis": round(fiis_rv * percentual_rv, 1),
"renda_fixa": percentual_rf
}
}
# Exemplos por faixa etária
print("ALOCAÇÃO SUGERIDA POR IDADE")
print("-" * 50)
for idade in [25, 35, 45, 55, 65]:
alocacao = calcular_alocacao_por_idade(idade)
print(f"\n{idade} anos:")
print(f" Ações: {alocacao['alocacao_final']['acoes']}%")
print(f" FIIs: {alocacao['alocacao_final']['fiis']}%")
print(f" Renda Fixa: {alocacao['alocacao_final']['renda_fixa']}%")Alocação por Objetivo
| Objetivo | Ações | FIIs | Renda Fixa |
|---|---|---|---|
| Crescimento agressivo | 60% | 20% | 20% |
| Crescimento moderado | 45% | 30% | 25% |
| Renda + Crescimento | 30% | 40% | 30% |
| Renda passiva | 20% | 50% | 30% |
| Preservação | 15% | 25% | 60% |
Checklist: Como Decidir
Perguntas para Reflexão
Sobre seu perfil:
- Qual sua tolerância a ver patrimônio cair 30-50%?
- Quanto tempo tem para acompanhar investimentos?
- Prefere renda mensal ou valorização?
- Qual seu horizonte de investimento?
Sobre seus objetivos:
- Está em fase de acumulação ou usufruto?
- Precisa de renda passiva agora?
- Quer diversificação imobiliária?
- Busca proteção contra inflação?
Sobre o mercado:
- Como está a taxa de juros (Selic)?
- FIIs estão com desconto no P/VP?
- Bolsa está barata (P/L histórico)?
Monitorando sua Carteira
API brapi.dev para Acompanhamento
def monitorar_carteira_hibrida(
carteira: Dict[str, List[Dict]],
token: str
) -> Dict[str, Any]:
"""
Monitora carteira mista de ações e FIIs
Args:
carteira: {"acoes": [...], "fiis": [...]}
token: Token da API brapi.dev
Returns:
Status atualizado da carteira
"""
resultado = {
"acoes": {"valor_total": 0, "dividendos_12m": 0, "ativos": []},
"fiis": {"valor_total": 0, "dividendos_12m": 0, "ativos": []},
"totais": {}
}
for tipo, ativos in carteira.items():
for ativo in ativos:
symbol = ativo["symbol"]
quantidade = ativo["quantidade"]
url = f"https://brapi.dev/api/quote/{symbol}"
params = {"modules": "dividendsData", "token": token}
response = requests.get(url, params=params)
data = response.json()
if 'results' not in data or len(data['results']) == 0:
continue
result = data['results'][0]
preco = result.get('regularMarketPrice', 0)
valor = preco * quantidade
# Dividendos aproximados
div_yield = 0.08 if tipo == "fiis" else 0.06
dividendos = valor * div_yield
key = "acoes" if tipo == "acoes" else "fiis"
resultado[key]["valor_total"] += valor
resultado[key]["dividendos_12m"] += dividendos
resultado[key]["ativos"].append({
"symbol": symbol,
"quantidade": quantidade,
"preco": preco,
"valor": round(valor, 2)
})
# Totais
valor_total = resultado["acoes"]["valor_total"] + resultado["fiis"]["valor_total"]
resultado["totais"] = {
"valor_total": round(valor_total, 2),
"dividendos_anuais": round(
resultado["acoes"]["dividendos_12m"] + resultado["fiis"]["dividendos_12m"], 2
),
"alocacao_acoes_%": round(resultado["acoes"]["valor_total"] / valor_total * 100, 1) if valor_total > 0 else 0,
"alocacao_fiis_%": round(resultado["fiis"]["valor_total"] / valor_total * 100, 1) if valor_total > 0 else 0
}
return resultado
# Exemplo de uso
# carteira = {
# "acoes": [
# {"symbol": "PETR4", "quantidade": 100},
# {"symbol": "VALE3", "quantidade": 50}
# ],
# "fiis": [
# {"symbol": "HGLG11", "quantidade": 30},
# {"symbol": "XPLG11", "quantidade": 40}
# ]
# }
# status = monitorar_carteira_hibrida(carteira, "SEU_TOKEN")Perguntas Frequentes
Posso ter ações e FIIs na mesma carteira?
Sim, é uma estratégia comum e recomendada para diversificação. Muitos investidores mantêm ambos em proporções diferentes conforme objetivos.
FIIs são mais seguros que ações?
Não necessariamente. Ambos são renda variável com riscos. FIIs tendem a ser menos voláteis no dia a dia, mas também sofrem em crises.
Qual rende mais no longo prazo?
Historicamente, ações tendem a render mais no longo prazo (15-20 anos), mas FIIs oferecem renda mais constante. A resposta depende do período analisado.
Devo reinvestir os dividendos?
Depende do objetivo. Em fase de acumulação, reinvestir acelera o crescimento. Em fase de usufruto, use para despesas.
Como declarar ações e FIIs no IR?
Ambos devem ser declarados na ficha de Bens e Direitos. Dividendos são isentos e declarados em Rendimentos Isentos.
Conclusão
Não existe resposta única para "ações ou FIIs". A melhor escolha depende de:
Escolha Ações se:
- Busca crescimento de longo prazo
- Tolera volatilidade
- Quer participar de empresas específicas
- Aproveita isenção de R$ 20.000
Escolha FIIs se:
- Precisa de renda mensal
- Prefere menos volatilidade
- Quer exposição imobiliária
- Valoriza gestão profissional
Ideal: Combine ambos ajustando a proporção conforme idade, objetivos e tolerância a risco. Use a API da brapi.dev para monitorar ambas as classes de ativos em um único dashboard.
Disclaimer: Este conteúdo é educacional e não constitui recomendação de investimento. Cada investidor deve avaliar seu perfil antes de tomar decisões.
