电气电源信号快照
日元 极短
净148万份合同 · Z分数为2.4
欧元 延长长期
净合同112k · Z分数为+2.1
英 中等长
净合同+64k · Z分数+1.3
澳元略短
净合同为18000份 · Z分数为0.6
目前,八个主要货币期货市场中有两个在投机定位方面呈现出极端的统计数据.日元净空期合约跌至低于−148,000,对比52周的分布为-2.4的z分,而欧元净长期合同升至112,000,z分为+2.1 .当非商业交易者以一种方向挤压时,交易不再是宏观论点,而是开始是退出风险.
本文是关于接下来会发生的事情.使用CFTC每周的交易者承诺数据,我们研究如何识别共识交易从"良好定位"到"危险拥挤"时,缓和的早期预警信号是什么样子,以及如何在COT定位极端周围构建逆转框架.
本文所讨论的内容
- 通过z分数和净开放利息比率定义和衡量拥挤交易
- 目前所有八种主要货币期货的极限读数
- 的解剖 五个阶段从极端到挤压
- 结合COT信号与高信任度交易的宏观基本面
- 一个实用的逆转框架:进入触发器,确认信号和无效
定义一个拥挤的贸易
交易会变得拥挤,当非商业投机界对冲基金,资产管理者和商品交易顾问积累一个与其自身历史相比,统计学上极端的方向性位置.关键词是 亲属净长度为+100,000欧元的合约本身并不极端,只有在远高于货币典型定位范围时才是极端的.
两个指标将这个定义改成可操作的值.
净非商业定位的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%位.这是本文将其视为"极端"的值.
净仓位作为公开利息的部分
分告诉你定位在历史分布中的位置.净对开放利息比率告诉你,指向性投注在当前市场深度内是多么集中.当非商业净定位占总开放利益的25~30%以上时,市场结构性偏差,任何相反的催化剂的颠覆可能性很高.
图1:欧元净COT定位欧元期货 净非商业定位 (20232026)
滚动52周z分数覆盖. 阴影带标记极限值 (±2σ).
来源:通过FXMacroData的CFTC COT数据 /v1/cot/eur 图示性的历史系列
各国主要货币的当前极端读数
跨货币z分数扫描可以说是任何宏观外汇交易者可以运行的最强大的每周仪式.通过同时排名所有八种货币期货,它立即揭示哪些交易在双方都处于中立区,哪些保持在中立区域,宏观论文有空间运行.
图2:多货币z分数条形图所有主要货币 (2026年4月)
52周滚动z分数. 红色条标志着极短拥挤;绿色条表示极长拥挤.
来源:通过FXMacroData的CFTC COT数据 /v1/cot/{currency} 图片中的照片
上图显示投机情绪明显分离.日元短本是复杂中最拥挤的位置,其z分数为-2.4,远低于-2.0危险门.欧元长期已经达到2.1,并接近共识长期成为自身风险的点.瑞方是-1.7,接近极短地区.CAD和AUD舒适地坐落在中立区.
对于对交易者来说,日元/欧元差距是最适用的读法:如果你相信平均反转,从定位上获得最结构性的收益的交易是EUR/JPY短期,这是一种货币,一方面具有极长的欧元风险,另一方面具有非常短的日元风險.
关键的教训:对乘法效应
当货币对的两条腿都以相反的方向带有极端z分数时,预期的放松动作会复杂化. EUR/JPY的短 EUR在 +2.1 和 JPY在 −2.4 意味着情绪的任何变化都会同时影响两条脚.这种双极端设置的历史事件在定位峰值后的几周内产生了利,快速的动作.
转换机器人机械的解剖学
极端定位不会自发逆转.它以一系列不同的阶段进行,每个阶段都有可测量的COT信号.理解阶段结构有助于区分临时整合和真正的制度转变.
阶段1 积累 (Z分为0至±1.5)
宏观论点得到了吸引力.每周,投机界都会有信心地增加这一立场.净合约稳步增长,公开利息上升,价格趋势反映和加强了共识.
阶段2 拥挤 (Z分数为±1.5至±2.0)
价格的增长速度超过价格. 新入门者加入是因为交易已经奏效,而不是因为原始论点已经加强.净定位的每周三角比率加速. 这一阶段通常是持有人最有利可图的势完全投入,但也是当退出风险开始在背景下不见地建立时.
阶段3 疲劳 (Z分数超过±2.0)
新的位置建立速度放缓. 开放式利息可能会停滞或开始下降,而价格继续朝着趋势方向发展. 放缓位置定位和持续价格升值或值之间的差异是COT报告提供的最重要的早期预警信号.
第4阶段 第一次放松 (Z-Score从极端退缩)
催化剂出现了:一个意想不到的央行声明,一个宏观数据惊喜,一个地缘政治冲击,并且最受杆影响的参与者开始减少暴露. z分数从极端退缩,但起初缓慢.价格急剧反转,因为出口是聚类的:进入第二阶段的所有人都试图通过同一个门同时离开.
第五阶段压缩 (Z-Score返回中性)
退市变得自强化. 短期覆盖或长期清算加速. 在大部分趋势中利的位置在挤压期间迅速变得无利可图. 移动往往在接近新中性定位制度之前稳定之前超出了公平价值.
图3:日元定位与美元/日元价格双轴汇率指数的价格是:
双轴:JPY净非商业合约 (左);美元/JPY现货汇率 (右,逆转). 定位极端与主要的对转折点一致.
来源: 通过 /v1/cot/jpy 通过 /v1/forex/usd/jpy 图示系列
上图说明了日元净空头如何在整个逆转周期中跟踪美元/日元.到2023年和2024年初,日元期货的大量投机空头对应于美元/JPY走向上升的趋势.但每次定位达到统计极端时,催化剂通常是日本银行政策信号迅速压缩了空头,产生了日的大幅升值.
据报道,在此之前,在中国,币的值已经超过了1%,而在中国则超过了3%. 对于 FXMacroData COT 的终点 追踪当前极端是否正在增强或缓解.
价格定位差异信号
最可靠的基于COT的反转警告不是定位的绝对水平,而是价格方向和定位方向之间的分歧.当价格继续朝着一个方向,但潜在期货的投机定位开始朝着另一个方向移动时,大型参与者已经减少了风险,而零售势头交易者推动价格上升或下降.
图4:欧元/美元价格与欧元-美元价值 (差异示例)欧元/美元与欧元COT净长期交易 检测差异
欧元/美元现货 (左轴,蓝色); 欧美净非商业合约成千 (右轴,黄金).
来源: /v1/forex/eur/usd 现在我 /v1/cot/eur 图示系列
发现差异的规则
- 低迷差异: 欧元/美元价格创下新高点,但欧元COT净长期未能创下新的高点投机者正在强势分布.
- 率差异: 美元/日元价格创下新高 (日元进一步疲软),但日元空期合约停止扩张空期卖家并没有增加对这一举动的信念.潜在的疲劳信号.
- 趋势确认: 价格和净定位都朝着同一个方向走势 最小阻力路径保持不变.
结合COT信号与宏观基础
定位是市场结构的信号,而不是基本的信号.当它与底层宏观环境一致或矛盾时,它的力量会增加.最有信心的设置出现在两个特定的配置中.
配置1 宏观尾风,拥挤位置
对于一个立场的基本理由是强有力的和明确的,但它已经完全反映在极端的投机定位中.在这种情况下,进一步宏观改进的好处是有限的,因为社区已经为此定位.不对称性在于负面:如果宏观数据令人失望,即使是适度,反转将是暴力的, 因为人群无处可去.
这描述了目前的欧元设置.美元的疲软叙述和欧盟经济数据的加强支持欧元对基本面的长期,但z分数为+2.1告诉你,这项论点的大部分已经被定价为期货定位.交易并不是错误的,但风险/回报已经显著缩小.
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 宏观风头,拥挤位置 (最高警报)
利率是最高的警报设置.宏观数据开始与共识论点相矛盾,同时定位处于极端状态.拥挤的交易失去其基本理由是快速,无序放松的秘.CHF在-1.7结合任何挑战CHF熊论点的SNB政策惊喜将是此配置的教科书示例.
图5:每周COT的三角速度定位变化速度 周净合约三角 (EUR,JPY,GBP)
净非商业合约的周到周变化. 在位置极端时,
来源:通过FXMacroData说明系列的CFTC COT数据
速度与水平一样重要.当净位置变化在欧元积累的高峰时每周为+8,000至12,000合约,并自那时起减缓到+1,000至+2,000时,这种放缓是客观的第三阶段签名.人群仍然在增加,但信念正在摇摇欲.这是反转风险从理论转变到迫在眉的时刻.
一个实用的反转交易框架
转换COT信号成实际交易需要结构. 定位极端可能持续数周或数月,并且没有保证极端读数会立即逆转. 下面的框架使用COT作为先决条件过器,而不是精确的定时工具.
步骤1 极端的屏幕
运行每周的z分扫描在所有8种货币. 标记任何货币的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}")
让你在周末之前和下周日亚洲公开赛之前对投机景观进行完整的阅读.
访问实际的COT数据
根据该数据,FXMacroData提供了每周CFTC COT定位,为所有八个主要货币期货 AUD,CAD,CHF,EUR,GBP,JPY,NZD和USD提供完整的历史记录,清洁的JSON响应和每个货币终点.
试试EUR终点: https://fxmacrodata.com/api/v1/cot/eur?api_key=YOUR_API_KEY