設定大宗商品價格提醒

依排程執行一個簡短指令碼,讀取現貨價格並與您設定的價位比較。2026 年 10 月 24 日黃金價格為 $3,996.00 時,以 $4,000 門檻進行的首次呼叫只會儲存初始狀態,不會觸發提醒。價格為即時,每次執行計為一次呼叫。

使用 API

  1. 取得金鑰並設定門檻值 取得一把免費金鑰,並存放在 NARWHAL_API_KEY 環境變數中。Narwhal 的各資料 API 共用一個帳戶和一把 API 金鑰,REST 與 MCP 也使用同一把金鑰。腳本在 Authorization: Bearer YOUR_KEY 請求標頭中發送金鑰,並將以美元每金衡盎司計的金價與 THRESHOLD 比較。
  2. 儲存 Python 腳本 請求從金價現貨端點讀取 price;價格等於或高於 THRESHOLD 視為在門檻值之上,低於則視為在門檻值之下。腳本把這一側與 gold_state.json 中儲存的值比較,側發生變化時印出警示,然後儲存新狀態並印出價格。
    Python:金價穿越 4,000 時警示
    import json, os, pathlib
    import requests
    
    THRESHOLD = 4000.00  # alert when gold crosses this level, in USD per troy ounce
    STATE = pathlib.Path("gold_state.json")  # remembers which side of the line we were on
    price = float(
        requests.get(
            "https://api.narwhalapi.com/v1/commodities/spot/XAU/USD",
            headers={"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"},
            timeout=10,
        ).json()["price"]
    )
    above = price >= THRESHOLD
    was_above = json.loads(STATE.read_text())["above"] if STATE.exists() else None
    if was_above is not None and above != was_above:
        print(
            f"ALERT: gold {'rose above' if above else 'fell below'} "
            f"{THRESHOLD:.2f} at {price:.2f}"
        )  # send an email or chat message here
    STATE.write_text(json.dumps({"above": above}))
    print(f"gold {price:.2f}")
  3. 讓腳本依排程執行 現貨價格是即時的,所以排程頻率可以隨你設定。每天一個請求,每月約 30 次呼叫,費用約為 $0.09。
  4. 把警示連接到訊息 條件內的 print 行是發送電子郵件或聊天訊息的位置。請在兩次排程呼叫之間保留狀態檔,這樣腳本才能把每個價格與儲存的一側比較。警示在兩個方向上都會觸發:先在下方後升到門檻值之上,或先在上方後跌到門檻值之下;即使沒有穿越,最後的價格 print 也會執行。

價格是即時的,所以請適度輪詢,因為每次輪詢都是一次消耗額度的呼叫。判斷是否穿越門檻值時,使用的是這些請求傳回的價格。腳本每次被呼叫都會發出一次現貨請求。請在腳本之外設定排程,腳本本身沒有排程迴圈。關於排程,請參閱排程抓取每日資料。

用 THRESHOLD 表示價格水準,用 STATE 表示儲存 JSON 檔案的路徑。比較條件是 price >= THRESHOLD。當 above 為 true 時,警示文字使用 rose above;為 false 時使用 fell below。文字同時包含門檻值和傳回的價格,因此訊息會帶上觸發警示的水準以及比較所用的價格。儲存的 JSON 中含有下一次呼叫要讀取的 above 值。

無需程式碼

在 Zapier 或 Make 中,先新增一個排程觸發器,再新增指向 https://api.narwhalapi.com/v1/commodities/spot/XAU/USD 的 HTTP 請求。在 Bearer 標頭中傳送金鑰,使請求使用您的 Narwhal 帳戶。對回傳的 price 新增一個篩選條件,後面接一個電子郵件或聊天動作;由篩選條件判斷該價格是否達到您的價位。現貨價格為即時,因此每次執行都會比較當前價格。Bearer 標頭使用與 Python 請求相同的 Narwhal 金鑰,REST 和 MCP 也共用該金鑰。

該方式請參閱 Zapier 教學或 Make 教學。Python 腳本包含已儲存的穿越狀態;無程式碼工作流程則有價格篩選器和訊息動作。在把這兩種條件視為同一種警示之前,先確定你的條件是價格高於門檻值,還是相對先前儲存的一側發生了變化。

各種情況適合的方式

情況最適合的方式原因
每日價位提醒依每日排程執行的腳本每天一次呼叫
更快的提醒每隔幾分鐘執行指令碼價格為即時;每次執行計為一次呼叫
不用程式碼的警示帶 HTTP 請求步驟的 Zapier、Make 或 n8n在工作流程中使用 HTTP 請求;Zapier 和 Make 可以在電子郵件或聊天動作之前依價格篩選。

如何重設已儲存的穿越狀態?

刪除 gold_state.json 即可重設已儲存的一側。該檔案不存在時,was_above 為 None,因此警示條件不會觸發。腳本會把傳回價格所在的一側儲存為起始狀態。所以刪除檔案會讓穿越比較重新開始,但不會讓第一個價格就觸發警示。

Webhook 能發送商品價格警示嗎?

Narwhal 的 Webhook 不涵蓋價格水準。它們傳送經濟數據發布、殖利率曲線、假日行事曆和預測事件。如需價格門檻提醒,請依排程輪詢價格。價格比較應放在讀取這些價格的指令碼或工作流程中。

能串流推送原油或銅的警示嗎?

原油和銅只支援 REST,因此這類警示請使用輪詢。只有金屬 XAU、XAG、XPT、XPD 以及外匯貨幣對可以串流推送。輪詢適用於所有現貨代碼,包括 XAU、XAG、XPT、XPD、XCU、BRENT 和 WTI。

計算範例:門檻值 4,000

從 2026 年 10 月 24 日的金價 $3,996.00 和門檻值 $4,000 開始。第一次呼叫時,價格低於門檻值,也沒有已儲存的一側。腳本在狀態檔中存入 false 並印出 gold 3996.00,不觸發警示。

例如,假設第 2 天的價格是 $4,012.50,第 3 天是 $4,020。這些後續價格是為說明而編造的。第 2 天,已儲存的一側在下方,新的一側在上方,所以腳本印出穿越警示。第 3 天,已儲存的一側和新的一側都在上方,因此不會重複警示。

呼叫黃金價格呼叫後儲存的一側警示
第 1 天,2026 年 10 月 24 日$3,996.00下方無
第 2 天(範例)$4,012.50上方ALERT: gold rose above 4000.00 at 4012.50(警示輸出)
第 3 天(範例)$4,020上方無

發布於 。

後續步驟