Relação ouro/prata: o que é e como calculá-la
O que a relação ouro/prata mede, como calculá-la com preços ao vivo do ouro e da prata e como montar um gráfico do histórico com uma API em Python e JavaScript.
O que é a relação ouro/prata?
A relação ouro/prata é o número de onças troy de prata necessário para comprar uma onça troy de ouro. Você a obtém dividindo o preço do ouro pelo preço da prata, ambos na mesma moeda e para o mesmo peso. Com os preços de exemplo usados em toda a documentação da MetalAPI, ouro a 3.997,89 dólares americanos e prata a 53,94 dólares americanos por onça troy, a relação é de cerca de 74,1: a esses preços, uma onça de ouro vale aproximadamente 74 onças de prata.
Como os dois preços estão na mesma moeda, a moeda se cancela e a relação não tem unidade, o que a torna uma forma compacta de comparar os dois metais diretamente. Ela é lida assim:
- Uma relação em alta significa que o ouro ganhou em relação à prata: ou o ouro subiu mais que a prata, ou caiu menos.
- Uma relação em queda significa que a prata ganhou em relação ao ouro.
- A relação não diz nada sobre a direção de nenhum dos preços isoladamente. Os dois metais podem cair enquanto a relação sobe, e os dois podem subir enquanto ela cai.
As seções abaixo mostram como calcular a relação corretamente, por que a moeda base não importa e como acompanhá-la e montar gráficos dela com a API REST da MetalAPI.
Este é um artigo educativo sobre como a relação é definida e calculada. Ele não é uma recomendação financeira nem de investimento, e os preços aqui são valores de exemplo da documentação da MetalAPI, não dados de mercado.
Como calcular a relação ouro/prata
A fórmula é uma única divisão:
relação ouro/prata = preço do ouro ÷ preço da prata (mesma moeda, mesma unidade)
3.997,89 ÷ 53,94 ≈ 74,12
relação prata/ouro = 1 ÷ 74,12 ≈ 0,0135 (onças de ouro por onça de prata)A divisão é trivial; os erros acontecem nos dados de entrada:
- A mesma unidade para os dois metais. Divida um preço por onça por um preço por onça, ou por grama por por grama. O ouro por grama dividido pela prata por onça troy erra por um fator de 31,1, o número de gramas em uma onça troy (31,1034768).
- O mesmo momento. Pegue os dois preços da mesma resposta ou do fechamento do mesmo dia. Dividir um preço do ouro ao vivo pelo fechamento da prata de ontem mistura dois estados diferentes do mercado.
- O mesmo tipo de preço. Divida um preço médio por um preço médio, ou um fechamento por um fechamento. Misturar o preço de venda de um revendedor para um metal com o preço spot do outro acrescenta à relação o spread e o prêmio do revendedor.
- Arredonde no final. Divida os preços sem arredondar e arredonde a relação só para exibição, geralmente com uma ou duas casas decimais.
Em uma resposta da MetalAPI, os preços são as chaves prefixadas com a moeda base: USDXAU e USDXAG com a base padrão USD. As chaves simples XAU e XAG são inversos (onças por dólar). Dividir XAG por XAU dá a mesma relação, mas ler as chaves com prefixo evita tratar um inverso como preço.
Por que a moeda base não importa
O ouro e a prata costumam ser cotados em dólares americanos, mas a relação é a mesma em qualquer moeda. Com base=EUR, a MetalAPI expressa os dois preços em euros dividindo os preços em dólar pelo preço em dólar de um euro, e esse fator comum se cancela na divisão:
EURXAU = USDXAU ÷ USDEUR
EURXAG = USDXAG ÷ USDEUR
EURXAU ÷ EURXAG = USDXAU ÷ USDXAGA MetalAPI calcula todas as taxas cruzadas a partir de um único snapshot, então base=EUR, base=INR ou base=JPY dão a mesma relação que o dólar, a não ser pelo arredondamento no último dos dez dígitos significativos. O mesmo vale para unit: com unit=gram, os dois preços dos metais são divididos por 31,1034768 e a relação não muda.
A moeda importa, sim, quando os dois preços vêm de fontes ou momentos diferentes, como um preço do ouro em uma moeda e um preço da prata obtido horas depois em outra: aí a taxa de câmbio não se cancela exatamente. Pegar os dois preços da mesma resposta evita isso.
Você também pode deixar a divisão para a API. base aceita qualquer símbolo suportado, inclusive metais. Com base=XAG, todos os preços são expressos em onças troy de prata, então XAGXAU, o preço de uma onça de ouro em prata, é a própria relação:
curl "https://metalapi.com/api/v1/latest?base=XAG¤cies=XAU" \
-H "X-API-Key: $METALAPI_KEY"Nessa resposta, a chave simples XAU é o inverso: onças de ouro por onça de prata. O restante deste artigo calcula a relação a partir dos preços em dólar, porque geralmente você quer exibir ou armazenar os dois preços ao lado dela.
Obtenha a relação ouro/prata atual pela API
Uma requisição a /latest com currencies=XAU,XAG retorna os dois preços do mesmo snapshot e conta como uma única requisição. No Node.js 18 ou mais recente, salve isto como ratio.mjs e execute node ratio.mjs:
const params = new URLSearchParams({ currencies: "XAU,XAG" });
const res = await fetch(`https://metalapi.com/api/v1/latest?${params}`, {
headers: { "X-API-Key": process.env.METALAPI_KEY },
signal: AbortSignal.timeout(10_000),
});
const data = await res.json();
if (!data.success) {
throw new Error(`MetalAPI ${data.error.code} (${data.error.type}): ${data.error.info}`);
}
const gold = data.rates[`${data.base}XAU`];
const silver = data.rates[`${data.base}XAG`];
const ratio = gold / silver;
const asOf = new Date(data.timestamp * 1000).toISOString();
console.log(`Gold: ${gold} ${data.base} per troy ounce`);
console.log(`Silver: ${silver} ${data.base} per troy ounce`);
console.log(`Gold/silver ratio: ${ratio.toFixed(2)} (data from ${asOf})`);Com os preços de exemplo, a última linha imprime uma relação de 74,12. A atualização segue o intervalo do seu plano: diária no Free, a cada 30 minutos no Lite, a cada 10 minutos no Standard, a cada 60 segundos no Advanced e no Pro, e até a cada 5 segundos no Enterprise. De sexta-feira às 17:00 até domingo às 17:00, horário de Nova York, o mercado à vista fica fechado e a relação permanece no fechamento de sexta-feira.
A relação obtida de /latest é uma relação de preços médios. Se você quer a taxa pela qual o metal pode de fato ser trocado, use os preços de compra (bid) e de venda (ask), disponíveis a partir do plano Standard ao adicionar XAU-BID, XAU-ASK, XAG-BID e XAG-ASK a currencies:
- Vender uma onça de ouro pelo bid compra
USDXAU-BID ÷ USDXAG-ASKonças de prata. - Comprar uma onça de ouro com prata exige
USDXAU-ASK ÷ USDXAG-BIDonças de prata.
Os dois números são menos favoráveis que a relação média pelo valor dos dois spreads, e os prêmios do próprio revendedor vêm por cima. Spot, bid, ask e spread explica como essas cotações são montadas.
Como montar um gráfico do histórico da relação ouro/prata
Para um gráfico histórico, você precisa dos fechamentos diários dos dois metais. /timeframe (alias /timeseries) os retorna para um período em uma única requisição: até 30 dias por requisição no plano Free e 365 dias nos planos pagos. O histórico diário dos metais começa em 2000, e todos os planos podem consultá-lo inteiro; os planos só diferem em quantos dias uma requisição pode abranger.
Este script em Python baixa os últimos cinco anos em blocos de 365 dias (cinco requisições), calcula a relação para cada dia que tem os dois preços, grava um arquivo CSV, imprime algumas estatísticas e salva um gráfico com uma média móvel de 50 dias. No plano Free, defina MAX_DAYS = 30 e DAYS_BACK = 90, o que custa três requisições.
import csv
import os
import statistics
from datetime import date, datetime, timedelta, timezone
import matplotlib.pyplot as plt
import requests
API = "https://metalapi.com/api/v1"
MAX_DAYS = 365 # maior período por requisição: 365 nos planos pagos, 30 no Free
DAYS_BACK = 5 * 365 # no Free, mantenha isto em poucos meses
session = requests.Session()
session.headers["X-API-Key"] = os.environ["METALAPI_KEY"]
def daily_closes(start: date, end: date) -> dict:
"""Fechamentos diários do ouro e da prata de start a end (inclusive), indexados por data."""
rates = {}
while start <= end:
chunk_end = min(start + timedelta(days=MAX_DAYS), end)
r = session.get(
f"{API}/timeframe",
params={"start_date": start.isoformat(), "end_date": chunk_end.isoformat(), "currencies": "XAU,XAG"},
timeout=30,
)
data = r.json()
if not data["success"]:
err = data["error"]
raise RuntimeError(f"MetalAPI {err['code']} ({err['type']}): {err['info']}")
rates.update(data["rates"])
start = chunk_end + timedelta(days=1)
return rates
end = datetime.now(timezone.utc).date() - timedelta(days=1) # o fechamento de ontem é definitivo
rates = daily_closes(end - timedelta(days=DAYS_BACK), end)
rows = []
for day in sorted(rates):
values = rates[day]
if "USDXAU" in values and "USDXAG" in values: # pula dias sem um dos metais
gold, silver = values["USDXAU"], values["USDXAG"]
rows.append((day, gold, silver, gold / silver))
with open("gold-silver-ratio.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["date", "gold_usd_oz", "silver_usd_oz", "ratio"])
writer.writerows(rows)
ratios = [r[3] for r in rows]
print(f"{len(rows)} trading days, {rows[0][0]} to {rows[-1][0]}")
print(f"latest {ratios[-1]:.2f}, min {min(ratios):.2f}, max {max(ratios):.2f}, median {statistics.median(ratios):.2f}")
window = 50
days = [date.fromisoformat(r[0]) for r in rows]
moving = [sum(ratios[i - window + 1 : i + 1]) / window for i in range(window - 1, len(ratios))]
plt.figure(figsize=(10, 4))
plt.plot(days, ratios, linewidth=1, label="Gold/silver ratio")
plt.plot(days[window - 1 :], moving, linewidth=1, label=f"{window}-day moving average")
plt.ylabel("Ounces of silver per ounce of gold")
plt.legend()
plt.tight_layout()
plt.savefig("gold-silver-ratio.png", dpi=150)Alguns detalhes são intencionais:
- Ele percorre as datas retornadas, e não o calendário.
/timeframeomite fins de semana e feriados do mercado. - Ele termina na data UTC de ontem. A barra de hoje ainda está se movendo, e um
end_dateno futuro retorna o erro205. - Ele armazena os dois preços ao lado da relação, para que você possa conferir qualquer linha sem baixar tudo de novo.
- As estatísticas descrevem apenas o período que você baixou. Mude
DAYS_BACKe elas mudam junto.
A mesma série em JavaScript é um único map sobre o objeto rates de uma resposta de /timeframe, por exemplo a partir do helper de períodos do guia de dados históricos:
// rates = o objeto "rates" de /timeframe?currencies=XAU,XAG
const series = Object.entries(rates)
.filter(([, r]) => r.USDXAU && r.USDXAG)
.sort(([a], [b]) => a.localeCompare(b))
.map(([day, r]) => ({ day, gold: r.USDXAU, silver: r.USDXAG, ratio: r.USDXAU / r.USDXAG }));Os preços de fechamento de dias passados não mudam, então baixe um período uma vez e complete-o com uma requisição curta para os dias mais recentes. Para um backfill completo até 2000 (cerca de 27 requisições em um plano pago), um arquivo SQLite e um gráfico do ouro com a relação em matplotlib, veja Preços históricos de ouro e prata via API.
Os preços dos metais anteriores a outubro de 2026 são derivados de contratos futuros de primeiro vencimento, então podem diferir ligeiramente dos preços spot do mesmo dia. Os dois metais são derivados da mesma forma, mas tenha isso em mente ao comparar a sua série com um gráfico da relação de outra fonte.
Como as pessoas usam a relação ouro/prata
A relação é uma medida relativa. Ela descreve como o ouro e a prata se moveram um em relação ao outro, e não para onde cada um está indo. Usos comuns:
- Desempenho relativo. A relação no fim de um período dividida pela relação no início é igual ao fator de crescimento do ouro dividido pelo da prata. Uma relação que subiu 5% significa que o ouro ganhou 5% em relação à prata naquele período, não importa o que os dois preços tenham feito em termos absolutos.
- Contexto em painéis e relatórios. Acompanhamentos de preços, sites de revendedores e newsletters exibem a relação ao lado dos dois preços; a mesma requisição a
/latesta fornece sem custo extra. - Comparação com o próprio passado. Algumas pessoas comparam a relação atual com a sua média, mediana ou faixa em um período que escolhem, para dizer se ela está alta ou baixa em relação a esse período. O script acima imprime esses números para qualquer período que você baixar.
- Troca entre metais. Alguns detentores de metal físico trocam ouro por prata, ou o contrário, quando a relação atinge um nível que escolheram de antemão. Se isso os deixa com mais metal depende de a relação depois se mover como esperavam, o que nada garante, e toda troca paga os spreads e prêmios dos revendedores descritos acima.
- Outras relações. A mesma divisão funciona para quaisquer dois preços na mesma moeda: ouro e platina (
USDXAU ÷ USDXPT), ou ouro e petróleo (USDXAU ÷ USDWTI, barris de petróleo por onça de ouro). Em relações entre classes de ativos diferentes, deixeunitno padrão, porqueunitmuda os preços dos metais, mas não os de energia.
Nenhum desses usos é uma previsão. A relação não tem um nível normal fixo ao qual precise voltar, e uma leitura alta ou baixa não é, por si só, motivo para comprar ou vender nenhum dos metais. Se você está tomando decisões de investimento, converse com um consultor financeiro qualificado.
Acompanhe a relação ouro/prata no seu app
Crie uma conta grátis para obter uma chave de API. As 100 requisições por mês, os preços diários e os períodos de 30 dias do plano Free bastam para uma relação diária e alguns meses de histórico. Os planos pagos acrescentam preços mais recentes, períodos de 365 dias para backfills longos e preços bid/ask a partir do Standard; compare-os na página de preços. Para os preços da prata em si, veja o guia da API de preço da prata.
Perguntas frequentes
O que significa uma relação ouro/prata de 74?
Significa que uma onça troy de ouro custa o mesmo que cerca de 74 onças troy de prata aos preços usados. Ela descreve apenas o preço relativo dos dois metais. Não diz se algum deles está caro ou barato em termos absolutos.
A relação ouro/prata é a mesma em qualquer moeda e unidade?
Sim, desde que os dois preços sejam do mesmo momento e para o mesmo peso, porque a moeda e a unidade se cancelam na divisão. A MetalAPI deriva todas as moedas e unidades de um único snapshot, então qualquer base e unit dão a mesma relação, a não ser por diferenças mínimas de arredondamento.
Com que frequência a relação ouro/prata muda?
Sempre que um dos preços se move, o que acontece continuamente enquanto os mercados estão abertos. Pela API, você a vê no intervalo de atualização do seu plano, de diária no Free a cada 5 segundos no Enterprise. No fim de semana, ela fica no valor de sexta-feira.
Até quando posso calcular a relação no passado?
Os fechamentos diários do ouro e da prata vão até 2000 em todos os planos. Uma única requisição a /timeframe cobre até 30 dias no Free e 365 dias nos planos pagos, então o histórico completo custa cerca de 27 requisições em um plano pago. Os preços anteriores a outubro de 2026 são derivados de contratos futuros de primeiro vencimento.
Uma relação ouro/prata alta é sinal para comprar prata?
Este artigo não dá recomendações de investimento. Uma relação alta significa apenas que o ouro está caro em relação à prata quando comparado com o período que você usa como referência. Ela não prevê como nenhum dos preços, nem a própria relação, vai se mover em seguida.
Experimente com seus próprios dados
Crie uma conta grátis e faça sua primeira requisição em menos de dois minutos. 100 requisições por mês, sem cartão de crédito.
Continue lendo
Significado de XAU/USD: o que são XAU, XAG, XPT e XPD
O significado de XAU/USD: por que o ouro tem um código de moeda ISO 4217, o que XAG, XPT e XPD representam e como ler a direção das cotações em preços e APIs.
API de preço do ouro grátis: o que 100 requisições por mês fazem
Uma API de preço do ouro grátis, sem exageros: o que o plano Free da MetalAPI inclui, como render 100 requisições por mês com cache e lotes, e quando migrar.
API de preços do ouro em Python: consulta, cache e gráficos
API de preços do ouro em Python: cotações ao vivo com requests, tratamento de erros e novas tentativas, cache e gráficos de séries do pandas com matplotlib.