金属価格 CSV で価格履歴をダウンロードする

bars エンドポイントへの 1 回のリクエストで、商品の日次の始値・高値・安値・終値が返ります。短いスクリプトでそれを CSV に書き出せます。2026年10月1日から23日までの金には、日次の行が 17 行あります。週末のバーはありません。

API で日次の金バーを取得する

USD建ての金には GET /v1/commodities/spot/XAU/USD/bars を使います。各バーには timestamp と、open、high、low、close の 10 進数文字列が含まれます。スクリプトはこれらの価格フィールドをそのまま CSV に書き出し、日付はタイムスタンプから取ります。出力の列は date、open、high、low、close です。

  1. APIキーを環境変数に設定する 無料の API キーを取得し、環境変数 NARWHAL_API_KEY に保存します。スクリプトはこの変数を読み取り、Authorization: Bearer YOUR_KEY ヘッダーでキーを送信します。
  2. 日付と間隔を設定する start と end はどちらも必須の ISO タイムスタンプです。この例では 2026-10-01T00:00:00Z から 2026-10-24T00:00:00Z までを指定し、interval を 1d にして、2026年10月1日から23日の日次の金バーを取得します。
  3. スクリプトを bars.py として保存する CSV のヘッダーとバーのフィールドは同じ順序のままにしてください。スクリプトは https://api.narwhalapi.com にリクエストを送り、返された行を標準出力に書き出すため、次の手順のコマンドでそれをファイルにできます。
    Python、日次の金バーを CSV に出力(実行方法:python bars.py > gold.csv)
    import csv, os, sys
    import requests
    
    H = {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}
    params = {
        "start": "2026-10-01T00:00:00Z",
        "end": "2026-10-24T00:00:00Z",
        "interval": "1d",
        "limit": 500,
    }
    out = csv.writer(sys.stdout)
    out.writerow(["date", "open", "high", "low", "close"])
    cursor = None
    while True:
        if cursor:
            params["cursor"] = cursor
        body = requests.get(
            "https://api.narwhalapi.com/v1/commodities/spot/XAU/USD/bars",
            params=params,
            headers=H,
            timeout=15,
        ).json()
        for b in body["bars"]:
            out.writerow([b["timestamp"][:10], b["open"], b["high"], b["low"], b["close"]])
        cursor = body.get("next_cursor")
        if not cursor:
            break
    
  4. gold.csv を書き出す CSV ファイルを書き出すには python bars.py > gold.csv を実行します。2026年10月1日から23日の場合、出力はヘッダー行の下に日次のデータ行が 17 行並びます。

ループの前の out.writerow がヘッダーを作ります。ループ内では、out.writerow を呼ぶたびに、そのヘッダーの順序でバーが 1 行追加されます。価格フィールドはレスポンスの 10 進数文字列のままで、日付は b["timestamp"][:10] から取ります。シートやモデルで日次の終値を使うには、必要な日付の行から close の値を取ってください。同じ行にそのバーの始値・高値・安値もあります。1 時間足や 1 分足で書き出す場合も、このスクリプトが書くのは各タイムスタンプの日付部分だけです。

履歴テーブルを使う、またはシートに取り込む

スクリプトを書かずに表を使うには、金のコモディティページで価格履歴を開いてください。ログイン済みのアカウントは、コモディティのページから履歴をCSVでダウンロードすることもできます。

スクリプトの CSV を Excel に取り込むには、データ > テキストまたは CSV から を使います。Google スプレッドシートでは、ファイル > インポート を使います。ファイルには日付と各バーの始値・高値・安値・終値が入っているので、書き出した同じ履歴をシートでもモデルの入力でも使えます。行を取り込むときは、日付列を価格と一緒に残してください。

ダウンロード方法と間隔を選ぶ

状況適した方法理由
ざっと確認するウェブサイトのチャート商品ページで金価格の履歴を見る
繰り返し使えるダウンロード、またはモデルの入力スクリプトリクエストしたバーを CSV に書き出す
1 時間足または 1 分足のデータinterval を 1h または 1m にしたスクリプト必要な間隔を指定し、期間を短くする

bars エンドポイントの interval は 1m、1h、1d を受け付けます。日次の履歴には 1d のままにしてください。1 時間足や 1 分足のデータが必要なら、このパラメーターを変更し、リクエストする期間を短くします。サンプルの日付と CSV の例は日次バーのものです。

金価格の履歴に週末がないのはなぜですか?

現物の金は、週末の休場中はバーがありません。2026年10月1日から23日は暦の上で 23 日間ですが、日次バーは 17 本で、すべて平日です。CSV の日付は、返されたバーの日付として読んでください。日次の間隔では、週末の行はファイルに追加されません。

1 回のリクエストで何本のバーが返りますか?

各リクエストは最大 limit 本のバーを返し、スクリプトでは 500 です。ループは next_cursor が null になるまでたどり、各レスポンスのバーを同じ CSV に書き込みます。日付や間隔を変えるときも、後続のページまで書き出せるように、このループは残してください。長い期間では、カーソルが次のページを選ぶ間も start、end、interval は維持します。スクリプトは次のリクエストの前に、そのカーソルを params に追加します。ヘッダーはループの外にあるので、全ページが同じ列名を共有します。

409 cursor_expired は、カーソルなしでやり直す必要があるという意味です。スクリプトの冒頭と同じく cursor = None で書き出しを最初からやり直し、その新しいリクエストからファイルを書いてください。

開始日が系列の開始より前の場合はどうなりますか?

すべてのアカウントで全履歴を取得できます。CSVがどこから始まるかは、最初に返された日付で確認してください。系列はリクエストの開始日より後に始まることがあります。

実例:2026年10月の金

サンプルの 2026年10月の日次リクエストから始めます。返される日付は 2026-10-01 から 2026-10-23 までで、データ行は 17 行です。CSV のヘッダーを書き、続けて各バーの日付と価格フィールドをそのヘッダーの順に書きます。最初の終値は 2026年10月1日の 4177.4458 です。これは最初のデータ行の close 列に入り、日付、始値、高値、安値の後に来ます。

日付次を開き最高最低閉じる
2026-10-014156.83524192.52154139.77874177.4458
2026-10-024177.21834225.64974125.92324141.5280

公開。

次のステップ