# Futures Market Analysis

> 商品期货、贵金属、能源、股指期货八维分析：1-7维先形成主判断，第8维用CZSC缠论确认/冲突/不足；覆盖 CL/BZ/GC/SI/HG/NG/PL/PA/ES/NQ/YM/RTY，并识别 Binance TradFi 商品永续 CLUSDT/BZUSDT/XAUUSDT/XAGUSDT/COPPERUSDT/NATGASUSDT/XPTUSDT/XPDUSDT 的K线、资金费率、OI、多空比。

- **Type:** Skill
- **Install:** `agentstack add skill-lzh-xbccz-hermes-finance-futures-market-analysis`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Lzh-xbccz](https://agentstack.voostack.com/s/lzh-xbccz)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Lzh-xbccz](https://github.com/Lzh-xbccz)
- **Source:** https://github.com/Lzh-xbccz/hermes-finance/tree/main/skills/futures-market-analysis

## Install

```sh
agentstack add skill-lzh-xbccz-hermes-finance-futures-market-analysis
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 期货市场八维分析全流程

> ⛔ 铁律：你不是在写行情播报，你是在做证据审计。每个方向判断必须回答"为什么"，并先做反向审计。允许使用"证据不足"、"方向未确认"、"观望"；禁止在证据冲突时硬给做多/做空。

> **核心理念：期货价格由宏观驱动 + 供需基本面 + 市场结构共同决定。**
> 地缘政治和库存数据可在瞬间覆盖所有技术位。技术分析在期货中的权重远低于加密货币——不可颠倒。

---

> **⛔ 禁止调用 mcp_yfinance 系列工具**：Yahoo Finance 频繁 429。所有数据通过 `scripts/` 目录下的 fetch 脚本获取（内置延迟+重试）。模型不要额外调 `mcp_yfinance_get_historical_stock_prices` 等 MCP 工具。

## 一、铁律（不可违反）

### 1. 先判断是否有方向优势
- 输出只能是 🟢 做多 / 🔴 做空 / ⚪ 观望，但默认不是强行二选一。
- 方向由你基于各维度证据的逻辑强度和可靠性综合判断得出，不要用投票计数或权重打分决定方向；不能把 DXY/10Y/VIX/ETF 等同类代理拆成多票。
- 只要方向质量差、事件风险主导、关键证据缺失或多空证据接近，必须输出 ⚪ 观望。
- 可以给"触发条件"：例如"若 4H 收盘站回 X 且 OVX 回落，再从观望切到偏多"，但最终方向仍写观望。

### 2. 止盈止损必须锚定客观技术结构
- ✅ 允许参考的结构：前高/前低（独立摆点）、形态颈线、趋势线交点、斐波那契回撤位、密集成交区上沿/下沿、EMA21/EMA55
- ❌ **禁止**使用：24h 最高/最低点、今日开盘价、「跌 2% 就走」等固定百分比、任何以时间为边界而非结构为边界的价位
- 每一个 SL/TP 价位必须在报告中标注「结构依据」——具体说明这是哪个结构、什么时候形成的

### 3. 止损幅度由结构决定
- 做多止损：放在最近关键结构低点下方 0.2%-0.3%
- 做空止损：放在最近关键结构高点上方 0.2%-0.3%
- 期货跳空风险高于加密——止损可适当放宽 0.1%-0.2%（共 0.3%-0.5%），但仍必须锚定结构位
- 止损幅度不由百分比决定（但如果结构决定的幅度超过账户风控上限，需特别标注风险，建议减小仓位而非放宽止损）

### 4. 必须带失效条件
- 至少 2 个明确的「不等止损、立即手动平仓」的条件
- 失效条件必须是客观可观察的（K 线收盘、OVX/VIX 异动、关键新闻事件升级、关联市场破位等）

### 5. 数据缺口必须降级处理
- 报告开头必须标注**分析时间（UTC）**
- 若 Yahoo Finance 返回 429、4xx、空数据或结构变更，先减少请求并复用已拉取数据；仍失败则停止补抓，**绝不编造**
- 技术结构、波动率代理、交叉验证三项里只要缺 1 项，默认降级为 ⚪ 观望
- 新闻、库存等非关键块缺失时，可继续分析，但必须明确写出「数据缺口」
- 若处于周末或美国节假日，期货电子盘虽仍在交易但流动性极低，宏观块仅以最近收盘作背景参考
- COT 报告数据天然滞后 3 天，仅作中长期背景参考，**不得**用于日内决策

### 6. 先复盘轨迹，再谈方向
- 每做一个品种，必须先看它最近 `30D` 日线和 `4H` 轨迹是怎么走出来的，再看当前截面
- 必须回答：这个品种最近更像 `趋势推进 / 箱体洗盘 / 冲高派发 / 跌破回收 / 阴跌磨人` 里的哪一种
- 如果你连最近主导手法都说不清，就不能把当前波动解读为高置信度机会

### 7. 事件面前，技术面自动降权
- 一级事件（海峡关闭/全面战争）：技术面完全无效，强制 ⚪ 观望
- 二级事件（军事冲突升级/停火破裂）：技术面权重降至 10%，以事件方向为主
- 三级事件（停火谈判/库存数据/EIA/OPEC）：技术面权重降至 30%，等数据落地后确认
- 四级事件（常规供需/评论）：技术面保持正常权重

### 8. OVX 与价格背离 = 方向不可靠 ⚠️ CL 专属铁律

> 地缘危机中常见：价格暴跌后反弹 7-10%，但 OVX 纹丝不动。这种情况必须识破。

**经典陷阱：crash-and-bounce**
- 价格 3 小时跌 -12% → 随后反弹 +7%
- 但 OVX 仍停在 70+，完全未跟随回落
- **这不是利好驱动的趋势反转**——是空头回补 + 短线抄底的超卖修复
- **真正的趋势反转必须伴随 OVX 同步崩塌**（如 75→45 以下）
- 如果 OVX 不跌，恐慌未解除，不可据此做多

**OVX-价格背离速查：**
| 价格 | OVX | 真实含义 | 操作 |
|------|-----|---------|------|
| ↑ +7% | → 不动 | 🟡 超卖修复 | ⚪ 观望 |
| ↑ +7% | ↓ -20% | 🟢 恐慌消退 | 可考虑做多 |
| ↓ -10% | ↑ +15% | 🔴 恐慌加速 | 可考虑做空 |
| ↓ -10% | → 不动 | ⚪ 有序下跌 | 等 OVX 给出方向 |

### 10. 必须区分品种专属逻辑
- 不同品种的核心驱动完全不同：CL 看地缘和库存，GC 看实际利率和美元，股指看 Fed 和风险偏好
- 不能把原油的分析框架套到黄金上，也不能把股指的逻辑套到铜上
- 每个品种必须按「品种专属逻辑」一节中的优先级顺序排列驱动因素

### 11. 单交易所风险必须注明
- 期货主要在单一交易所（NYMEX/CME/COMEX）交易，没有多交易所交叉验证
- 必须在报告中标注「单交易所风险」，流动性异常时（如节假日前、重大事件前）降低仓位

---

## 二、八维分析框架

| # | 维度 | 期货对应项 | 核心关注 |
|---|------|-----------|---------|
| 1 | 📈 技术结构 | K线趋势、量价关系、支撑阻力、形态识别 | 90D/30D/24H 结构、摆点序列 |
| 2 | ⛓️ 可执行合约层 | Binance TradFi 永续 K线/OI/资金费率/多空比 | 交易层是否拥挤？可执行价格是否偏离指数？ |
| 3 | 🏛️ 传统期货结构 | 近月代理、CFTC、EIA、库存与基差背景 | 供需、套保、投机仓位是否支持方向？ |
| 4 | 🐋 主导力量 | OVX/VIX、ETF资金流、DXY、COT滞后参考 | 谁在定价？恐慌、供需还是宏观？ |
| 5 | 😱 情绪/波动率 | OVX/VIX、挤仓情绪、事件恐慌 | 波动率是否确认价格方向？ |
| 6 | 🌍 宏观与事件 | 地缘、利率、美元、EIA/OPEC/Fed | 地缘/库存/美元是否覆盖技术位？ |
| 7 | 🔍 交叉验证 | ETF、相关资产、美元、美债、现货代理 | 关联市场是否确认方向？ |
| 8 | 🧭 缠论结构 | CZSC 中枢、笔、背驰、买卖点候补 | 只做确认/冲突/不足，不能覆盖1-7维主判断 |

**强制输出规则**：
1. 先给 `各维度证据`，只基于第 1-7 维；逐项列出每个维度的偏多/偏空/中性/缺失状态及理由，不允许先看 CZSC 再倒推理由。不要用投票计数或权重打分决定方向。
2. 必须做 `反向审计`：先写出最强反方向证据；若反方向证据接近或关键驱动冲突，最终方向降级为观望。
3. 再给 `缠论确认`，说明 CZSC 是确认、冲突还是不足。
4. 最终方向由你基于各维度证据的逻辑强度综合判断后决定；第 8 维只能提高/降低置信度、细化入场止损或触发观望，不能用 CZSC score 覆盖 1-7 维。
5. 使用 `python3 -m hermes_finance analyze futures ` 或 MCP `analyze_futures`，默认会尽量用采集器 K 线跑 CZSC。

---

## 三、决策流程（从数据到方向）

### 第零步：确认标的 + 执行前检查 ⚠️ 必做

```text
1. 记录分析时间（UTC）
2. 确认标的符号（CL=F / BZ=F / GC=F / SI=F / HG=F / NG=F / PL=F / PA=F / ES=F / NQ=F / YM=F / RTY=F）
3. 确认合约月份假设（默认近月代理，特别标注）
4. 检查是否处于重大事件窗口（EIA 库存日、OPEC 会议、FOMC、非农等）
```

**执行规则：**
- 用户给精确合约月份时，按用户给定
- 用户只给简称时，用近月代理 `{SYM}=F`，但要写明假设
- 用户给 Binance TradFi 商品永续时，先映射到期货 root：`CLUSDT -> CL`、`BZUSDT -> BZ`、`XAUUSDT -> GC`、`XAGUSDT -> SI`、`COPPERUSDT -> HG`、`NATGASUSDT -> NG`、`XPTUSDT -> PL`、`XPDUSDT -> PA`
- Binance TradFi 商品永续可作为可执行 K 线/资金费率/OI/多空比层；传统近月代理、CFTC、EIA、OVX/DXY 仍作为供需、宏观和传统期货验证层
- 如果当前处于一级或二级事件窗口，先判断是否需要强制观望
- 若当前价格已经贴近最近主阻力/主支撑，导致首个止盈空间过小、盈亏比低于 1.5，则不追价，等待回踩/反抽或直接观望

### 第一步：复盘这个品种最近的操盘手法（决定值不值得做）

**三层复盘窗口：**
```text
90D 日线轮廓 → 看大环境
30D 4H 轨迹 → 看主导手法
24H 1H 节奏 → 看今天是在延续、回踩还是诱多/诱空
```

**常见操盘手法分类：**
- `趋势推进`：higher highs + higher lows，回调浅，放量突破后缩量整理
- `箱体洗盘`：长时间区间震荡，上下插针多，真假突破反复出现
- `冲高派发`：急拉后高位横盘，长上影增多，放量却不再创新高
- `跌破回收`：先破关键位触发恐慌，再快速收回区间内部
- `阴跌磨人`：lower highs 持续，反弹弱，量能难以跟上

**执行规则：**
- 今天的判断必须和最近 `30D 4H` 主导手法对照，说明当前是**延续**还是**反着来收割**
- 若今天的短线信号和最近主导手法明显冲突，优先怀疑是假突破/假跌破
- 期货尤其注意：周末或节假日后的跳空开盘经常是「假突破」，等第一根 1H K 线收盘确认

### 第二步：判断趋势结构（决定能不能做）

**多周期确认（自上而下）：**
```
日线趋势 → 4H 结构 → 1H 入场点
```

**趋势定义（最客观的标准）：**
- 上升趋势 = higher highs + higher lows（至少 2 组）
- 下降趋势 = lower highs + lower lows（至少 2 组）
- 震荡 = 无明显高/低点序列，价格在区间内

**关键问题**：最近一个结构摆点是 higher low 还是 lower high？
- 如果最近是 higher low → 上升结构未破坏 → 只考虑做多
- 如果最近是 lower high → 下降结构未破坏 → 只考虑做空
- 如果结构模糊 → 观望

### 第三步：判断主导力量（决定跟不跟）

**期货的主导力量判断逻辑（替代加密的 OI+费率）：**

| 主导力量信号 | 含义 | 操作 |
|-------------|------|------|
| OVX/VIX 下降 + 价格上升 | 恐慌消退 + 趋势健康 | 🟢 坚定做多 |
| OVX/VIX 上升 + 价格下降 | 恐慌定价 + 趋势加速 | 🔴 坚定做空 |
| OVX/VIX 上升 + 价格横盘 | 多空博弈加剧 | ⚠️ 观望，等突破确认 |
| ETF 资金净流入 + 价格上升 | 机构资金推动 | 🟢 趋势可信 |
| ETF 资金净流出 + 价格下降 | 机构资金撤离 | 🔴 趋势可信 |
| DXY 走强 + 商品价格走弱 | 美元压制（标准负相关） | 🔴 商品承压 |
| DXY 走弱 + 商品价格走强 | 美元支撑 | 🟢 商品受益 |

**COT 报告参考（仅中长期背景，不用于日内）：**
- 商业头寸（Commercials）通常正确
- 大型投机客（Large Specs）极度拥挤的方向 = 可能反转
- COT 数据天然滞后 3 天，**不得用于日内决策**

### 第四步：量价验证（决定时机对不对）

- 上涨放量 + 回调缩量 = 健康 → 可以进场
- 上涨缩量 + 下跌放量 = 危险 → 缓一缓
- 天量长上影/下影 = 反转预警 → 禁止进场
- 缩量至极（近 5 日均量的 50% 以下）= 变盘前兆 → 可进场但要快进快出

### 第五步：精算止盈止损位

**做多场景：**
```
SL  = 最近结构低点 × (1 - 0.5%)   ← 必须是独立的4H/1H摆低点（期货放宽至0.5%以应对跳空）
TP1 = 最近的结构阻力              ← 前高、趋势线上轨、形态颈线
TP2 = 下一级结构阻力              ← 更远的独立结构峰
TP3 = 形态理论目标                ← 旗杆高度投影、斐波那契延伸
```

**做空场景：**
```
SL  = 最近结构高点 × (1 + 0.5%)
TP1 = 最近的结构支撑
TP2 = 下一级结构支撑
TP3 = 形态理论目标
```

---

## 四、数据采集（按顺序执行以下数据块）

### ⚠️ 强制规则：一键脚本采集（禁止手动 curl Yahoo）

**唯一允许的数据采集方式：**

```bash
# 一键采集所有数据（内置429重试+并行+Yahoo串行限速）
python3 /root/.hermes/skills/research/futures-market-analysis/scripts/futures_fetch.py GC --compact
# 替换 GC 为: CL / BZ / GC / SI / HG / NG / PL / PA / ES / NQ / YM / RTY
# 也可直接传 Binance TradFi 商品永续: CLUSDT / BZUSDT / XAUUSDT / XAGUSDT / COPPERUSDT / NATGASUSDT / XPTUSDT / XPDUSDT
```

脚本输出完整 JSON，包含：daily_90d、hourly_10d、agg_4h_10d、proxies(DXY/VIX/ETF)、news、cftc；若 Binance TradFi 商品永续可用，还包含 `structured_drivers.binance_tradfi_perp` 的 1H/4H/1D K线、24h ticker、mark/index、资金费率、OI、OI历史、多空账户/仓位比。

**Binance TradFi 商品永续优先级**：
- `CL -> CLUSDT`
- `BZ -> BZUSDT`
- `GC -> XAUUSDT`
- `SI -> XAGUSDT`
- `HG -> COPPERUSDT`
- `NG -> NATGASUSDT`
- `PL -> XPTUSDT`
- `PA -> XPDUSDT`

这些 Binance 符号代表可交易的 USDT 永续层，优先用于可执行 K 线、资金费率、OI 和多空比；`CL=F` / `GC=F` 等传统近月代理、CFTC、EIA、OVX/DXY 用于传统期货、供需和宏观验证。不要把 `CLUSDT`、`XAUUSDT` 这类 TradFi 商品永续误路由到 crypto skill。

**⚠️ Yahoo 429 降级路径（2026-05-20 实测验证）**：

若 fetch 脚本返回 `"yahoo_chart": "error"` 且 `"errors": {"yahoo": "HTTP Error 429"}`：

1. **不要**手动 curl Yahoo（会被再限流）
2. **立即切换**到 Tavily 搜索补关键缺口：

```bash
# 并行搜索 — 价格 + DXY + VIX + 10Y 四个关键数据
# 使用 mcp_tavily_tavily_search，每条 query 独立调用
queries = [
    "gold price today COMEX GC=F per ounce 2026-05-20",     # 品种价格
    "DXY dollar index today May 20 2026",                    # 美元
    "VIX volatility index today May 20 2026",                # 恐慌
    "US 10 year treasury yield today May 20 2026 ^TNX",     # 利率
]
```

3. **Tavily 数据可用来源**（已验证）：
   - 价格：Stooq (stooq.com)、TradingEconomics、TEchi、Fortune
   - DXY：MarketWatch、TradingEconomics、Barchart
   - VIX：Investing.com (历史表)、CBOE 官方
   - 10Y：YCharts、Treasury.gov 官方数据、Investing.com

4. **GC 最后兜底 K 线补充方案**：当 GC=F 被 Yahoo 429 阻断且 `XAUUSDT` TradFi 永续不可用时，才通过 **PAXG/USDT（Binance spot）** 获取黄金技术结构代理：
   ```python
   # PAXG ≈ 1 troy oz gold，与 GC=F 偏差  当 Yahoo 429 导致 K 线数据缺失，且 `XAUUSDT` Binance TradFi 黄金永续不可用时，**PAXG/USDT（币安现货）** 才可作为黄金 COMEX 期货的技术结构代理。
> PAXG = Paxos Gold，1 token ≈ 1 盎司黄金，与 GC=F 偏差  先确认分析时间和标的。标的都没对齐，后面的数据越多越危险。

```bash
# 记录分析时间（报告中必须回填）
date -u '+分析时间(UTC): %Y-%m-%d %H:%M'

# 确认标的符号（把 CL 替换成你的标的）
echo "=== 标的确认 ==="
echo "标的: CL=F (WTI 原油近月合约)"
echo "合约假设: 近月代理，滚动规则下可能与实际持仓月份有差异"
echo "波动率代理: ^OVX"
echo "主力ETF代理: USO"

# 检查是否处于重大事件窗口
echo ""
echo "=== 事件窗口检查 ==="
echo "今天星期几: $(date -u '+%A')"
echo "检查: EIA 原油库存日(周三) / OPEC会议 / FOMC / 非农 / 合约到期日"
```

**执行规则：**
- 非 CL 标的需替换波动率代理（股指用 ^VIX，黄金/白银无专用波动率指数，用 VIX 替代参考）
- 若处于重大事件窗口前 2 小时内，标注「事件窗口期」，方向置信度至少降一档
- Yahoo Finance 请求头必须带 `User-Agent: Mozilla/5.0` 否则可能返回 429

### 块 1：实时行情 + 30日历史

```bash
# 30日价格走势（以 CL=F 为例，替换 SYMBOL 为你的标的）
SYMBOL="CL=F"
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/${SYMBOL}?interval=1d&range=30d" | 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(f'=== {meta.get(\"symbol\",\"?\")} 近30日价格 ===')
print(f'币种: {meta.get(\"currency\",\"USD\")} | 交易所: {meta.get(\"exchangeName\",\"?\")}')
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]
    v = quotes['volume'][i]
    if o and c:
        chg = (c-o)/o*100 if o else 0
        clr = '🟢' if chg>=0 else '🔴'
        print(f'{dt} {clr} O:{o:,.2f} H:{h:,.2f} L:{l:,.2f} C:{c:,.2f} | {chg:+.2f}% | vol:{v:,.0f}')
prev = meta.get('chartPreviousClose', 0)
cur = meta.get('regularMarketPrice', 0)
print(f'前收盘: {prev:,.2f} | 当前: {cur:,.2f} | 变动: {(cur-prev)/prev*100:+.2f}%' if prev else '实时价格获取中...')
"

# 实时行情快照
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/${SYMBOL}?interval=1d&range=1d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
meta = d['meta']
q = d['indicators']['quote'][0]
cur = meta.get('regularMarketPrice', 0)
prev = meta.get('chartPreviousClose', 0)
hi = meta.get('regularMarketDayHigh', cur)
lo = meta.get('regularMarketDayLow', cur)
vol = meta.get('regularMarketVolume', 0)
print(f'=== 实时行情快照 ===')
print(f'当前: {cur:,.2f}')
print(f'前收: {prev:,.2f}')
print(f'日内高: {hi:,.2f}')
print(f'日内低: {lo:,.2f}')
print(f'日内变动: {(cur-prev)/prev*100:+.2f}%' if prev else '')
print(f'成交量: {vol:,.0f}')
print(f'52周高: {meta.get(\"fiftyTwoWeekHigh\",\"?\"):,.2f}')
print(f'52周低: {meta.get(\"fiftyTwoWeekLow\",\"?\"):,.2f}')
"
```

**所有可分析标的符号表：**

| 品种 | Yahoo 代码 | Binance TradFi 永续 | 波动率代理 | ETF 代理 | 类别 |
|------|-----------|----------------------|-----------|---------|------|
| WTI 原油 | `CL=F` | `CLUSDT` | `^OVX` | `USO` | 能源 |
| Brent 原油 | `BZ=F` | `BZUSDT` | `^OVX` | `BNO` | 能源 |
| 黄金 | `GC=F` | `XAUUSDT` | `^VIX`（替代） | `GLD` | 贵金属 |
| 白银 | `SI=F` | `XAGUSDT` | `^VIX`（替代） | `SLV` | 贵金属 |
| 铜 | `HG=F` | `COPPERUSDT` | `^VIX`（替代） | `COPX` | 工业金属 |
| 天然气 | `NG=F` | `NATGASUSDT` | `^OVX`（部分参考） | `UNG` | 能源 |
| 铂金 | `PL=F` | `XPTUSDT` | `^VIX`（替代） | `PPLT` | 贵金属 |
| 钯金 | `PA=F` | `XPDUSDT` | `^VIX`（替代） | `PALL` | 贵金属 |
| 标普500 | `ES=F` | — | `^VIX` | `SPY` | 股指 |
| 纳斯达克100 | `NQ=F` | — | `^VIX` | `QQQ` | 股指 |
| 道琼斯 | `YM=F` | — | `^VIX` | `DIA` | 股指 |
| 罗素2000 | `RTY=F` | — | `^VIX` | `IWM` | 股指 |

### 块 1.2：历史轨迹复盘 — 30D 4H 聚合 ⚠️ 必做

> Yahoo Finance 不提供原生 4H K 线，从 1H 聚合。拉取 30 天 1H 数据，每 4 根聚合成一根 4H K 线。
>
> ⚠️ **已知截断问题**：`interval=1h&range=30d` 的 JSON 响应在 ~50KB 处经常截断（`Expecting ',' delimiter`），导致 4H 聚合失败。**可靠替代方案**：
> 1. 块 1.2 的「30D 4H 轨迹 + 大波动 K 线」改用 **30D 日线做摆点识别和波动扫描**（日线响应小，不截断）
> 2. 块 1.5 的「4H K 线」改用 **5d 1H 聚合 4H**（数据量可控，不截断），取最近 12 根 4H 即可覆盖 2 天短线结构
> 3. 两者互补：日线看轮廓 + 4H 看精度，不依赖单一截断源

```bash
# 30日 4H 轨迹复盘（1H 聚合 → 4H）
SYMBOL="CL=F"
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/${SYMBOL}?interval=1h&range=30d" | 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蜡烛
candles = []
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 o and c:
        candles.append({'t':idx[i],'o':o,'h':h,'l':l,'c':c,'v':(v or 0)})

# 聚合4H
agg_4h = []
for i in range(0, len(candles)-3, 4):
    chunk = candles[i:i+4]
    if chunk:
        agg_4h.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'],
            'v': sum(x['v'] for x in chunk)
        })

print('=== 🧭 30日 4H 轨迹复盘（聚合）===')
if agg_4h:
    hi = max(agg_4h, key=lambda r: r['h'])
    lo = min(agg_4h, key=lambda r: r['l'])
    n = len(agg_4h)
    print(f'K线数: {n} 根 4H')
    print(f'区间低点: {lo[\"l\"]:,.2f} @ {datetime.fromtimestamp(lo[\"t\"], tz=timezone.utc).strftime(\"%m-%d %H:%M\")}')
    print(f'区间高点: {hi[\"h\"]:,.2f} @ {datetime.fromtimestamp(hi[\"t\"], tz=timezone.utc).strftime(\"%m-%d %H:%M\")}')
    print(f'区间涨跌: {(agg_4h[-1][\"c\"]/agg_4h[0][\"o\"]-1)*100:+.1f}%')

    # 识别摆点
    ph, pl = [], []
    for i in range(2, len(agg_4h)-2):
        if agg_4h[i]['h'] > agg_4h[i-1]['h'] and agg_4h[i]['h'] > agg_4h[i-2]['h'] and agg_4h[i]['h'] > agg_4h[i+1]['h'] and agg_4h[i]['h'] > agg_4h[i+2]['h']:
            ph.append(agg_4h[i])
        if agg_4h[i]['l'] = 1.5 or rng >= 2.5:
            events.append((abs(body), body, rng, r))
    print(f'大波动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:+.2f}% range:{rng:.2f}% O:{r[\"o\"]:,.2f} C:{r[\"c\"]:,.2f}')
else:
    print('数据不足，无法聚合4H')
"

# 90日 日线轮廓（大环境）
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/${SYMBOL}?interval=1d&range=90d" | python3 -c "
import json, sys
d = json.load(sys.stdin)['chart']['result'][0]
quotes = d['indicators']['quote'][0]
idx = d['timestamp']
valid = [(i, quotes['open'][i], quotes['close'][i]) for i in range(len(idx)) if quotes['open'][i] and quotes['close'][i]]
if len(valid) >= 7:
    o0 = valid[0][1]; c0 = valid[-1][2]
    c20 = valid[-20][2] if len(valid) >= 20 else valid[0][2]
    c7 = valid[-7][2] if len(valid) >= 7 else valid[0][2]
    print(f'=== 🗺️ 90日 日线轮廓 ===')
    print(f'数据点数: {len(valid)} 个交易日')
    print(f'90日涨跌: {(c0/o0-1)*100:+.1f}%')
    print(f'20日涨跌: {(c0/c20-1)*100:+.1f}%')
    print(f'7日涨跌: {(c0/c7-1)*100:+.1f}%')
else:
    print('数据不足，无法计算轮廓')
"
```

**复盘后必须输出：**
- 最近 `30D 4H` 主导手法是什么
- 最近 `2-3` 次关键动作是什么（急拉、急砸、假突破、回收、派发）
- 今天看到的信号属于 `延续 / 回踩 / 诱多 / 诱空 / 纯噪音`

### 块 1.5：日内短线 — 4H/1H K 线 ⚠️ 日内交易者必看

```bash
# 4H K线（聚合）+ 1H K线（近5日）
SYMBOL="CL=F"
curl -s -H "User-Agent: Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/${SYMBOL}?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']

# 构建1H蜡烛
candles = []
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 o and c:
        candles.append({'t':idx[i],'o':o,'h':h,'l':l,'c':c,'v':(v or 0)})

# 聚合4H
agg_4h = []
for i in range(0, len(candles)-3, 4):
    chunk = candles[i:i+4]
    if chunk:
        agg_4h.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'],
            'v': sum(x['v'] for x in chunk)
        })

print(f'=== 📊 4H K线（近5日聚合，{len(agg_4h)}根）===')
for r in agg_4h[-12:]:
    dt = datetime.fromtimestamp(r['t'], tz=timezone.utc).strftime('%m-%d %H:%M')
    body = 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
    clr = '🟢' if r['c'] >= r['o'] else '🔴'

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Lzh-xbccz](https://github.com/Lzh-xbccz)
- **Source:** [Lzh-xbccz/hermes-finance](https://github.com/Lzh-xbccz/hermes-finance)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-lzh-xbccz-hermes-finance-futures-market-analysis
- Seller: https://agentstack.voostack.com/s/lzh-xbccz
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
