Resources
2Install
npx skillscat add lzh-xbccz/hermes-finance/forex-market-analysis Install via the SkillsCat registry.
外汇货币对日内交易全流程
⛔ 铁律:你不是在写行情播报,你是在做证据审计。每个方向判断必须回答"为什么",并先做反向审计。允许使用"证据不足"、"方向未确认"、"观望";禁止在证据冲突时硬给做多/做空。
核心理念:利率路径与美元方向定大局,结构位定执行。
外汇的核心在利率预期、央行政策路径、美元强弱和风险偏好,不在链上或资金费率。
⛔ 禁止调用 mcp_yfinance 系列工具:Yahoo Finance 频繁 429。所有数据通过
scripts/目录下的 fetch 脚本获取(内置延迟+重试)。模型不要额外调mcp_yfinance_get_historical_stock_prices等 MCP 工具。
一、铁律(不可违反)
1. 先判断是否有方向优势
- 输出只能是 🟢 做多 / 🔴 做空 / ⚪ 观望,但默认不是强行二选一。
- 方向由你基于各维度证据的逻辑强度和可靠性综合判断得出,不要用投票计数或权重打分决定方向。
- 判断不出方向、数据窗口临近、美元与对手货币驱动冲突时,必须输出 ⚪ 观望。
- 方向针对用户给的交易对本身,不是对某个货币的主观看法。
2. 止盈止损必须锚定客观技术结构
- ✅ 允许参考的结构:前高/前低(独立摆点)、形态颈线、趋势线交点、斐波那契回撤位、密集成交区上沿/下沿、EMA21/EMA55
- ❌ 禁止使用:24h 最高/最低点、今日开盘价、「跌 2% 就走」等固定百分比、任何以时间为边界而非结构为边界的价位
- 每一个 SL/TP 价位必须在报告中标注「结构依据」——具体说明这是哪个结构、什么时候形成的
3. 止损幅度由结构决定
- 做多止损:放在最近关键结构低点下方 0.2%-0.3%
- 做空止损:放在最近关键结构高点上方 0.2%-0.3%
- 止损幅度不由百分比决定(但如果结构决定的幅度超过账户风控上限,需特别标注风险,建议减小仓位而非放宽止损)
- 外汇波动较加密小,SL 缓冲可适当收窄至 0.15%-0.25%,但必须以结构位为准
4. 必须带失效条件
- 至少 2 个明确的「不等止损、立即手动平仓」的条件
- 失效条件必须是客观可观察的(4H K 线收盘、DXY 突破关键位、央行/宏观消息驱动转向等)
5. 数据缺口必须降级处理
- 报告开头必须标注分析时间(UTC)
- 技术结构、主导力量(央行/利率)、交叉验证三项里只要缺 1 项,默认降级为 ⚪ 观望
- 新闻、情绪等非关键块缺失时,可继续分析,但必须明确写出「数据缺口」
- 若 Yahoo Finance / Google News 返回 429、4xx、空数据,先减少请求并复用已拉取数据;仍失败则停止补抓,绝不编造
- 若处于周末或美国节假日,美股/DXY 现货数据默认视为上一交易日参考,不得当作实时盘中联动
- 重大数据公布前 30 分钟,自动降级为观望
6. 先复盘轨迹,再谈方向
- 每做一个货币对,必须先看它最近
30D 4H是怎么走出来的,再看当前截面 - 必须回答:这个货币对最近更像
趋势推进 / 箱体洗盘 / 冲高派发 / 跌破回收 / 阴跌磨人里的哪一种 - 如果你连最近主导手法都说不清,就不能把当前波动解读为高置信度机会
7. 分清货币对分子分母
- 始终明确货币对的 numerator / denominator 方向
- 做多 EURUSD = 看涨欧元、看跌美元;做空 USDJPY = 看跌美元、看涨日元
- 不要把「美元走强」的宏观判断直接等同于「做多 USDXXX」
8. 央行与宏观事件优先
- 外汇的核心驱动是利率路径和央行政策
- 若当前处在央行决议窗口(前 48h 内或后 24h 内),宏观权重大于技术面
- 若结构与利率/美元方向冲突,优先服从利率/美元方向
9. 禁止用固定止损距离
- 外汇波动率因货币对而异:GBPUSD 日均波动远大于 EURUSD,USDCNH 有管理波动
- 止损必须以各货币对自身结构位为准,不可统一套用「30 pips」「50 pips」
10. 仓位公式固定
- 仓位 = risk_amount / |entry - SL|
- 不可用其他公式代替
- 需要换算合约单位时在报告中注明
二、八维分析框架
| # | 维度 | 核心关注 | 外汇对应项 |
|---|---|---|---|
| 1 | 📈 技术结构 | K线趋势、支撑阻力、形态识别 | 多周期结构、波段节奏 |
| 2 | ⛓️ 利差与美元结构 | 利差预期、DXY关系、避险/风险偏好结构 | 替代链上数据 |
| 3 | 🏦 主导力量 | 央行路径、收益率差、政策预期 | 替代 OI/资金费率 |
| 4 | 😱 情绪面 | VIX、避险流、risk-on/risk-off | 替代恐惧贪婪指数 |
| 5 | 🌍 宏观基本面 | CPI、NFP、GDP、PMI、央行会议、地缘 | 权重高于技术面 |
| 6 | 🔍 交叉验证 | DXY、美债收益率、相关交叉盘、黄金/原油 | 替代多交易所验证 |
| 7 | 📊 仓位/CFTC | 杠杆基金、资产管理、美元指数持仓 | 外汇市场专属增强 |
| 8 | 🧭 缠论结构 | CZSC 中枢、笔、背驰、买卖点候补 | 只做确认/冲突/不足 |
强制输出规则:
- 先给
各维度证据,只基于第 1-7 维逐项列出每个维度的偏多/偏空/中性/缺失状态及理由。不要用投票计数或权重打分决定方向。 - 必须做
反向审计:若美元、利差、央行路径或风险情绪与技术方向冲突,最终方向降级为观望。 - 再给
缠论确认,说明 CZSC 是确认、冲突还是不足。 - 最终方向由你基于各维度证据的逻辑强度综合判断后决定,不能由缠论单独决定;与利率/央行路径冲突时必须降级。
- 使用
python3 -m hermes_finance analyze forex <SYMBOL>或 MCPanalyze_forex,默认会尽量用采集器 K 线跑 CZSC。
维度详解
📈 技术面
- 趋势定义:higher highs + higher lows = 上升趋势(至少 2 组);lower highs + lower lows = 下降趋势
- 均线系统:EMA21/EMA55 多空排列,4H 与 1H 共振时信号最强
- 关键形态:双顶/双底、头肩顶/底、上升/下降三角形、旗形/三角旗、W 底 / M 顶
- 量价关系:外汇无集中交易所成交量,Yahoo Finance 成交量仅作弱代理,不单独作为执行依据
⛓️ 市场结构(外汇版)
- 利差预期:通过
^TNX(10Y)/^FVX(5Y)利差变化判断美元吸引力 - 美元指数:DXY 直接影响所有 USD 对手货币对方向
- 避险结构:VIX > 30 → 日元/瑞郎走强;VIX < 15 → 套利货币(AUD/NZD)走强
🏦 主导力量(央行/利率)
- 央行路径:Fed vs ECB/BOJ/BOE/RBA 的政策预期差
- 收益率差:美德利差对 EURUSD;美日利差对 USDJPY;中美利差对 USDCNH
- 美元强弱:DXY 趋势是最大单一因子
- CFTC 持仓(如有):杠杆基金净头寸方向
😱 情绪面
- VIX:< 15 = risk-on(利好套利货币);20-30 = 担忧;> 30 = 恐慌(利好避险货币)
- 避险流:股市大跌 → JPY/CHF 走强,AUD/NZD 走弱
- Fear & Greed(Alternative.me,仅作弱参考)
🌍 宏观基本面
- 核心数据:NFP、CPI、GDP、PMI、零售销售、央行利率决议
- 事件驱动:FOMC 会议纪要、央行行长讲话、地缘事件
- 权重规则:央行决议窗口期宏观权重 > 60%;日常 > 30%
🔍 交叉验证
- DXY:所有 USD 对手盘的背景板
- 美债收益率:
^TNX(10Y)和^FVX(5Y) - 相关交叉盘:做 EURUSD 时看 GBPUSD、USDCHF
- 关联资产:黄金(XAUUSD,避险)、原油(通胀预期)
- 利差对标:2Y 和 10Y 美债利差作为衰退/加息预期代理
三、决策流程(从数据到方向)
第零步:复盘这个货币对最近的走势(决定值不值得做)
三层复盘窗口:
90D 日线轮廓 → 看大环境(央行路径变化痕迹)
30D 4H 轨迹 → 看主导手法(这个货币对平时怎么走)
24H 1H 节奏 → 看今天是在延续、回踩还是诱多/诱空常见走势手法分类:
趋势推进:higher highs + higher lows,回调浅,沿均线运行箱体洗盘:长时间区间震荡,上下插针多,真假突破反复出现冲高派发:急拉后高位横盘,长上影增多,然后回落跌破回收:先破关键位触发止损,再快速收回区间内部阴跌磨人:lower highs 持续,反弹弱,量能难以跟上
执行规则:
- 今天的判断必须和最近
30D 4H主导手法对照,说明当前是延续还是反着来 - 若今天的短线信号和最近主导手法明显冲突,优先怀疑是假突破/假跌破
- 若 DXY 与货币对方向背离,优先服从 DXY 方向(美元是最大单一驱动)
第一步:判断趋势结构(决定能不能做)
多周期确认(自上而下):
日线趋势 → 4H 结构 → 1H 入场点趋势定义(最客观的标准):
- 上升趋势 = higher highs + higher lows(至少 2 组)
- 下降趋势 = lower highs + lower lows(至少 2 组)
- 震荡 = 无明显高/低点序列,价格在区间内
关键问题:最近一个结构摆点是 higher low 还是 lower high?
- 如果最近是 higher low → 上升结构未破坏 → 只考虑做多
- 如果最近是 lower high → 下降结构未破坏 → 只考虑做空
- 如果结构模糊 → 观望
第二步:判断主导力量(央行/利率/美元方向)
这是外汇八维中第 3 维最重要的维度。按货币对优先级不同:
| 货币对 | 第一驱动 | 第二驱动 | 第三驱动 |
|---|---|---|---|
| EURUSD | Fed vs ECB 路径差 | DXY | 美德利差 |
| USDJPY | 美债收益率 | BOJ 政策 / 干预风险 | 风险偏好 |
| GBPUSD | 英国通胀 / BOE 路径 | 美元方向 | 脱欧/政治风险 |
| AUDUSD | 中国 + 全球风险偏好 | 大宗商品 | 美元 / RBA |
| USDCNH | 中美利差 | PBOC 管理 | 风险事件 |
| DXY | Fed 路径 | 全球风险偏好 | 对手货币(EUR为主) |
主导力量判断矩阵:
| 条件 | 信号 | 操作 |
|---|---|---|
| DXY ↗ + 10Y ↗ + Fed 鹰派 | 🟢 美元走强 | USDXXX 做多 / XXXUSD 做空 |
| DXY ↘ + 10Y ↘ + Fed 鸽派 | 🔴 美元走弱 | USDXXX 做空 / XXXUSD 做多 |
| DXY ↗ + VIX ↗ | 🟡 避险 + 美元强 | USDJPY 承压(日元更强),AUDUSD 承压 |
| DXY ↘ + VIX ↘ | 🟢 risk-on | AUDUSD/GBPUSD 走强 |
| 央行路径分歧大 | 🟡 | 按利差方向 + 结构确认 |
第三步:量价验证(决定时机对不对)
- 外汇无集中成交量,Yahoo Finance 成交量仅作弱参考
- 主要看价格行为:突破是否坚决、回踩是否缩量(参考 tick volume 或跳动量)
- 关键 K 线形态:长上影/下影、吞没、pin bar、inside bar
- 若在关键央行事件前后,量价验证权重降低,宏观因子权重提高
第四步:精算止盈止损位
做多场景:
SL = 最近结构低点 × (1 - 0.25%) ← 必须是独立的4H/1H摆低点
TP1 = 最近的结构阻力 ← 前高、趋势线上轨、形态颈线
TP2 = 下一级结构阻力 ← 更远的独立结构峰
TP3 = 形态理论目标 ← 旗杆高度投影、斐波那契延伸做空场景:
SL = 最近结构高点 × (1 + 0.25%)
TP1 = 最近的结构支撑
TP2 = 下一级结构支撑
TP3 = 形态理论目标移动止损:
- 到 TP1 → 移损至开仓价
- 到 TP2 → 移损至 TP1
- 创新高/低 → 跟踪最近 2 根 4H K 线的结构摆点
仓位计算:
仓位 = risk_amount / |entry - SL|
以 $10,000 账户 2% 风险为例:$200 / |entry - SL| = 可开仓位四、数据采集(按顺序执行以下数据块)
⚠️ 强制规则:一键脚本采集(禁止手动 curl Yahoo)
# 一键采集(内置429重试+并行)
python3 /root/.hermes/skills/research/forex-market-analysis/scripts/forex_fetch.py EURUSD --compact
# 替换为: EURUSD / USDJPY / GBPUSD / AUDUSD / USDCHF / USDCNH / DXY宏观数据(TNX/DXY/VIX)通过 fetch 脚本获取,禁止调 mcp_yfinance。
**❌ 绝对禁止直接 curl Yahoo Finance API。下面的代码块仅作参考文档,不要复制执行。**
### 块 0:执行前检查 ⚠️ 必做
> 先确认分析时间和货币对。标的都没对齐,后面的数据越多越危险。
```bash
# 记录分析时间(报告中必须回填)
date -u '+分析时间(UTC): %Y-%m-%d %H:%M'
# 解析并确认货币对
echo "确认货币对: 用户输入 → 标准化为 [EURUSD / USDJPY / GBPUSD / AUDUSD / USDCHF / USDCNH / DXY]"执行规则:
- 如果货币对不在支持列表中,停止分析并要求确认
- 日内结构优先使用 Yahoo Finance 1H 真实 OHLC;聚合采样价格只可用于宏观轮廓,不可直接拿来卡精确止损
- 一次分析尽量复用同一批响应,避免 Yahoo Finance 频率限制
- 如果当前价格已经贴近最近主阻力/主支撑,导致首个止盈空间过小、盈亏比低于 1.5,则不追价,等待回踩/反抽或直接观望
- 重大宏观数据公布前 30 分钟内,自动降级为观望
块 1:实时报价 + 30日历史(Yahoo Finance)
外汇对使用 Yahoo Finance 的 FX 代码。注意:EURUSD →
EURUSD=X,USDJPY →JPY=X,GBPUSD →GBPUSD=X,AUDUSD →AUDUSD=X,USDCNH →CNH=X,DXY →DX-Y.NYB。
# === 实时报价(最新价格 + 变动)===
# 替换 PAIR=X 为实际货币对代码
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/PAIR=X?interval=1d&range=5d" | python3 -c "
import json, sys
from datetime import datetime, timezone
d = json.load(sys.stdin)['chart']['result'][0]
meta = d['meta']
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
print('=== 实时报价 ===')
prev = meta.get('chartPreviousClose', 0)
cur = meta.get('regularMarketPrice', 0)
chg = (cur - prev) / prev * 100 if prev else 0
print(f'当前价: {cur:.5f}')
print(f'前收盘: {prev:.5f}')
print(f'变动: {chg:+.3f}%')
print(f'交易所: {meta.get(\"exchangeName\", \"?\")}')
print(f'货币: {meta.get(\"currency\", \"?\")}')
print()
print('=== 近5日收盘 ===')
for i in range(len(idx)):
dt = datetime.fromtimestamp(idx[i], tz=timezone.utc).strftime('%m-%d')
o = quotes['open'][i]
c = quotes['close'][i]
h = quotes['high'][i]
l = quotes['low'][i]
chg_d = (c - o) / o * 100 if o else 0
emoji = '🟢' if chg_d >= 0 else '🔴'
print(f'{dt} {emoji} O:{o:.5f} H:{h:.5f} L:{l:.5f} C:{c:.5f} 涨跌:{chg_d:+.3f}%')
"
# === 30日历史(日线,用于轮廓判断)===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/PAIR=X?interval=1d&range=1mo" | python3 -c "
import json, sys
from datetime import datetime, timezone
d = json.load(sys.stdin)['chart']['result'][0]
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
print('=== 30日价格走势 ===')
closes = []
for i in range(len(idx)):
dt = datetime.fromtimestamp(idx[i], tz=timezone.utc).strftime('%m-%d')
o = quotes['open'][i]
h = quotes['high'][i]
l = quotes['low'][i]
c = quotes['close'][i]
closes.append(c)
v = quotes['volume'][i] if quotes.get('volume') and i < len(quotes['volume']) else 0
chg = (c - o) / o * 100 if o else 0
emoji = '🟢' if chg >= 0 else '🔴'
print(f'{dt} {emoji} O:{o:.5f} H:{h:.5f} L:{l:.5f} C:{c:.5f} vol:{v:,.0f}')
if len(closes) >= 2:
chg_30 = (closes[-1] / closes[0] - 1) * 100 if closes[0] else 0
hi_30 = max(closes)
lo_30 = min(closes)
print(f'30日涨跌: {chg_30:+.3f}% | 区间高: {hi_30:.5f} | 区间低: {lo_30:.5f}')
"块 1.2:30日 4H 轨迹复盘 ⚠️ 必做
不要只看当前一屏数据。先复盘这个货币对近
30D 4H的主轨迹,再决定今天看到的是延续、洗盘还是陷阱。
Yahoo Finance 没有原生 4H,需要用 1H 数据聚合。
# === 30日 4H 轨迹复盘(从 1H 聚合) ===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/PAIR=X?interval=1h&range=1mo" | python3 -c "
import json, sys
from datetime import datetime, timezone
d = json.load(sys.stdin)['chart']['result'][0]
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
# 聚合 1H 到 4H
rows = []
for i in range(len(idx)):
o = quotes['open'][i]
h = quotes['high'][i]
l = quotes['low'][i]
c = quotes['close'][i]
v = quotes['volume'][i] if quotes.get('volume') and i < len(quotes['volume']) else 0
if o is not None and h is not None and l is not None and c is not None:
rows.append({'t': idx[i], 'o': o, 'h': h, 'l': l, 'c': c, 'v': v})
agg = []
for i in range(0, len(rows) - 3, 4):
chunk = rows[i:i+4]
agg.append({
't': chunk[0]['t'],
'o': chunk[0]['o'],
'h': max(x['h'] for x in chunk),
'l': min(x['l'] for x in chunk),
'c': chunk[-1]['c'],
})
print('=== 🧭 30日 4H 轨迹复盘(从1H聚合)===')
if not agg:
print('数据不足')
sys.exit(0)
hi = max(agg, key=lambda r: r['h'])
lo = min(agg, key=lambda r: r['l'])
print(f'区间低点: {lo[\"l\"]:.5f} @ {datetime.fromtimestamp(lo[\"t\"], tz=timezone.utc).strftime(\"%m-%d %H:%M\")}')
print(f'区间高点: {hi[\"h\"]:.5f} @ {datetime.fromtimestamp(hi[\"t\"], tz=timezone.utc).strftime(\"%m-%d %H:%M\")}')
# 找摆高摆低
ph, pl = [], []
for i in range(2, len(agg)-2):
if agg[i]['h'] > agg[i-1]['h'] and agg[i]['h'] > agg[i-2]['h'] and agg[i]['h'] > agg[i+1]['h'] and agg[i]['h'] > agg[i+2]['h']:
ph.append(agg[i])
if agg[i]['l'] < agg[i-1]['l'] and agg[i]['l'] < agg[i-2]['l'] and agg[i]['l'] < agg[i+1]['l'] and agg[i]['l'] < agg[i+2]['l']:
pl.append(agg[i])
print('最近摆高:')
for r in ph[-4:]:
print(f' {datetime.fromtimestamp(r[\"t\"], tz=timezone.utc).strftime(\"%m-%d %H:%M\")} {r[\"h\"]:.5f}')
print('最近摆低:')
for r in pl[-4:]:
print(f' {datetime.fromtimestamp(r[\"t\"], tz=timezone.utc).strftime(\"%m-%d %H:%M\")} {r[\"l\"]:.5f}')
# 大波动K线
events = []
for r in agg:
body = (r['c'] - r['o']) / r['o'] * 100 if r['o'] else 0
rng = (r['h'] - r['l']) / r['o'] * 100 if r['o'] else 0
if abs(body) >= 0.5 or rng >= 0.8:
events.append((abs(body), body, rng, r))
print('大波动K线(帮助识别急拉/急砸/洗盘):')
for _, body, rng, r in sorted(events, reverse=True)[:6]:
dt = datetime.fromtimestamp(r['t'], tz=timezone.utc).strftime('%m-%d %H:%M')
print(f' {dt} body:{body:+.3f}% range:{rng:.3f}% O:{r[\"o\"]:.5f} C:{r[\"c\"]:.5f}')
"
# === 90日 日线轮廓(大环境)===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/PAIR=X?interval=1d&range=3mo" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
closes = [quotes['close'][i] for i in range(len(idx)) if quotes['close'][i] is not None]
if len(closes) < 20:
print('=== 🗺️ 90日 日线轮廓 === 数据不足')
else:
chg_90 = (closes[-1] / closes[0] - 1) * 100
chg_20 = (closes[-1] / closes[-20] - 1) * 100 if len(closes) >= 20 else 0
chg_7 = (closes[-1] / closes[-7] - 1) * 100 if len(closes) >= 7 else 0
print('=== 🗺️ 90日 日线轮廓 ===')
print(f'90日涨跌: {chg_90:+.3f}%')
print(f'20日涨跌: {chg_20:+.3f}%')
print(f'7日涨跌: {chg_7:+.3f}%')
print(f'90日高: {max(closes):.5f} | 90日低: {min(closes):.5f}')
"复盘后必须输出:
- 最近
30D 4H主导手法是什么 - 最近
2-3次关键动作是什么(急拉、急跌、假突破、回收、派发) - 今天看到的信号属于
延续 / 回踩 / 诱多 / 诱空 / 纯噪音
块 1.5:4H/1H 真实蜡烛 ⚠️ 日内交易者必看
日内交易要看真实 OHLC。Yahoo Finance 1H 数据直接提供 OHLC,不需聚合即可用于 1H 结构判断。4H 从 1H 聚合。
# === 1H K线(精确日内级别,Yahoo Finance) ===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/PAIR=X?interval=1h&range=5d" | python3 -c "
import json, sys
from datetime import datetime, timezone
d = json.load(sys.stdin)['chart']['result'][0]
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
print('=== 📊 1H K线(近5日,最近24根)===')
count = 0
for i in range(len(idx)):
o = quotes['open'][i]
h = quotes['high'][i]
l = quotes['low'][i]
c = quotes['close'][i]
if o is None or h is None or l is None or c is None:
continue
count += 1
rows_total = count
shown = 0
for i in range(max(0, len(idx) - 24), len(idx)):
o = quotes['open'][i]
h = quotes['high'][i]
l = quotes['low'][i]
c = quotes['close'][i]
if o is None or h is None or l is None or c is None:
continue
dt = datetime.fromtimestamp(idx[i], tz=timezone.utc).strftime('%m-%d %H:%M')
color = '🟢' if c >= o else '🔴'
body_pct = abs(c - o) / o * 100 if o else 0
wick_up = (h - max(o, c)) / o * 100 if o else 0
wick_down = (min(o, c) - l) / o * 100 if o else 0
print(f'{dt} {color} O:{o:.5f} H:{h:.5f} L:{l:.5f} C:{c:.5f} | 实体:{body_pct:.3f}% 上影:{wick_up:.3f}% 下影:{wick_down:.3f}%')
shown += 1
print(f'显示 {shown}/{rows_total} 根K线')
"
# === 4H K线(从1H聚合,用于趋势+形态识别) ===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/PAIR=X?interval=1h&range=10d" | python3 -c "
import json, sys
from datetime import datetime, timezone
d = json.load(sys.stdin)['chart']['result'][0]
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
rows = []
for i in range(len(idx)):
o = quotes['open'][i]
h = quotes['high'][i]
l = quotes['low'][i]
c = quotes['close'][i]
if o is not None and h is not None and l is not None and c is not None:
rows.append({'t': idx[i], 'o': o, 'h': h, 'l': l, 'c': c})
agg = []
for i in range(0, len(rows) - 3, 4):
chunk = rows[i:i+4]
agg.append({
't': chunk[0]['t'],
'o': chunk[0]['o'],
'h': max(x['h'] for x in chunk),
'l': min(x['l'] for x in chunk),
'c': chunk[-1]['c'],
})
print('=== 📊 4H K线(从1H聚合,近10日,最近20根)===')
for r in agg[-20:]:
dt = datetime.fromtimestamp(r['t'], tz=timezone.utc).strftime('%m-%d %H:%M')
color = '🟢' if r['c'] >= r['o'] else '🔴'
body_pct = abs(r['c'] - r['o']) / r['o'] * 100 if r['o'] else 0
wick_up = (r['h'] - max(r['o'], r['c'])) / r['o'] * 100 if r['o'] else 0
wick_down = (min(r['o'], r['c']) - r['l']) / r['o'] * 100 if r['o'] else 0
print(f'{dt} {color} O:{r[\"o\"]:.5f} H:{r[\"h\"]:.5f} L:{r[\"l\"]:.5f} C:{r[\"c\"]:.5f} | 实体:{body_pct:.3f}% 上影:{wick_up:.3f}% 下影:{wick_down:.3f}%')
"块 2:市场结构(DXY、收益率、利差)⚠️ 必查
DXY 是美元对一篮子货币的加权指数,是所有 USD 货币对的背景板。
^TNX(10Y)和^FVX(5Y)反映美债收益率。
# === DXY 美元指数(近5日 + 实时) ===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/DX-Y.NYB?interval=1d&range=5d" | python3 -c "
import json, sys
from datetime import datetime, timezone
d = json.load(sys.stdin)['chart']['result'][0]
meta = d['meta']
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
prev = meta.get('chartPreviousClose', 0)
cur = meta.get('regularMarketPrice', 0)
print('=== 💵 DXY 美元指数 ===')
print(f'当前: {cur:.3f} | 前收: {prev:.3f} | 变动: {(cur-prev)/prev*100:+.3f}%' if prev else f'当前: {cur:.3f}')
if cur > 105:
print('状态: 🟢 美元强势 (>105)')
elif cur > 100:
print('状态: 🟡 美元中性 (100-105)')
else:
print('状态: 🔴 美元弱势 (<100)')
print()
print('近5日:')
for i in range(len(idx)):
dt = datetime.fromtimestamp(idx[i], tz=timezone.utc).strftime('%m-%d')
o = quotes['open'][i]
c = quotes['close'][i]
chg = (c-o)/o*100 if o else 0
emoji = '🟢' if chg>=0 else '🔴'
print(f'{dt} {emoji} O:{o:.3f} C:{c:.3f} {chg:+.3f}%')
"
# === 10Y 美债收益率 (^TNX) ===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/%5ETNX?interval=1d&range=5d" | python3 -c "
import json, sys
from datetime import datetime, timezone
d = json.load(sys.stdin)['chart']['result'][0]
meta = d['meta']
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
prev = meta.get('chartPreviousClose', 0)
cur = meta.get('regularMarketPrice', 0)
print('=== 📈 10Y 美债收益率 (^TNX) ===')
print(f'当前: {cur:.3f}% | 前收: {prev:.3f}% | 变动: {cur-prev:+.3f} bp' if prev else f'当前: {cur:.3f}%')
if cur > 4.5:
print('状态: 🟢 高收益率 → 美元吸引力强')
elif cur > 3.5:
print('状态: 🟡 中等收益率')
else:
print('状态: 🔴 低收益率 → 美元吸引力弱')
print()
print('近5日:')
for i in range(len(idx)):
dt = datetime.fromtimestamp(idx[i], tz=timezone.utc).strftime('%m-%d')
o = quotes['open'][i]
c = quotes['close'][i]
chg = c - o if o else 0
emoji = '🟢' if chg>=0 else '🔴'
print(f'{dt} {emoji} O:{o:.3f}% C:{c:.3f}% {chg:+.3f}bp')
"
# === 5Y 美债收益率 (^FVX) ===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/%5EFVX?interval=1d&range=5d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
meta = d['meta']
prev = meta.get('chartPreviousClose', 0)
cur = meta.get('regularMarketPrice', 0)
print('=== 📈 5Y 美债收益率 (^FVX) ===')
print(f'当前: {cur:.3f}% | 前收: {prev:.3f}% | 变动: {cur-prev:+.3f} bp' if prev else f'当前: {cur:.3f}%')
# 2s10s 利差判断(简化:10Y - 5Y 近似)
spread = cur - prev if prev else 0
if cur < 3.5:
print('状态: 利率预期偏鸽')
elif cur > 4.5:
print('状态: 利率预期偏鹰')
"
# === 利差概览(10Y - 2Y 代理 = ^TNX - ^FVX 作为弱近似) ===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/%5ETNX?interval=1d&range=2d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
meta = d['meta']
tnx = meta.get('regularMarketPrice', 0)
" && curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/%5EFVX?interval=1d&range=2d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
meta = d['meta']
fvx = meta.get('regularMarketPrice', 0)
print(f'当前 10Y (^TNX): -- (需要结合上一条) / 5Y (^FVX): {fvx:.3f}%')
" 2>/dev/null || true
echo "注:10Y-2Y 利差精确值需 ^IRX (13W) + ^FVX (5Y) + ^TNX (10Y) 组合计算,此处仅拉取 TNX 和 FVX 作为方向性参考"块 3:交叉验证(相关货币对 + 黄金 + 原油)⚠️ 必查
单一货币对可能被操纵或受本地事件干扰。必须用相关资产交叉验证。
# === 交叉盘验证:EURUSD 查看 GBPUSD、USDCHF;USDJPY 查看 EURJPY 等 ===
# 以下拉取主要关联品种,根据分析标的选取 2-3 个
# 欧元交叉验证(EURUSD 场景)
echo "=== 🔍 交叉验证:欧元区 ==="
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/GBPUSD=X?interval=1d&range=2d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
m = d['meta']
print(f'GBPUSD: {m.get(\"regularMarketPrice\",\"?\"):.5f} (前收:{m.get(\"chartPreviousClose\",0):.5f})')
"
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/CHF=X?interval=1d&range=2d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
m = d['meta']
print(f'USDCHF: {m.get(\"regularMarketPrice\",\"?\"):.5f} (前收:{m.get(\"chartPreviousClose\",0):.5f})')
"
# 日元交叉验证(USDJPY 场景)
echo "=== 🔍 交叉验证:日元区 ==="
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/EURJPY=X?interval=1d&range=2d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
m = d['meta']
print(f'EURJPY: {m.get(\"regularMarketPrice\",\"?\"):.3f}')
"
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/GBPJPY=X?interval=1d&range=2d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
m = d['meta']
print(f'GBPJPY: {m.get(\"regularMarketPrice\",\"?\"):.3f}')
"
# 商品货币交叉验证(AUDUSD 场景)
echo "=== 🔍 交叉验证:商品货币区 ==="
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/NZDUSD=X?interval=1d&range=2d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
m = d['meta']
print(f'NZDUSD: {m.get(\"regularMarketPrice\",\"?\"):.5f}')
"
# 美元兑人民币(USDCNH 场景)
echo "=== 🔍 交叉验证:人民币区 ==="
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/USDCNY=X?interval=1d&range=2d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
m = d['meta']
print(f'USDCNY (在岸): {m.get(\"regularMarketPrice\",\"?\"):.5f}')
"
# === 黄金(避险代理)===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/GC=F?interval=1d&range=5d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
m = d['meta']
prev = m.get('chartPreviousClose', 0)
cur = m.get('regularMarketPrice', 0)
print('=== 🥇 黄金期货 (GC=F) ===')
print(f'当前: \${cur:,.1f} | 前收: \${prev:,.1f} | 变动: {(cur-prev)/prev*100:+.2f}%' if prev else f'当前: \${cur:,.1f}')
if cur > prev * 1.01:
print('黄金走强 → 避险需求上升 / 美元预期走弱')
elif cur < prev * 0.99:
print('黄金走弱 → risk-on / 美元预期走强')
"
# === 原油(通胀/风险代理)===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/CL=F?interval=1d&range=5d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
m = d['meta']
prev = m.get('chartPreviousClose', 0)
cur = m.get('regularMarketPrice', 0)
print('=== 🛢️ 原油期货 (CL=F) ===')
print(f'当前: \${cur:,.1f} | 前收: \${prev:,.1f} | 变动: {(cur-prev)/prev*100:+.2f}%' if prev else f'当前: \${cur:,.1f}')
"块 4:情绪面(VIX + Fear & Greed)
# === VIX 恐慌指数(外汇核心情绪指标)===
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/%5EVIX?interval=1d&range=5d" | python3 -c "
import json, sys
from datetime import datetime, timezone
d = json.load(sys.stdin)['chart']['result'][0]
meta = d['meta']
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
prev = meta.get('chartPreviousClose', 0)
cur = meta.get('regularMarketPrice', 0)
print('=== 😨 VIX 恐慌指数 ===')
print(f'当前: {cur:.1f} | 前日: {prev:.1f} | 变化: {(cur-prev)/prev*100:+.1f}%' if prev else f'当前: {cur:.1f}')
if cur < 15:
print('状态: 🟢 安逸 → risk-on → 利好 AUD/NZD,利空 JPY/CHF')
elif cur < 20:
print('状态: 🟡 正常 → 中性')
elif cur < 30:
print('状态: 🟠 担忧 → risk-off → 利好 JPY/CHF,利空 AUD/NZD')
else:
print('状态: 🔴 恐慌 → 避险模式 → JPY/CHF 走强,套利货币暴跌')
print()
print('近5日 VIX:')
for i in range(len(idx)):
dt = datetime.fromtimestamp(idx[i], tz=timezone.utc).strftime('%m-%d')
c = quotes['close'][i]
if c is not None:
emoji = '🟢' if c < 15 else '🟡' if c < 20 else '🟠' if c < 30 else '🔴'
print(f'{dt} {emoji} {c:.1f}')
"
# === Fear & Greed 指数(Alternative.me,弱参考)===
curl -s "https://api.alternative.me/fng/?limit=3" | python3 -c "
import json, sys
data = json.load(sys.stdin)['data']
print('=== 😱 Fear & Greed(弱参考)===')
for d in data:
val = int(d['value'])
cls = d['value_classification']
bar = '█' * (val // 5) + '░' * (20 - val // 5)
print(f'{d[\"timestamp\"]}: {val:3d} [{bar}] {cls}')
print('注:外汇市场 Fear & Greed 仅作弱参考,主要看 VIX')
"块 5:宏观基本面(央行日历 + 经济数据 + 新闻)⚠️ 必查
外汇的命脉在央行。宏观块是外汇分析中权重最高的数据源之一。
# === Google News RSS:货币对相关硬新闻 ===
# 替换 CURRENCY_PAIR_QUERY 为实际搜索词
# EURUSD → "EURUSD+OR+ECB+OR+Fed+OR+euro+dollar"
# USDJPY → "USDJPY+OR+BOJ+OR+yen+OR+Japan+rate"
# GBPUSD → "GBPUSD+OR+BOE+OR+sterling+OR+UK+inflation"
# AUDUSD → "AUDUSD+OR+RBA+OR+Australian+dollar"
# USDCNH → "USDCNH+OR+PBOC+OR+yuan+OR+China+central+bank"
# DXY → "Dollar+Index+OR+DXY+OR+Federal+Reserve"
curl -s "https://news.google.com/rss/search?q=CURRENCY_PAIR_QUERY+when:1d&hl=en-US&gl=US&ceid=US:en" | python3 -c "
import sys, html, xml.etree.ElementTree as ET
root = ET.fromstring(sys.stdin.read())
items = root.findall('./channel/item')
print('=== 📰 货币对相关新闻(Google News RSS)===')
for i, item in enumerate(items[:5], 1):
title = html.unescape(item.findtext('title', '')).strip()
source = item.findtext('source', '').strip()
pub = item.findtext('pubDate', '').strip()
print(f'{i}. {title}')
print(f' {source} | {pub}')
"
# === Google News RSS:央行/宏观事件级 ===
curl -s "https://news.google.com/rss/search?q=central+bank+(Fed+OR+ECB+OR+BOJ+OR+BOE)+interest+rate+when:3d&hl=en-US&gl=US&ceid=US:en" | python3 -c "
import sys, html, xml.etree.ElementTree as ET
root = ET.fromstring(sys.stdin.read())
items = root.findall('./channel/item')
print()
print('=== 🏛️ 央行/利率宏观新闻(Google News RSS)===')
for i, item in enumerate(items[:5], 1):
title = html.unescape(item.findtext('title', '')).strip()
source = item.findtext('source', '').strip()
pub = item.findtext('pubDate', '').strip()
print(f'{i}. {title}')
print(f' {source} | {pub}')
"
# === 美联储相关新闻 ===
curl -s "https://news.google.com/rss/search?q=Federal+Reserve+(rate+OR+inflation+OR+employment+OR+GDP)+when:3d&hl=en-US&gl=US&ceid=US:en" | python3 -c "
import sys, html, xml.etree.ElementTree as ET
root = ET.fromstring(sys.stdin.read())
items = root.findall('./channel/item')
print()
print('=== 🏦 美联储相关宏观新闻 ===')
for i, item in enumerate(items[:4], 1):
title = html.unescape(item.findtext('title', '')).strip()
source = item.findtext('source', '').strip()
pub = item.findtext('pubDate', '').strip()
print(f'{i}. {title}')
print(f' {source} | {pub}')
"
# === 经济数据日历(通过 Google News 搜索)===
echo ""
echo "=== 📅 经济数据提醒 ==="
echo "本周关键数据:NFP(每月第一个周五)、CPI(月中)、FOMC(约每6周)、PMI(月初)"
echo "请核对当前日期判断是否处于数据窗口期"
date -u '+当前UTC: %Y-%m-%d %H:%M'块 5b:增强利率仪表盘 ⚠️ 新增(macro-rates-monitor 精简版)
外汇的核心驱动是利率路径。此块将块2(DXY+TNX+FVX)升级为完整的利率环境判断。
与块5并行拉取,不增加等待时间。
# 增强利率仪表盘(Yahoo Finance,4符号 + 延迟防429)
import json, urllib.request, time
SYMBOLS = {'^TNX':'10Y','^FVX':'5Y','DX-Y.NYB':'DXY','^VIX':'VIX'}
results = {}
for sym, label in SYMBOLS.items():
try:
url = f'https://query1.finance.yahoo.com/v8/finance/chart/{sym}?interval=1d&range=2d'
req = urllib.request.Request(url, headers={'User-Agent':'Mozilla/5.0'})
d = json.load(urllib.request.urlopen(req,timeout=10))['chart']['result'][0]
m = d['meta']
cur = m.get('regularMarketPrice',0); prev = m.get('chartPreviousClose',0)
chg = (cur-prev)/prev*100 if prev else 0
results[label] = {'cur':cur,'chg':chg}
print(f'{label}: {cur:.2f} ({chg:+.2f}%)')
time.sleep(0.5)
except Exception as e:
if '429' in str(e): print(f'{label}: 429 RATE LIMIT'); break
print(f'{label}: ERR')
tnx=results.get('10Y',{}).get('cur',0); fvx=results.get('5Y',{}).get('cur',0)
dxy=results.get('DXY',{}).get('cur',0); dxy_chg=results.get('DXY',{}).get('chg',0)
vix=results.get('VIX',{}).get('cur',0)
# 利率环境判断
spread = tnx - fvx
real_10y = tnx - 2.8
print(f'\n2s10s(proxy): {spread:+.0f}bp | Real10Y(est): {real_10y:.1f}%')
print(f'DXY: {dxy:.1f} ({dxy_chg:+.2f}%) | VIX: {vix:.1f}')
# 利率路径判断
if real_10y > 1.5: regime = 'RESTRICTIVE -> USD supportive, risk assets pressured'
elif real_10y > 0.5: regime = 'NEUTRAL'
else: regime = 'ACCOMMODATIVE -> USD weakening, risk assets benefit'
print(f'Rate Regime: {regime}')
# FOMC日历
print('FOMC: Jun 17-18, 2026 (next)')
print('RATE PATH: Fed at 4.25-4.50%, market pricing ~85% hold')块5b执行规则:
- 报告中输出 2 行:利率环境 + FOMC日历
- 利率路径判断优先级:real rate regime > 2s10s slope > absolute yield level
- 429 时标注「宏观数据暂缺」,使用上一交易日数据作参考
- FOMC 48h内 → 宏观权重 > 技术面
新闻块执行规则:
- 默认从 3 路 RSS 里提炼
2-4条真正影响交易判断的新闻,不要把整屏标题搬进最终报告 price today / current price / prediction / forecast / technical analysis / opinion / recap这类标题默认降权Fed / ECB / BOJ / BOE / rate decision / inflation / NFP / GDP / PMI / central bank / hike / cut这类带明确事件主体的标题优先保留- 同一事件若被多家媒体重复转载,只保留最接近原始事件的一条
- 如果没有筛出明确硬新闻,就写"新闻面无央行级强驱动,主要是价格播报/观点稿",不要硬凑事件
- 注意当前是否处于重大数据窗口期(NFP 周、FOMC 周、CPI 周)
五、严格输出模板(不可偏离)
## 🎯 [货币对标签,如 EUR/USD] 外汇交易决策
**分析时间(UTC)**:[YYYY-MM-DD HH:MM]
### 方向:🟢 做多 / 🔴 做空 / ⚪ 观望
**一句话理由**:[最核心的结构依据 + 利率/美元驱动,一句话说清楚]
**数据完整性**:[完整 / 缺少哪几块;若关键块缺失则只能观望]
**宏观时效性**:[外汇 24h 连续交易,央行/数据窗口前后 headline 权重高于图形]
**主导宏观因子**:[Fed / ECB / BOJ / DXY / 10Y 收益率 / VIX 避险]
### 历史轨迹复盘
- 最近 `30D 4H` 主导手法:[趋势推进 / 箱体洗盘 / 冲高派发 / 跌破回收 / 阴跌磨人]
- 最近关键动作:[列出 2-3 次关键轨迹动作 + 时间]
- 今天更像:[延续 / 回踩 / 诱多 / 诱空 / 纯噪音]
### 结构依据
- 最近结构摆点:[higher low / lower high,具体价位和形成时间]
- 当前形态:[楔形/旗形/双底/头肩/区间等]
- 量价状态:[放量/缩量 + 方向 → 健康/危险,或标注外汇无集中成交量]
### 📐 增强利率仪表盘
- 利率:10Y X.X% | 5Y X.X% | 实际利率 X.X%(限制性/中性/宽松)
- DXY:XX.X (日变 ±X.X%) | VIX:XX.X
- FOMC:下次 X月X日(N天后)| 事件窗口:[是/否]
### 主导力量立场
- DXY:[数值 + 方向 + 强弱判断]
- 10Y 收益率:[数值 + 方向 + 对货币对的影响]
- 央行路径:[Fed vs 对手央行的政策预期差]
- CFTC / 市场持仓:[如有数据,杠杆基金偏多/偏空]
- 本周高影响事件:[NFP Week / FOMC Week / CPI Week / 暂无]
### 八维判断
- 技术面:[多周期结构、关键位、形态]
- 利差与美元结构:[利差预期、DXY 方向、避险结构]
- 主导力量:[央行路径 + 收益率差 + 美元强弱]
- 情绪面:[VIX + risk-on/risk-off 判断]
- 宏观面:[央行窗口期、核心数据、事件驱动]
- 交叉验证:[DXY 一致/背离、相关货币对、黄金/原油]
- 仓位/CFTC:[杠杆基金/资产管理净头寸]
- 缠论结构:[CZSC 确认/冲突/不足 + 中枢/笔/背驰]
### 💰 止盈止损计划
| 项目 | 价位 | 结构依据 |
|------|------|---------|
| **入场** | X.XXXXX | [当前区间 + 结构位支撑/压力] |
| **🔴 SL** | X.XXXXX(-X.X%) | [**锚定的结构位名称 + 形成时间**] |
| 级别 | 平仓% | 触发价 | 盈利% | 结构依据 |
|------|-------|--------|-------|---------|
| 🔴 SL | 全部 | X.XXXXX | -X.X% | [结构位名称] |
| 🟡 TP1 | 30% | X.XXXXX | +X.X% | [结构位名称] |
| 🟠 TP2 | 30% | X.XXXXX | +X.X% | [结构位名称] |
| 🟢 TP3 | 40% | X.XXXXX | +X.X% | [结构位名称] |
### 移动止损
- 到 TP1 → 移损至开仓价
- 到 TP2 → 移损至 TP1
- 创新高/低 → 跟踪最近 2 根 4H K 线的结构摆点
### 仓位
- 风险金额 ÷ |入场价 - SL| = 可开仓位
- 以 $10,000 账户 2% 风险为例:**X.XX 标准手(或 X,XXX 单位)**
- 注意:若使用标准手(100k 单位),需换算
### 失效条件(不等止损,手动离场)
1. [客观条件 1,如:4H 收盘跌破 X.XXXXX 并未快速收回]
2. [客观条件 2,如:DXY 与收益率同时反向突破关键位]
3. [客观条件 3,如:央行/宏观消息显著改写利率或美元叙事,可选]
### 禁止事项
- ❌ 止损后立即反向开仓
- ❌ 浮盈加仓(除非趋势非常明确,且有新高/低确认)
- ❌ 在重大数据公布前 30 分钟开新仓
- ❌ 把货币强弱观点和交易对方向混为一谈
- ❌ 一天超过 3 笔交易
### 新闻观察
- [硬新闻 1 | 来源]
- [硬新闻 2 | 来源]
### 免责声明
以上分析基于公开数据,不构成投资建议。外汇交易存在重大风险。六、决策检查清单
- 已标注分析时间(UTC)与数据缺口
- 已确认货币对标准化(EURUSD / USDJPY 等)
- 已复盘最近
30D 4H主导手法 - 已说明今天更像延续、回踩还是陷阱
- 最近结构摆点是 higher low 还是 lower high?
- 引用的
4H/1H结构位是否都来自已收盘 K 线?未收盘 K 线只能写「临时高/低」,不得写成已确认摆点 - 如果写了「连续 lower highs / higher lows」,对应价位序列是否真的单调?
- DXY 方向与货币对方向是否一致?不一致是否已解释?
- 10Y 收益率方向是否支持当前判断?
- 央行路径差是否与交易方向一致?
- VIX 水平是否支持当前风险偏好假设?
- 当前价格是否已经贴近最近阻力/支撑,导致盈亏比不足 1.5?
- SL 锚定哪个结构位?什么时候形成的?
- TP1/TP2/TP3 各锚定哪个结构位?
- 入场价、SL、TP1/TP2/TP3 的盈利/亏损百分比、加权盈亏比、仓位示例是否已逐项复核算术一致?
- 失效条件是否客观可观察?
- 当前是否处于央行决议 / NFP / CPI 数据窗口期?如是,宏观权重大于技术面
- 当前是否周末?DXY 和美债收益率是否只是前收参考?
- 新闻是否是硬新闻,而不是评论稿/技术分析文章/标题党?
- 仓位在风控范围内(2%)?
- 已检查货币对专属逻辑(见第九节)
- 🆕 利率环境判断:real rate regime + 2s10s slope?
- 🆕 FOMC/CPI/NFP 事件窗口已标注?
七、常见错误(禁止清单)
| 错误 | 正确做法 |
|---|---|
| ❌ 用 24h 高/低点做 SL/TP | ✅ 用独立的结构摆点(前高/前低、趋势线、颈线) |
| ❌ 「跌 30 pips 止损」统一套用 | ✅ 止损锚定最近结构低点下方 0.15-0.25%,各货币对波动率不同 |
| ❌ 给两个方向让用户选 | ✅ 只给一个方向(做多/做空/观望) |
| ❌ 不确定时硬说一个方向 | ✅ 诚实输出「观望」并说明分歧在哪 |
| ❌ SL 太近被扫掉 | ✅ 留 0.15-0.25% 缓冲,放在结构位外侧 |
| ❌ TP 设得太远不切实际 | ✅ 每个 TP 都有明确的结构依据 |
| ❌ 把「美元走强」直接等同于做多 USDXXX | ✅ 先看对手货币的驱动:USDJPY 受美债收益率主导,AUDUSD 受风险偏好主导 |
| ❌ 忽略央行路径只看 K 线 | ✅ K 线 + 利率/美元方向 = 完整判断 |
| ❌ 所有货币对用同样的止损宽度 | ✅ GBPUSD 波动 > EURUSD,USDCNH 有管理波动,各自调整 |
| ❌ 用采样价格拼接假 K 线后精确卡止损 | ✅ 日内执行优先读取 Yahoo Finance 1H 真实 OHLC |
| ❌ 只看当前截面,不复盘最近 30 日轨迹 | ✅ 先判断这个货币对平时怎么走,再解释今天的波动 |
| ❌ 在重大数据公布前追单 | ✅ 数据前 30 分钟自动降级为观望 |
| ❌ 把周末 DXY 前收当实时盘中联动 | ✅ 明确标注休市,只把宏观块当背景过滤 |
| ❌ 在主要阻力前追多 / 主要支撑前追空 | ✅ 等回踩/反抽;盈亏比不够就观望 |
| ❌ 把评论稿/技术分析文章当成事件驱动 | ✅ 优先使用有明确时间、事件主体、来源的硬新闻 |
| ❌ 把未收盘 K 线写成已确认的 4H/1H 摆点或形态 | ✅ 未收盘只能写「临时高/低」 |
| ❌ 把不单调的价格序列写成「连续 lower highs / higher lows」 | ✅ 逐个核对摆点;序列不干净就改写 |
| ❌ 做 USDJPY 不看美债收益率 | ✅ USDJPY 第一驱动是美债收益率,第二才是 BOJ |
| ❌ 做 USDCNH 不看中美利差和政策管理 | ✅ 人民币有管理浮动,政策干预风险不可忽略 |
| ❌ TP%、SL%、加权 RR、仓位示例算数互相打架 | ✅ 发布前逐项复核百分比与仓位公式 |
八、货币对差异
| 维度 | EURUSD | USDJPY | GBPUSD | AUDUSD | USDCNH | DXY |
|---|---|---|---|---|---|---|
| 日均波动 | 中 (~0.5%) | 中高 (~0.7%) | 高 (~0.7%) | 中高 (~0.7%) | 低 (~0.3%) | 低 (~0.4%) |
| 第一驱动 | Fed vs ECB | 美债收益率 | BOE + 通胀 | 中国/风险偏好 | 中美利差 | Fed 路径 |
| 止损缓冲 | 0.15-0.20% | 0.20-0.25% | 0.20-0.30% | 0.20-0.25% | 0.10-0.15% | 0.10-0.15% |
| 结构周期 | 4H/日线为主 | 4H/日线为主 | 4H/1H 为主 | 4H/1H 为主 | 日线为主 | 日线为主 |
| 宏观事件敏感 | FOMC + ECB + NFP | FOMC + BOJ + NFP | BOE + UK CPI + FOMC | RBA + 中国数据 | PBOC + 中美事件 | FOMC + NFP + CPI |
| 操纵/干预风险 | 低 | 中(BOJ 干预) | 低 | 低 | 高(PBOC 管理) | 极低 |
| 交易风格 | 日内+波段 | 日内+波段 | 日内为主 | 日内+波段 | 波段为主 | 波段/宏观 |
| 避险属性 | 中性 | 日元避险 | 中性 | 风险货币 | 管理货币 | 避险+宏观 |
九、货币对专属逻辑
EURUSD
- 核心驱动:Fed 路径 vs ECB 路径的相对预期差
- 关键变量:美德利差(10Y Bund vs 10Y UST)、DXY、欧元区政治风险(如法德选举、意大利预算)
- 主导逻辑:Fed 鹰 + ECB 鸽 = EURUSD ↓;Fed 鸽 + ECB 鹰 = EURUSD ↑
- 需要关注的交叉盘:EURGBP、EURJPY、EURCHF
- 关键数据:欧元区 CPI、德国 IFO/ZEW、美国 NFP/CPI、FOMC + ECB 会议
- 特别注意:EURUSD 在 1.05-1.10 之间经常形成长期区间,突破需要强宏观驱动
USDJPY
- 核心驱动:美债 10Y 收益率(第一驱动),BOJ 政策与干预风险(第二驱动)
- 关键变量:10Y UST 收益率、美日利差、日本央行收益率曲线控制(YCC)政策
- 主导逻辑:10Y ↑ + BOJ 鸽 = USDJPY ↑;10Y ↓ + BOJ 鹰/干预 = USDJPY ↓
- 需要关注的交叉盘:EURJPY、GBPJPY、AUDJPY
- 关键数据:日本 CPI、BOJ 会议、日本 GDP、美国 NFP/CPI
- 特别注意:150 以上有 BOJ 口头/实际干预风险;140 以下市场关注 BOJ 是否转向
- 避险逻辑:全球 risk-off → JPY 走强 → USDJPY 下跌(即使美元也强,日元避险属性更强)
GBPUSD
- 核心驱动:英国通胀路径 + BOE 利率政策 vs Fed
- 关键变量:UK CPI、BOE 投票比、英国 GDP、脱欧后续/政治风险
- 主导逻辑:UK CPI 顽固 + BOE 鹰 = GBPUSD ↑;UK 衰退 + BOE 鸽 = GBPUSD ↓
- 需要关注的交叉盘:EURGBP(反映英镑相对欧元强弱)
- 关键数据:UK CPI、UK GDP、BOE 会议、UK 零售销售
- 特别注意:GBPUSD 波动率在主要货币对中最高,止损必须适当放宽
- 政治风险:英国政治变动(首相更迭、预算案)可引发单日 1%+ 波动
AUDUSD
- 核心驱动:中国需求 + 全球风险偏好 + 大宗商品
- 关键变量:铁矿石/铜价、中国 PMI/GDP、RBA 政策、全球股市
- 主导逻辑:中国刺激 + risk-on + 大宗涨 = AUDUSD ↑;中国疲软 + risk-off = AUDUSD ↓
- 需要关注的交叉盘:AUDJPY、AUDNZD、NZDUSD
- 关键数据:中国 PMI/GDP/贸易数据、澳洲就业/CPI、RBA 会议
- 特别注意:AUD 是典型的「风险货币」,VIX 升高时 AUDUSD 倾向下跌
- 套利:AUD 相对高息,在低波动环境下有套利资金流入;高波动时套利平仓
USDCNH
- 核心驱动:中美利差 + PBOC 管理意图
- 关键变量:USDCNY 中间价、CFETS 人民币指数、中美 10Y 利差
- 主导逻辑:中美利差扩大 + PBOC 容忍贬值 = USDCNH ↑;利差收窄 + PBOC 捍卫 = USDCNH ↓
- 需要关注的交叉盘:USDCNY(在岸)、EURCNH、JPYCNH
- 关键数据:PBOC LPR/MLF 操作、中国贸易数据/外汇储备、美国对华政策
- 特别注意:
- USDCNH 有管理浮动特征,单边趋势可能被 PBOC 干预打断
- CNH 中间价偏离前收超过 500 pips 时,关注政策信号
- 中美关系/关税事件可引发快速波动
- CNH 流动性在亚洲时段最好,纽约时段流动性下降
DXY(美元指数)
- 核心驱动:Fed 利率路径 + 全球风险偏好
- 关键变量:FOMC 点阵图、美国经济数据 vs 预期、全球避险需求
- 主导逻辑:Fed 鹰 + 美国经济强 = DXY ↑;Fed 鸽 + 美国经济弱 + 全球 risk-on = DXY ↓
- 关键成分权重:EUR 57.6%、JPY 13.6%、GBP 11.9%、CAD 9.1%、SEK 4.2%、CHF 3.6%
- 关键数据:FOMC、NFP、CPI、GDP、ISM PMI
- 特别注意:
- DXY 受 EUR 影响最大(近 58%),EURUSD 走势与 DXY 高度负相关
- 避险时期美元和日元同时走强,DXY 上升
- DXY 突破 105/107/110 整数关口往往触发趋势加速
- 分析 DXY 不适合做日内短线,更适合做宏观方向判断
十、数据采集可靠性(必读)
核心问题: 技能中 curl | python3 -c "..." 的数据块在 Hermes terminal() 执行时,f-string 内的特殊字符(引号 '"、花括号 {}、冒号 :、emoji)会被 shell 错误转义,导致约 40% 的数据块首次运行失败(SyntaxError: f-string: invalid syntax、unterminated string literal)。
可靠做法(按优先级):
- 首选:当环境支持
execute_code时,用 Python 原生urllib.request替代curl | python3 -c,彻底避开 shell 转义。示例:from hermes_tools import terminal r = terminal("""python3 -c " import json, urllib.request d = json.load(urllib.request.urlopen('https://query1.finance.yahoo.com/v8/finance/chart/EURUSD=X?interval=1d&range=5d')) print(d['chart']['result'][0]['meta']['regularMarketPrice']) " """) - 次选:如果必须用
curl | python3 -c,f-string 中避免使用 emoji、花括号格式化、嵌套引号。用+拼接或%格式化代替。 - 重试策略:数据块失败时,先降级为更简单的 Python(去掉格式化,只打原始值),不要反复用同一段会失败的代码重试。补拉时用独立
python3脚本而非 bash 管道。 - 并行执行:独立的数据块用多个并行
execute_code调用同时拉取,不要串行等待。
已知脆弱的块: 块 1.2(30D 4H 轨迹,f-string 含 %m-%d %H:%M)、块 1.5(4H/1H 蜡烛聚合)、块 5(Yahoo Finance 偶发 429/空响应)。这些块首次失败率高,优先用 Python 原生方案重试。
Yahoo Finance 特殊注意:
query1.finance.yahoo.com可能返回 429(频率限制)。解决:4 符号 + 0.5s 延迟;触发 429 时停止补抓,用上一交易日数据参考(频率限制),此时减少请求频率或加大间隔- 外汇对在周末可能返回
null或最后交易日的 stale 数据——这是正常的 regularMarketPrice在美股休市期间可能不是实时价,需要标注
十一、与 crypto-market-analysis 的主要差异
| 维度 | 加密货币 | 外汇 |
|---|---|---|
| 核心驱动 | 庄家合力(OI+费率) | 央行路径+利率差 |
| 技术面权重 | 40% | 30% |
| 宏观权重 | 15% | 35% |
| 情绪指标 | 恐惧贪婪指数 | VIX |
| 市场结构 | 链上数据 | DXY+利差 |
| 交叉验证 | 多交易所比价 | DXY+交叉盘+关联资产 |
| 庄家行为 | OI+多空比+费率 | CFTC 持仓(如有) |
| 数据源优先级 | CoinGecko/Binance | Yahoo Finance |
| 交易时间 | 24/7 | 24/5(周末休市) |
| 波动特征 | 极高 | 中低(相对) |
| 止损间距 | 0.2-0.3% | 0.15-0.30%(因货币对而异) |
附:快速参考卡片
货币对 → Yahoo Finance 代码
| 货币对 | Yahoo 代码 |
|---|---|
| EURUSD | EURUSD=X |
| USDJPY | JPY=X |
| GBPUSD | GBPUSD=X |
| AUDUSD | AUDUSD=X |
| NZDUSD | NZDUSD=X |
| USDCHF | CHF=X |
| USDCAD | CAD=X |
| USDCNH | CNH=X |
| DXY | DX-Y.NYB |
代理/关联资产 → Yahoo 代码
| 资产 | Yahoo 代码 |
|---|---|
| 10Y UST | ^TNX |
| 5Y UST | ^FVX |
| VIX | ^VIX |
| 黄金期货 | GC=F |
| 原油期货 | CL=F |
| 标普500 | ^GSPC |
| 纳斯达克 | ^IXIC |
| 道琼斯 | ^DJI |
仓位公式速算
$10,000 账户,2% 风险 = $200
仓位 = $200 / |entry - SL|
示例(EURUSD):
入场 1.08500,SL 1.08200(结构低点下方 0.2%)
风险 = 0.00300 = 30 pips
仓位 = 200 / 0.00300 = 66,667 单位 ≈ 0.67 标准手货币对专属止损参考(最小缓冲,仍需结构位调整)
| 货币对 | 最小缓冲 | 典型 pips |
|---|---|---|
| EURUSD | 0.15% | 15-18 |
| USDJPY | 0.20% | 25-35 |
| GBPUSD | 0.25% | 25-35 |
| AUDUSD | 0.20% | 12-18 |
| USDCNH | 0.12% | 80-120 |
| DXY | 0.10% | 10-12 |