Retorno ponderado pelo tempo
O retorno ponderado pelo tempo mede o desempenho de uma estratégia de investimento sem que o valor ou o momento de aportes e retiradas externas distorça o resultado.
Executar grátis
Informe os valores da carteira em subperíodos consecutivos, posicione cada fluxo de caixa no início ou no fim do respectivo período e a calculadora obterá cada retorno antes de encadeá-los em um único valor acumulado. Assim, você pode comparar gestores, modelos ou estratégias entre contas cujos titulares movimentaram quantias diferentes em datas distintas.
Divida o intervalo sempre que houver um fluxo externo
O retorno ponderado pelo tempo começa pela divisão de todo o intervalo de medição em subperíodos. Deve existir um limite sempre que dinheiro entrar ou sair da carteira por razões alheias ao desempenho dos investimentos. Aportes, depósitos, retiradas e distribuições levadas para fora da conta são fluxos de caixa externos. Juros, dividendos mantidos na carteira, taxas e ganhos ou perdas de mercado normalmente fazem parte do desempenho e não devem ser informados como fluxos. Em cada subperíodo, registre o valor de mercado no início e no fim. Depois, informe o fluxo externo como número positivo para um aporte ou negativo para uma retirada. Selecione início quando o valor ficou disponível para investimento durante todo o subperíodo. Selecione fim quando ele chegou após o desempenho do período ou quando a retirada ocorreu depois desse desempenho. As avaliações nos limites precisam ser precisas: se um fluxo ocorreu no meio de um período longo, crie um ponto de avaliação naquele momento em vez de aproximar sua posição. As linhas devem estar em ordem cronológica, pois a calculadora encadeia os retornos nessa mesma sequência.
Entenda as fórmulas e o encadeamento
Para um fluxo posicionado no fim, a calculadora subtrai o fluxo do valor final e divide o resultado ajustado pelo valor inicial. Para um fluxo no início, ela soma o fluxo ao valor inicial e divide o valor final pelo capital investido. Subtrair um de qualquer um desses quocientes produz o retorno do subperíodo. Em seguida, a calculadora transforma cada retorno em fator de crescimento, multiplica todos os fatores e subtrai um do produto. Por exemplo, um ganho seguido de uma perda é composto, e não calculado por média: percentuais positivos e negativos iguais não se anulam porque o segundo incide sobre outra base de capital. A resposta apresenta as formas decimal e percentual de cada retorno, o fator de crescimento final e o retorno acumulado ponderado pelo tempo. O arredondamento só é aplicado aos valores exibidos depois que cada cálculo em precisão completa já foi incorporado à cadeia. Isso mantém resultados estáveis e evita o desvio provocado pelo encadeamento de percentuais intermediários arredondados.
Interprete o resultado e reconheça os limites
Use o percentual final para avaliar o processo de investimento independentemente das decisões de financiamento do titular da conta. Ele é especialmente adequado para comparar gestores, índices de referência, carteiras-modelo ou a mesma estratégia entre contas com calendários de aporte diferentes. Um resultado positivo indica que uma unidade de capital exposta durante todos os subperíodos cresceu; um resultado negativo indica redução. O fator de crescimento expressa o mesmo desfecho de forma multiplicativa: acima de um significa crescimento e abaixo de um indica perda. O retorno ponderado pelo tempo não representa o retorno pessoal do investidor quando ocorreram depósitos ou retiradas relevantes. Para essa pergunta, o retorno ponderado pelo dinheiro ou a taxa interna de retorno atribui pesos aos fluxos conforme sua data e valor. A calculadora também não anualiza o resultado, deduz avaliações ausentes, estima datas dentro do período nem compara com um índice. A precisão depende da classificação correta dos fluxos externos e de valores de mercado nos limites apropriados. Confira os retornos listados para identificar uma linha improvável antes de usar o resultado em relatórios ou análises.
Casos de uso
Avaliar um gestor de carteira
Remova depósitos e retiradas controlados pelo cliente para que o retorno reflita decisões de investimento, e não o momento do financiamento.
Comparar carteiras-modelo
Encadeie retornos consistentes de estratégias adotadas por contas com saldos e calendários de aporte diferentes.
Preparar relatórios de desempenho
Produza um retorno acumulado auditável junto com os retornos parciais utilizados no encadeamento.
Perguntas frequentes
Quanto custa a calculadora?
Cada solicitação de API custa US$ 0,002. O mesmo cálculo determinístico também pode ser executado no navegador.
Os aportes devem ser positivos ou negativos?
Informe aportes como fluxos positivos e retiradas como fluxos negativos.
Quando devo escolher início em vez de fim?
Escolha início quando o fluxo ficou investido durante todo o subperíodo. Escolha fim quando ele ocorreu depois do desempenho daquele subperíodo.
O retorno ponderado pelo tempo é igual à taxa interna de retorno?
Não. O primeiro remove o efeito do valor e do momento dos fluxos externos; a taxa interna de retorno mede a experiência do investidor ponderada pelo dinheiro.
O resultado anualiza o desempenho?
Não. O resultado é o retorno acumulado nos subperíodos informados. A anualização exige o tempo decorrido, que não faz parte desta entrada.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/finance/time-weighted-return \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"periods":[{"beginning_value":10000,"ending_value":10800,"cash_flow":500,"cash_flow_timing":"end"},{"beginning_value":11300,"ending_value":11752,"cash_flow":0,"cash_flow_timing":"end"}]}'const res = await fetch("https://api.kit.forhosting.com/finance/time-weighted-return", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"periods": [
{
"beginning_value": 10000,
"ending_value": 10800,
"cash_flow": 500,
"cash_flow_timing": "end"
},
{
"beginning_value": 11300,
"ending_value": 11752,
"cash_flow": 0,
"cash_flow_timing": "end"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/time-weighted-return",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"periods": [
{
"beginning_value": 10000,
"ending_value": 10800,
"cash_flow": 500,
"cash_flow_timing": "end"
},
{
"beginning_value": 11300,
"ending_value": 11752,
"cash_flow": 0,
"cash_flow_timing": "end"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/time-weighted-return", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"periods":[{"beginning_value":10000,"ending_value":10800,"cash_flow":500,"cash_flow_timing":"end"},{"beginning_value":11300,"ending_value":11752,"cash_flow":0,"cash_flow_timing":"end"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"periods":[{"beginning_value":10000,"ending_value":10800,"cash_flow":500,"cash_flow_timing":"end"},{"beginning_value":11300,"ending_value":11752,"cash_flow":0,"cash_flow_timing":"end"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/time-weighted-return", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"periods": [
{
"beginning_value": 10000,
"ending_value": 10800,
"cash_flow": 500,
"cash_flow_timing": "end"
},
{
"beginning_value": 11300,
"ending_value": 11752,
"cash_flow": 0,
"cash_flow_timing": "end"
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.time_weighted_return",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |