Allanli1011/us_commodities_scan

GitHub: Allanli1011/us_commodities_scan

基于 Yahoo Finance 数据的全球期货技术信号扫描器,融合 MACD 背离、三推回撤与 ICT PDA 策略自动筛选交易机会。

Stars: 0 | Forks: 1

# 美国 / 全球期货扫描器 交易信号逻辑与 [Allanli1011/cn_stock_scan](https://github.com/Allanli1011/cn_stock_scan) 相同(MACD三重背离 + PA三推75%回撤 + ICT周线/月线 PDA),但其操作对象是 **Yahoo Finance 上的所有连续近月期货合约**(`=F` 代码), 而不是 A 股。 标的池涵盖约 57 个合约,覆盖能源、金属、谷物、软商品、 牲畜、股指、货币、利率、波动率和加密货币等领域。 ## 综合评分(最高 3.0) | 信号 | 评分 | 备注 | |---|---|---| | MACD 严格 5/5 背离 | +1.0 | 图表上的紫色标记 | | MACD 宽松 4/5 背离 | +0.5 | 橙色标记 | | 60-90% 回撤的三推 | +1.0 | H1/H2/H3 标记 | | 周线/月线 OB+FVG 重叠 | +1.0 | “Premium-discount array” | | 周线/月线单边 OB 或 FVG | +0.5 | | 评分 ≥ 2.5 被标记为 **三重收敛**。 ## 快速开始 ``` pip install -r requirements.txt # 首次运行:构建 universe + 下载每日历史数据 python scripts/scan_full.py --refresh-data --min-score 1.5 --plot-top 5 # 后续运行:仅增量更新价格 python scripts/scan_full.py --update-prices --min-score 1.5 # 扫描单个 category python scripts/scan_full.py --category Energy --plot-top 3 python scripts/scan_full.py --category Metals python scripts/scan_full.py --category Grains # 仅显示 short 信号 python scripts/scan_full.py --direction top ``` ## 输出 * `output/futures_signals_.csv` — 满足 `--min-score` 的每一个合约, 按综合评分排序 * `output/charts/__.png` — 带注释的 K 线图, 包含 MACD 副图、三推标记、PDA 区域以及入场/止损/目标 交易计划 ## 每日自动化(GitHub Actions) 位于 `.github/workflows/daily_scan.yml` 的定时工作流会在 **每个工作日 UTC 时间 23:00**(≈ 美东时间下午 6 点 / 美东夏令时下午 7 点,在美国期货 结算后)运行扫描。它将当天的 CSV 和前 5 张图表提交到仓库的 `signals/` 文件夹中,并将其作为 90 天的 artifact 上传。 * 浏览历史信号 → [`signals/`](signals/) 文件夹 * 触发临时运行 → Actions 标签页 → **Daily Futures Scan** → "Run workflow" * 调整计划时间、评分阈值或绘图数量 → 编辑工作流 文件(`cron`、`--min-score`、`--plot-top`) 为了使自动提交生效,**Settings → Actions → General → Workflow permissions** 必须设置为 *"Read and write permissions"*。该工作流 声明了 `permissions: contents: write`,因此这是唯一需要的仓库级别 开关。 ## 标的池 期货列表位于 `src/universe.py`(`FUTURES_UNIVERSE`)中。Yahoo Finance 偶尔会下架或重命名合约;如果某个代码不再 返回数据,只需删除其对应行即可。 | 类别 | 示例 | |---|---| | 能源 | CL=F WTI原油, BZ=F 布伦特原油, NG=F 天然气, HO=F, RB=F | | 金属 | GC=F 黄金, SI=F 白银, HG=F 铜, PL=F, PA=F | | 谷物 | ZC=F 玉米, ZS=F 大豆, ZW=F 小麦, ZL=F, ZM=F, ZO=F, ZR=F | | 软商品 | KC=F 咖啡, SB=F 糖, CC=F 可可, CT=F 棉花, OJ=F | | 牲畜 | LE=F 活牛, HE=F 瘦猪, GF=F 饲牛 | | 指数 | ES=F 标普, NQ=F 纳斯达克, YM=F 道琼斯, RTY=F 罗素, NKD=F | | 货币 | 6E=F 欧元, 6J=F 日元, 6B=F 英镑, DX=F 美元指数 | | 利率 | ZN=F 10年期, ZB=F 30年期, ZF=F 5年期, ZT=F 2年期, TN=F, UB=F | | 加密货币 | BTC=F 比特币, ETH=F 以太坊 | `DX=F`(美元指数)和 `VX=F`(VIX)目前无法从 Yahoo Finance 获取数据,因此被排除在外。如果你需要相关敞口,请使用对应的指数/ETF 替代代码(`DX-Y.NYB`、 `^VIX`、`UUP`、`VXX`)。 ## 关键参数 (config.yaml) | 设置 | 默认值 | 备注 | |---|---|---| | `swing.pct_threshold` | 0.03 | ZigZag 阈值 —— 如果 NG=F/VX=F 噪音过大,可调高至 0.04–0.05 | | `macd.divergence.min_area_reduction` | 0.10 | 每根直方图柱的面积必须缩小 ≥10% | | `macd.divergence.recency_bars` | 30 | 第 3 次推力必须发生在过去 30 根日线之内 | | `three_push.pullback_target_pct` | 0.75 | 75% 回撤目标 | | `three_push.pullback_tolerance` | 0.15 | 接受 [60%, 90%] 范围内的回撤 | | `ob_fvg.ob_displacement_atr` | 2.0 | OB 需要 2 倍 ATR 的后续走势确认 | | `prices.lookback_days` | 800 | 约 3 年的日线数据 | ## 与 cn_stock_scan 的差异 * **数据源**:使用 yfinance 而非 akshare * **标的池**:精选的期货列表(无市值过滤器) * **周线重采样基准**:`W-SUN`(期货在 Globex 的交易时间为周日至周五)vs `W-FRI` * **颜色惯例**:绿色=涨,红色=跌(美国惯例;A 股使用 相反颜色) * **货币符号**:`$` 而非 `¥` * **输出语言**:英语 MACD 背离规则、三推回撤逻辑以及 OB/FVG/PDA 机制在代码实现上完全一致。
标签:MACD, Python, 技术分析, 无后门, 期货扫描器, 自动化交易, 逆向工具, 量化金融, 雅虎财经