Install
$ agentstack add skill-lzh-xbccz-hermes-finance-futures-market-analysis ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
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-7 维;逐项列出每个维度的偏多/偏空/中性/缺失状态及理由,不允许先看 CZSC 再倒推理由。不要用投票计数或权重打分决定方向。 - 必须做
反向审计:先写出最强反方向证据;若反方向证据接近或关键驱动冲突,最终方向降级为观望。 - 再给
缠论确认,说明 CZSC 是确认、冲突还是不足。 - 最终方向由你基于各维度证据的逻辑强度综合判断后决定;第 8 维只能提高/降低置信度、细化入场止损或触发观望,不能用 CZSC score 覆盖 1-7 维。
- 使用
python3 -m hermes_finance analyze futures或 MCPanalyze_futures,默认会尽量用采集器 K 线跑 CZSC。
三、决策流程(从数据到方向)
第零步:确认标的 + 执行前检查 ⚠️ 必做
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,则不追价,等待回踩/反抽或直接观望
第一步:复盘这个品种最近的操盘手法(决定值不值得做)
三层复盘窗口:
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)
唯一允许的数据采集方式:
# 一键采集所有数据(内置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,包含:daily90d、hourly10d、agg4h10d、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 -> CLUSDTBZ -> BZUSDTGC -> XAUUSDTSI -> XAGUSDTHG -> COPPERUSDTNG -> NATGASUSDTPL -> XPTUSDTPA -> 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"}:
- 不要手动 curl Yahoo(会被再限流)
- 立即切换到 Tavily 搜索补关键缺口:
# 并行搜索 — 价格 + 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", # 利率
]
- Tavily 数据可用来源(已验证):
- 价格:Stooq (stooq.com)、TradingEconomics、TEchi、Fortune
- DXY:MarketWatch、TradingEconomics、Barchart
- VIX:Investing.com (历史表)、CBOE 官方
- 10Y:YCharts、Treasury.gov 官方数据、Investing.com
- GC 最后兜底 K 线补充方案:当 GC=F 被 Yahoo 429 阻断且
XAUUSDTTradFi 永续不可用时,才通过 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 偏差 先确认分析时间和标的。标的都没对齐,后面的数据越多越危险。
# 记录分析时间(报告中必须回填)
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日历史
# 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 看精度,不依赖单一截断源
# 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 线 ⚠️ 日内交易者必看
# 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.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.