COT 訊號快照 — 2026 年 4 月
JPY — 極端空頭
淨空頭 −148k 合約 · Z 分數 −2.4
EUR — 擴展多頭
淨多頭 +112k 合約 · Z 分數 +2.1
GBP — 適度多頭
淨多頭 +64k 合約 · Z 分數 +1.3
AUD — 輕微空頭
淨空頭 −18k 合約 · Z 分數 −0.6
八個主要貨幣期貨市場中有兩個目前顯示投機性持倉達到統計極端。日圓淨空頭合約已跌破 −148,000 — 相對於過去 52 週分佈的 Z 分數為 −2.4 — 而歐元淨多頭已攀升至 +112,000,Z 分數為 +2.1。當非商業交易者如此大量地湧向一個方向時,該交易就不再關乎宏觀論點,而是關乎出場風險。
本文將探討接下來會發生什麼。我們利用每週 CFTC 交易者持倉報告數據,檢視如何識別共識交易何時從「良好持倉」轉變為「危險擁擠」,平倉的早期預警訊號是什麼樣子,以及如何圍繞 COT 持倉極端情況構建反轉框架。
本文涵蓋內容
- 使用 Z 分數和淨未平倉合約比率定義和衡量擁擠交易
- 所有八種主要貨幣期貨的當前極端讀數
- COT 驅動反轉的剖析 — 從極端到軋空的五個階段
- 將 COT 訊號與宏觀基本面結合以進行更高信心的交易
- 實用的反轉框架:入場觸發器、確認訊號和失效條件
定義擁擠交易
當非商業投機社群 — 對沖基金、資產管理公司和商品交易顧問 — 累積的定向持倉相對於其自身歷史而言達到統計極端時,交易就變得擁擠。關鍵詞是相對。淨多頭 +100,000 歐元合約本身並非極端;只有當它遠高於該貨幣的典型持倉範圍時,才算是極端。
兩個指標將此定義細化為可操作的閾值。
淨非商業持倉的 Z 分數
跨貨幣和時間段標準化 COT 讀數最穩健的方法是滾動 Z 分數。它回答了一個精確的問題:當前持倉相對於其近期平均值高出或低於多少個標準差?使用 52 週窗口將基準與當前宏觀制度掛鉤,而不是可能不再反映當前市場結構的數十年歷史。
import requests, statistics
BASE = "https://fxmacrodata.com/api/v1"
KEY = "YOUR_API_KEY"
def fetch_cot(currency: str, start: str = "2018-01-01") -> list[dict]:
r = requests.get(f"{BASE}/cot/{currency}", params={"api_key": KEY, "start": start})
r.raise_for_status()
return r.json()["data"]
def rolling_zscore(records: list[dict], window: int = 52) -> list[dict]:
"""Rolling 52-week z-score of net non-commercial positioning."""
vals = [r["noncommercial_net"] for r in records]
out = []
for i, rec in enumerate(records):
w = vals[i : i + window] # records are newest-first
if len(w) < 8:
out.append({**rec, "zscore": None})
continue
mu = statistics.mean(w)
sig = statistics.stdev(w)
z = (rec["noncommercial_net"] - mu) / sig if sig else 0.0
out.append({**rec, "zscore": round(z, 2)})
return out
eur_data = fetch_cot("eur")
eur_scored = rolling_zscore(eur_data)
# Latest reading
print(eur_scored[0])
# {'date': '2026-04-15', 'noncommercial_net': 112340, 'zscore': 2.1, ...}
讀數高於 +2.0 或低於 −2.0 將該貨幣置於其歷史分佈的前 2.3% 或後 2.3%。這就是本文視為「極端」的閾值 — 統計上足夠異常,可標記為結構性持倉風險。
淨持倉佔未平倉合約的比例
Z 分數告訴您持倉在其歷史分佈中的位置。淨未平倉合約比率告訴您定向押注在當前市場深度中的集中程度。當非商業淨持倉佔總未平倉合約的 25-30% 以上時,市場結構性偏斜,任何相反催化劑導致錯位的潛力很高。
歐元期貨 — 淨非商業持倉 (2023–2026)
滾動 52 週 Z 分數疊加。陰影帶標記極端閾值 (±2σ)。
來源:CFTC COT 數據透過 FXMacroData /v1/cot/eur — 說明性歷史系列
主要貨幣的當前極端讀數
跨貨幣 Z 分數掃描可以說是任何宏觀外匯交易者每週可以執行的最強大儀式。透過同時對所有八種貨幣期貨進行排名,它立即揭示了哪些交易在兩側都表現強勁,以及哪些交易仍處於宏觀論點有發展空間的中性區域。
COT 持倉 Z 分數 — 所有主要貨幣 (2026 年 4 月)
52 週滾動 Z 分數。紅色條表示極端空頭擁擠;綠色條表示極端多頭擁擠。
來源:CFTC COT 數據透過 FXMacroData /v1/cot/{currency} — 說明性快照
上述快照顯示投機情緒明顯分歧。日圓空頭是該綜合體中最擁擠的頭寸,其 Z 分數為 −2.4,遠低於 −2.0 的危險閾值。歐元多頭已達到 +2.1,並正接近共識多頭成為自身風險的臨界點。瑞郎為 −1.7,接近極端空頭區域。加元和澳元則舒適地處於中性區域。
對於配對交易者而言,日圓/歐元的分歧是最具可操作性的解讀:如果您相信均值回歸,那麼從持倉平倉中獲得最大結構性順風的交易是做空 EUR/JPY — 一種一側具有極端歐元多頭曝險,另一側具有極端日圓空頭曝險的貨幣。
關鍵要點:配對乘數效應
當貨幣對的兩條腿都帶有相反方向的極端 Z 分數時,平倉時的預期走勢會加劇。做空 EUR/JPY,其中歐元為 +2.1,日圓為 −2.4,意味著任何情緒轉變都會同時影響兩條腿。這種雙極端設置的歷史事件產生了劇烈、快速的波動 — 通常在持倉高峰後的數週內,該貨幣對會出現 3-5% 的波動。
COT 驅動反轉的剖析
極端持倉不會自發反轉。它會以一系列不同的階段平倉,每個階段都有可衡量的 COT 特徵。了解階段結構有助於您區分暫時性盤整和真正的制度轉變。
階段 1 — 累積 (Z 分數 0 至 ±1.5)
宏觀論點獲得關注。每週,投機社群都堅定地增加持倉。淨合約穩步增長,未平倉合約增加,價格趨勢反映並強化了共識。
階段 2 — 擁擠 (Z 分數 ±1.5 至 ±2.0)
持倉增長速度快於價格所能證明的。新進入者加入是因為交易有效,而不是因為原始論點得到強化。淨持倉的每週變化加速。這個階段通常對持有者來說是最有利可圖的 — 動能完全啟動 — 但這也是出場風險在背景中無形地開始積聚的時候。
階段 3 — 耗盡 (Z 分數超出 ±2.0)
新建倉的速度減慢。未平倉合約可能趨於平穩或開始下降,而價格繼續沿趨勢方向移動。這種持倉放緩和價格持續升值或貶值之間的分歧是 COT 報告提供的最重要的早期預警訊號。
階段 4 — 首次平倉 (Z 分數從極端回落)
催化劑出現 — 意外的央行聲明、宏觀數據意外、地緣政治衝擊 — 最具槓桿的參與者開始減少曝險。Z 分數從極端回落,但起初緩慢。價格急劇反轉,因為出場是集中的:所有在階段 2 進入的人都試圖同時從同一扇門離開。
階段 5 — 軋空 (Z 分數回歸中性)
平倉變得自我強化。空頭回補或多頭清算加速。在趨勢大部分時間內獲利的頭寸在軋空期間迅速變得無利可圖。該走勢通常會超調公允價值,然後在新中性持倉制度附近穩定下來。
日圓期貨 — 淨持倉與 USD/JPY 價格 (2023–2026)
雙軸:日圓淨非商業合約 (左);USD/JPY 即期匯率 (右,反轉)。持倉極端與主要貨幣對轉折點一致。
來源:CFTC COT 數據透過 /v1/cot/jpy 和即期匯率透過 /v1/forex/usd/jpy — 說明性系列
上圖說明了日圓淨空頭持倉如何在一個完整的反轉週期中追蹤 USD/JPY。在 2023 年至 2024 年初,日圓期貨的重度投機性空頭持倉與 USD/JPY 走高趨勢一致。但每次持倉達到統計極端時,催化劑 — 通常是日本央行的政策訊號 — 都會迅速壓縮空頭頭寸,導致日圓急劇升值。
COT 數據並未預測催化劑。它告訴您,該頭寸如此擁擠,以至於任何相反的催化劑,無論大小,都會因人群的出場動態而被放大。透過 FXMacroData COT 端點 存取日圓持倉歷史,以追蹤當前極端情況是正在積聚還是正在緩解。
價格-持倉背離訊號
最可靠的基於 COT 的反轉預警並非持倉的絕對水平 — 而是價格方向與持倉方向之間的背離。當價格繼續朝一個方向移動,但標的期貨的投機性持倉開始朝另一個方向移動時,大型參與者已經在減少曝險,而散戶動能交易者則將價格推高或推低。
EUR/USD 與歐元 COT 淨多頭 — 偵測背離
EUR/USD 即期 (左軸,藍色);歐元淨非商業合約以千計 (右軸,金色)。背離區域以琥珀色陰影標示。
來源:/v1/forex/eur/usd 和 /v1/cot/eur — 說明性系列
背離偵測規則
- 看跌背離: EUR/USD 價格創下新高,但歐元 COT 淨多頭未能創下新高 — 投機者正在趁強勢出貨。留意 2-6 週內的反轉。
- 看漲背離: USD/JPY 價格創下新高 (日圓進一步走弱),但日圓空頭合約停止擴張 — 空頭賣家並未增加對該走勢的信心。潛在的耗盡訊號。
- 趨勢確認: 價格和淨持倉均朝同一方向發展 — 阻力最小的路徑保持不變。保持趨勢,直到此確認被打破。
將 COT 訊號與宏觀基本面結合
COT 持倉是一種市場結構訊號,而非基本面訊號。當它與潛在宏觀環境一致 — 或矛盾 — 時,其力量會倍增。最具高信心的設置出現在兩種特定配置中。
配置 1 — 宏觀順風,擁擠持倉
一個頭寸的基本面理由強勁且廣為人知 — 但它已經完全反映在極端投機性持倉中。在這種情況下,進一步宏觀改善的上行空間有限,因為市場已經為此佈局。不對稱性在於下行風險:如果宏觀數據即使輕微令人失望,反轉也將是劇烈的,因為人群無處可逃。
這描述了當前的歐元設置。美元走弱的敘事和歐盟經濟數據的堅挺在基本面上支持歐元多頭 — 但 +2.1 的 Z 分數告訴您,這一論點的大部分已經反映在期貨持倉中。該交易沒有錯,但風險/回報已顯著收窄。將歐元宏觀數據與 COT 一起提取以驗證:
import requests
BASE = "https://fxmacrodata.com/api/v1"
KEY = "YOUR_API_KEY"
# EUR macro fundamentals
eur_gdp = requests.get(f"{BASE}/announcements/eur/gdp", params={"api_key": KEY, "limit": 6}).json()
eur_cpi = requests.get(f"{BASE}/announcements/eur/inflation", params={"api_key": KEY, "limit": 6}).json()
eur_policy = requests.get(f"{BASE}/announcements/eur/policy_rate", params={"api_key": KEY, "limit": 4}).json()
# COT positioning
eur_cot = requests.get(f"{BASE}/cot/eur", params={"api_key": KEY, "limit": 8}).json()
print("Latest EUR policy rate:", eur_policy["data"][0])
print("Latest EUR CPI:", eur_cpi["data"][0])
print("Latest EUR net COT:", eur_cot["data"][0]["noncommercial_net"])
配置 2 — 宏觀逆風,擁擠持倉 (最高警報)
這是最高警報設置。宏觀數據開始與共識論點相矛盾,同時持倉處於極端。一個擁擠的交易失去其基本面理由是導致快速、無序平倉的秘訣。瑞郎在 −1.7 的位置,加上任何挑戰瑞郎看跌論點的 SNB 政策意外,都將是這種配置的典型範例。
持倉變化速度 — 每週淨合約變化量 (歐元、日圓、英鎊)
淨非商業合約的週環比變化。在持倉極端時,變化量減速是早期階段 3 耗盡訊號。
來源:CFTC COT 數據透過 FXMacroData — 說明性系列
速度與水平同樣重要。當歐元累積高峰期淨持倉變化每週達到 +8,000 至 +12,000 份合約,此後減緩至 +1,000 至 +2,000 份時,這種減速是客觀的階段 3 特徵。人群仍在增加持倉,但信心正在動搖。這就是反轉風險從理論轉變為迫在眉睫的時候。
實用的反轉交易框架
將 COT 訊號轉化為實際交易需要結構。持倉極端情況可能持續數週或數月,並且無法保證極端讀數會迅速反轉。以下框架將 COT 用作先決條件篩選器,而非精確的時機工具。
步驟 1 — 篩選極端情況
對所有 8 種貨幣執行每週 Z 分數掃描。將任何 |z| > 2.0 的貨幣標記為反轉監控的候選貨幣。
步驟 2 — 檢查速度
計算每週變化量。如果最近 3 週顯示增加速度減慢 (|Δ| 縮小),則耗盡階段可能正在進行。這是入場的先決條件,而非觸發器。
步驟 3 — 與宏觀對齊
透過 FXMacroData 檢查相關基本面指標。宏觀數據是支持還是削弱擁擠論點?宏觀順風意味著等待;宏觀逆風意味著設置已啟動。
步驟 4 — 等待觸發器
在沒有觸發器的情況下,不要逆勢操作極端持倉。觸發器包括:央行意外、宏觀數據不及預期、關鍵支撐/阻力位的技術性突破,或 COT 淨減少的第一週得到確認。
步驟 5 — 根據波動性調整頭寸規模
擁擠極端情況下的反轉是快速且波動的。調整頭寸規模以適應平倉獲得動能之前的初始不利走勢。止損設在極端 Z 分數高點/低點之上/之下。
失效條件
如果在入場後 COT 顯示極端方向出現新的週記錄,則該論點在短期內是錯誤的。出場並重新評估。擁擠交易在反轉之前可能會變得更加擁擠。
建立每週 COT 掃描器
該框架的實際實施是一個每週掃描器,它自動計算所有八種貨幣期貨的 Z 分數和變化量,並輸出一個排名警報表。這是一個使用 FXMacroData COT 端點 的生產就緒腳本:
import requests, statistics
from datetime import date, timedelta
BASE = "https://fxmacrodata.com/api/v1"
KEY = "YOUR_API_KEY"
CURRENCIES = ["aud", "cad", "chf", "eur", "gbp", "jpy", "nzd", "usd"]
WINDOW = 52 # weeks for z-score baseline
EXTREME_Z = 2.0 # alert threshold
def fetch_cot(ccy: str) -> list[dict]:
r = requests.get(f"{BASE}/cot/{ccy}", params={"api_key": KEY, "start": "2019-01-01"})
r.raise_for_status()
return r.json()["data"] # newest first
def analyse(records: list[dict]) -> dict:
vals = [r["noncommercial_net"] for r in records]
net = vals[0]
# 52-week z-score
window = vals[:WINDOW]
mu = statistics.mean(window)
sig = statistics.stdev(window) if len(window) > 1 else 1
z = round((net - mu) / sig, 2) if sig else 0.0
# 4-week velocity (average weekly change)
delta_4w = round((vals[0] - vals[4]) / 4, 0) if len(vals) > 4 else 0
# Net as % of open interest
oi = records[0].get("open_interest", 1) or 1
net_oi = round(net / oi * 100, 1)
return {
"net": net, "zscore": z,
"delta_4w": delta_4w, "net_oi_pct": net_oi,
"date": records[0]["date"]
}
print(f"\n{'CCY':5} {'Net':>9} {'Z-Score':>9} {'4W Delta':>10} {'Net/OI%':>9} Status")
print("-" * 60)
for ccy in CURRENCIES:
data = fetch_cot(ccy)
stats = analyse(data)
flag = " ⚠ EXTREME" if abs(stats["zscore"]) >= EXTREME_Z else ""
print(f"{ccy.upper():5} {stats['net']:>9,.0f} {stats['zscore']:>9.2f} "
f"{stats['delta_4w']:>10,.0f} {stats['net_oi_pct']:>9.1f}%{flag}")
每週五晚上 — 在東部時間下午 3:30 COT 發布後不久 — 運行此腳本,您可以在週末之前和下週日亞洲開盤之前,全面了解投機格局。
存取真實 COT 數據
FXMacroData 提供所有八種主要貨幣期貨 — AUD, CAD, CHF, EUR, GBP, JPY, NZD, and USD — 的每週 CFTC COT 持倉數據,具有完整的歷史記錄、清晰的 JSON 回應和每個貨幣的端點。
試用歐元端點:https://fxmacrodata.com/api/v1/cot/eur?api_key=YOUR_API_KEY