Работа с историческими данными
Запрашивайте дневные цены начиная с 1999 года, получайте данные за периоды, сравнивайте две даты, загружайте бары OHLC и анализируйте ценовые тренды.
Какая история доступна
MetalAPI хранит один дневной бар (открытие, максимум, минимум и закрытие) для каждого символа и дня:
- Валюты — с 1999 года
- Драгоценные и промышленные металлы, а также энергоносители — с 2000 года
- Криптовалюты — с 2014 года
Цены на металлы до октября 2026 года получены по ближайшим фьючерсным контрактам, поэтому могут немного отличаться от спотовой цены того же дня. На всех тарифах доступна вся история. Тарифы различаются только тем, сколько дней может охватывать один запрос за период.
Один день
Укажите дату в пути или используйте эндпоинт /historical с параметром date либо /yesterday. Ответ содержит цены закрытия этого дня (UTC). Для GET /api/v1/2026-10-01?currencies=XAU,XAG:
{
"success": true,
"timestamp": 1790812800,
"historical": true,
"date": "2026-10-01",
"base": "USD",
"rates": {
"XAU": 0.0002583044893,
"USDXAU": 3871.4,
"XAG": 0.02097315436,
"USDXAG": 47.68
}
}Периоды с /timeframe
/timeframe возвращает по одной записи на каждый день между start_date и end_date; ключом служит дата. Для GET /api/v1/timeframe?start_date=2026-10-19&end_date=2026-10-23¤cies=XAU:
{
"success": true,
"timeframe": true,
"start_date": "2026-10-19",
"end_date": "2026-10-23",
"base": "USD",
"rates": {
"2026-10-19": { "XAU": 0.0002537298285, "USDXAU": 3941.2 },
"2026-10-20": { "XAU": 0.0002526049889, "USDXAU": 3958.75 },
"2026-10-21": { "XAU": 0.0002517369852, "USDXAU": 3972.4 },
"2026-10-22": { "XAU": 0.0002506642603, "USDXAU": 3989.4 },
"2026-10-23": { "XAU": 0.0002501319446, "USDXAU": 3997.89 }
}
}Дни без цены закрытия, например выходные или биржевые праздники, могут отсутствовать. Не рассчитывайте на то, что каждому календарному дню соответствует запись. /timeseries — псевдоним, который возвращает "timeseries": true вместо "timeframe": true.
Периоды длиннее, чем позволяет тариф
Один запрос может охватывать до 30 дней на Free и до 365 дней на платных тарифах. Для более длинных периодов возвращается ошибка 207. Разбивайте длинные периоды на части — по одному запросу на каждую часть:
const DAY = 86_400_000;
const MAX_DAYS = 365; // 30 на тарифе Free
const iso = (d) => d.toISOString().slice(0, 10);
async function fetchRange(start, end, currencies) {
const rates = {};
let from = new Date(`${start}T00:00:00Z`);
const last = new Date(`${end}T00:00:00Z`);
while (from <= last) {
const to = new Date(Math.min(from.getTime() + MAX_DAYS * DAY, last.getTime()));
const params = new URLSearchParams({ start_date: iso(from), end_date: iso(to), currencies });
const res = await fetch(`https://metalapi.com/api/v1/timeframe?${params}`, {
headers: { "X-API-Key": process.env.METALAPI_KEY },
});
const data = await res.json();
if (!data.success) throw new Error(`${data.error.code}: ${data.error.info}`);
Object.assign(rates, data.rates);
from = new Date(to.getTime() + DAY);
}
return rates;
}
// Десять лет дневных цен на золото за 10 запросов
const gold = await fetchRange("2016-01-01", "2025-12-31", "XAU");Изменения между двумя датами
/change сравнивает два дня напрямую, поэтому загружать весь период между ними не нужно. Для GET /api/v1/change?start_date=2026-09-30&end_date=2026-10-23¤cies=XAU:
{
"success": true,
"change": true,
"start_date": "2026-09-30",
"end_date": "2026-10-23",
"base": "USD",
"rates": {
"XAU": { "start_rate": 0.0002591613539, "end_rate": 0.0002501319446, "change": -0.000009029409258, "change_pct": -3.48409 },
"USDXAU": { "start_rate": 3858.6, "end_rate": 3997.89, "change": 139.29, "change_pct": 3.60986 }
}
}Для изменения цен используйте ключи с префиксом, например USDXAU. Обратные ключи меняются в противоположном направлении.
Дневные бары OHLC
/ohlc возвращает цену открытия, максимум, минимум и цену закрытия за один день — то, что нужно для свечных графиков и дневных диапазонов. Для GET /api/v1/ohlc?date=2026-10-22¤cies=XAU:
{
"success": true,
"ohlc": true,
"date": "2026-10-22",
"base": "USD",
"rates": {
"USDXAU": { "open": 3962.1, "high": 4012.75, "low": 3951.3, "close": 3989.4 },
"XAU": { "open": 0.0002523914086, "high": 0.0002530812644, "low": 0.000249205657, "close": 0.0002506642603 }
}
}Историческая конвертация
Добавьте date к /convert, чтобы конвертировать по цене закрытия прошедшего дня. Например, так можно узнать, сколько стоили 10 тройских унций серебра в евро 1 октября 2026 года:
GET /api/v1/convert?api_key=YOUR_API_KEY&from=XAG&to=EUR&amount=10&date=2026-10-01Анализ трендов
Ответ /timeframe легко превратить во временной ряд. В этом примере рассчитывается 20-дневная простая скользящая средняя цены золота:
// data = ответ /timeframe?currencies=XAU
const series = Object.entries(data.rates)
.sort(([a], [b]) => a.localeCompare(b))
.map(([date, rates]) => ({ date, price: rates.USDXAU }));
function movingAverage(points, period) {
return points.slice(period - 1).map((point, i) => ({
date: point.date,
sma: points.slice(i, i + period).reduce((sum, p) => sum + p.price, 0) / period,
}));
}
const sma20 = movingAverage(series, 20);Цены закрытия прошедших дней никогда не меняются, поэтому сохраняйте их у себя навсегда, а не запрашивайте повторно. Меняется только бар текущего дня.
Похожие руководства
Готовы начать разработку?
Создайте бесплатный аккаунт, чтобы получить ключ API, или изучите все эндпоинты в справочнике API.