宋氏不可能三角
> 公理:同一时间段,粗钢产量、钢材价格和钢企利润,不可能同时处于高位或者低位。
映射到可观测数据:粗钢产量 → 高炉开工率,钢材价格 → 锚定品种价格(默认钢坯),钢企利润 → 津冀钢坯利润。
实证(2016-01 → 2026-05 共 530 个对齐周,3年因果滚动分位,高位≥80%、低位≤20%):
| 检验 | 结果 | 含义 |
|---|---|---|
| 三角同高 | 2.7%(13周,全部集中在2017Q2-Q3供给侧改革期) | 独立基线0.8%,罕见且属政策例外 |
| 三角同低 | 0.6%(3周,仅2020-02~03疫情) | 几乎不可能 |
| 价格×产量同高 | 3.2%,两两相关 −0.29 | 价格与产量天然互斥——公理的核心机制 |
| 价格×利润同高 | 12.6%,相关+0.42 | 价格利润常同向,矛盾主要出在产量角 |
推论:任一时刻至少一角"被牺牲",牺牲角决定方向——
| 牺牲角 | 状态特征 | 传导逻辑 |
|---|---|---|
| M 利润 | 利润≤−200 元/吨深亏 | 钢企减产 → 约1个月内现铁水拐点;减产初期原料利空、成材先抗跌后走强 |
| P 价格 | 价格低位出清 / 动量下行确认 | 底部逢低机会 / 跌势跟随 |
| Q 产量 | 价格、利润同高时产量必回落 | 高价抑制需求 vs 高利润刺激复产,产量摆动决定顶部节奏 |
| 无牺牲 | 三角全中性 | 方向未确认,只盯锚不押方向 |
一、只要 3 个数
| 数 | 含义 | 数据要求 |
|---|---|---|
| P180 | 价格 180 交易日分位 | 锚定品种日频价格(默认钢坯现货) |
| M | 钢企利润(元/吨) | 周频(滞后≤7天可用,周中急跌手动喂当日估算) |
| mom20 | 价格 20 日动量 % | 同价格序列 |
二、决策表(顺序即优先级,从上往下第一条命中即出结论)
| # | 条件 | 牺牲角 | 结论 | 动作 |
|---|---|---|---|---|
| 1 | M≤−200 且 P180≥80% | M 利润 | 顶部区 | 停止采购,逢高降库 |
| 2 | M≤−200(单独) | M 利润 | 引信点燃 | 挂抄底清单,分批建库(约1个月内现铁水拐点) |
| 3 | mom20≤−3% | P 价格 | 空头锚 | 空仓观望,破位不接 |
| 4 | P180≤20% | P 价格 | 底部区 | 分批买入,越跌越买 |
| 5 | P180≥80% 或 mom20≥+3% | Q 产量让位 | 多头锚 | 持有不追高;动量跌回带内或利润转正即减 |
| 6 | 其余 | 无明确 | 中性观望 | 按需采购,不加不省 |
设计逻辑一句话:利润引信管底、价格分位管顶、动量管节奏。表没话讲:命中即执行,没命中就是第6行。
三、运行(零依赖,纯 Python 标准库)
# 方式1:一份价格CSV(date,price 日频)+ 一份利润CSV(date,profit 周频)
python scripts/triangale.py --price price.csv --profit profit.csv
# 方式2:手动喂三个数
python scripts/triangale.py --p180 61 --m -167.5 --mom20 -0.33
输出模板:
【宋氏不可能三角 · 速判 2026-09-23】
价格 3010(2026-09-23,180日区间 2920~3120) P180 61% | 利润 -168(2026-09-22)| 20日动量 -0.33%
牺牲角=无明确 | 结论:中性观望 —— 三条线都没触发,方向未确认
动作:按需采购,不加不省
价格 CSV 格式(带表头也没关系,自动跳过非数据行):
date,price
2026-01-02,3020
2026-01-05,3010
四、边界(诚实声明)
- 本技能只判方向档位,不给点位、不给仓位比例,不构成投资建议。
- 阈值(±3% 动量、−200 元/吨引信、80%/20% 分位)来自钢坯锚定的历史事件研究(动量事件 n=759/534),换锚定品种建议先复核阈值。
- 例外条款:行政性政策冲击期(供给侧改革、粗钢平控、环保限产等)公理可短期失效(2017 年三高 13 周即此类),此时结论降权。
- 周频利润数据天然滞后;输血数据质量决定结论质量。