下載金屬價格 歷史 CSV 檔

向 bars 端點發送一次請求,就能取得某種大宗商品的每日開盤價、最高價、最低價與收盤價,再用一支簡短的腳本寫入 CSV。2026 年 10 月 1 日至 23 日的黃金共有 17 列日線資料。週末沒有 K 線。

透過 API 取得每日黃金 K 線

以美元計價的黃金使用 GET /v1/commodities/spot/XAU/USD/bars。每根 K 線包含 timestamp,以及 open、high、low、close 的十進位字串。腳本會將這些價格欄位直接寫入 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 日的每日黃金 K 線。
  3. 將腳本儲存為 bars.py CSV 標頭與 K 線欄位的順序要保持一致。腳本會向 https://api.narwhalapi.com 發送請求,並把回傳的列寫到標準輸出,因此下一步的指令可以把它們存成檔案。
    Python,將每日黃金 K 線輸出為 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 使用 python bars.py > gold.csv 寫出 CSV 檔。2026 年 10 月 1 日至 23 日的輸出,在標頭下方有 17 列每日資料。

迴圈之前的 out.writerow 負責寫入標頭。在迴圈內,每次呼叫 out.writerow 都會依標頭的順序新增一根 K 線。價格欄位維持回應中的十進位字串,日期由 b["timestamp"][:10] 提供。若要在試算表或模型中使用每日收盤價,請從所需日期那一列取 close 值。該 K 線的開盤價、最高價與最低價也在同一列。對於依小時或分鐘匯出的資料,這支腳本仍然只寫入每個時間戳記的日期部分。

使用歷史表格或匯入試算表

無需撰寫指令碼,開啟黃金商品頁面上的價格歷史即可使用其表格。已登入的帳戶還可以從商品頁面將歷史下載為 CSV。

要把腳本產生的 CSV 匯入 Excel,請使用「資料」>「從文字/CSV」。在 Google 試算表中,請使用「檔案」>「匯入」。檔案包含日期以及每根 K 線的開盤價、最高價、最低價與收盤價,因此同一份匯出的歷史資料既可用於試算表,也可作為模型的輸入。匯入這些列時,請把日期欄與價格一併保留。

選擇下載方式與時間間隔

情況最適合的方式原因
快速查看網站圖表在商品頁面查看黃金價格歷史
可重複使用的下載,或模型的輸入腳本將請求的 K 線寫入 CSV
小時或分鐘資料將 interval 設為 1h 或 1m 的腳本請求所需的時間間隔並縮短時間範圍

bars 端點的 interval 接受 1m、1h 和 1d。日線歷史請維持 1d。如需小時或分鐘資料,請修改該參數並縮短請求的時間範圍;範例中的日期和 CSV 樣本對應的是日線資料。

為什麼黃金價格歷史中沒有週末?

現貨黃金在週末休市時沒有 K 線。2026 年 10 月 1 日至 23 日橫跨 23 個日曆日,共有 17 根日線,全部落在工作日。請把 CSV 中的日期理解為回傳 K 線所對應的日期。日線間隔不會向檔案中新增週末的列。

每次請求會回傳多少根 K 線?

每次請求最多回傳 limit 根 K 線,腳本中為 500。迴圈會持續跟進 next_cursor,直到它為 null,並把每次回應的 K 線寫入同一個 CSV。修改請求的日期或時間間隔時,請保留這段迴圈,這樣匯出的結果才能包含後續的頁面。對於較長的時間範圍,請維持 start、end 和 interval 不變,由游標選擇後續的頁面。腳本會在發出下一次請求之前把該游標加入 params。標頭位於迴圈之外,因此所有頁面共用同一組欄位名稱。

出現 409 cursor_expired 表示需要不帶游標重新開始。像腳本開頭那樣用 cursor = None 重新開始匯出,並依這次新的請求寫出檔案。

如果我的開始日期早於序列開始時間怎麼辦?

所有帳戶都可讀取完整歷史。請查看回傳的第一個日期,以了解 CSV 從哪裡開始,因為序列可能晚於您請求的開始日期。

實例:2026 年 10 月的黃金

從範例中 2026 年 10 月的日線請求開始。回傳的日期從 2026-10-01 開始,到 2026-10-23 結束,共有 17 列資料。先寫入 CSV 標頭,再依標頭的順序寫入每根 K 線的日期與價格欄位。第一個收盤價是 2026 年 10 月 1 日的 4177.4458,它位於第一列資料的 close 欄,排在日期、開盤價、最高價與最低價之後。

日期開啟最高值最低值關閉
2026-10-014156.83524192.52154139.77874177.4458
2026-10-024177.21834225.64974125.92324141.5280

發布於 。

後續步驟