過去データの取得
1999年までさかのぼる日次価格の照会、期間を指定した一括取得、2つの日付間の変動の比較、OHLCバーの取得、移動平均による価格トレンドの分析方法を、コード例とともに解説します。
利用できる過去データ
MetalAPIは、シンボルごとに1日1本のバー(始値、高値、安値、終値)を保存しています:
- 通貨:1999年から
- 貴金属、産業用金属、エネルギー:2000年から
- 暗号資産:2014年から
2026年10月より前の金属価格は期近の先物から算出されているため、同じ日のスポット価格とわずかに異なる場合があります。すべてのプランで全期間の履歴を照会できます。プランによって異なるのは、1回の期間指定リクエストでカバーできる日数だけです。
特定の1日
日付をパスに指定するか、dateパラメーター付きの/historicalエンドポイント、または/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までの1日ごとのエントリを、日付をキーとして返します。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 }
}
}週末や市場の休場日など、終値のない日は含まれないことがあります。暦日ごとに1件のエントリがあるとは想定しないでください。/timeseriesはエイリアスで、"timeframe": trueの代わりに"timeseries": trueを返します。
プランの上限を超える期間
1回のリクエストで指定できる期間は、Freeで最大30日、有料プランで最大365日です。それより長い期間を指定するとエラー207が返されます。長い期間は、1回のリクエストに収まる単位に分割してください:
const DAY = 86_400_000;
const MAX_DAYS = 365; // Freeプランでは30
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年分の金の日次価格を10回のリクエストで取得
const gold = await fetchRange("2016-01-01", "2025-12-31", "XAU");2つの日付間の変動
/changeは2つの日を直接比較するため、その間の期間のデータをダウンロードする必要はありません。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は1日分の始値、高値、安値、終値を返します。ローソク足チャートや1日の値幅の表示に必要なデータです。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 }
}
}過去の価格での換算
/convertにdateを追加すると、過去の終値で換算できます。たとえば次のリクエストは、2026年10月1日時点で銀10トロイオンスがユーロでいくらだったかを返します:
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リファレンスですべてのエンドポイントをご確認ください。