Compare commits

...

4 Commits

Author SHA1 Message Date
fish ddd9e71820 纯碱玻璃拆分为独立页面 2026-07-24 15:31:56 +08:00
fish 55c7bdf18d 添加 SA2609 和 FG2609 合约数据 2026-07-24 15:09:25 +08:00
fish c7534bd3df 新增FG609多空流水HTML面板和单日排名面板 2026-07-24 14:37:28 +08:00
fish 111d70209a 重点会员增加高盛期货,补充7月逐日净头寸数据 2026-07-24 14:12:06 +08:00
7 changed files with 790 additions and 238 deletions
+37 -21
View File
@@ -30,6 +30,8 @@
## 二、重点会员逐日成交量
高盛期货罕见进入成交量排名(仅7/02有量2.6万手),但持空单排名稳定前5,另见净头寸表。
| 日期 | 国泰君安 | 东证期货 | 中信期货 | 永安期货 | 华泰期货 | 方正中期 |
|---|---|---|---|---|---|---|
| 07/01 | 233,783 | 299,440 | 259,117 | 45,015 | 147,842 | --- |
@@ -52,25 +54,25 @@
## 三、重点会员逐日净头寸(多 - 空)
| 日期 | 国泰君安 | 东证期货 | 中信期货 | 永安期货 | 华泰期货 | 方正中期 |
|---|---|---|---|---|---|---|
| 07/01 | -92,666 | -95,915 | -109,038 | +6,574 | -68,428 | +60,825 |
| 07/02 | -109,331 | -90,770 | -109,832 | -35,371 | -53,548 | +6,179 |
| 07/03 | -102,242 | -87,013 | -89,675 | -30,395 | -40,001 | +6,503 |
| 07/06 | -115,523 | -92,972 | -107,866 | -27,659 | -70,262 | +7,302 |
| 07/07 | -122,252 | -99,256 | -117,756 | -25,952 | -18,146 | +7,059 |
| 07/08 | -101,630 | -97,468 | -112,048 | +6,088 | -46,264 | +5,480 |
| 07/09 | -116,054 | -104,643 | -111,114 | -32,427 | -71,119 | +9,083 |
| 07/10 | -100,286 | -100,733 | -103,834 | +5,922 | -45,536 | +8,017 |
| 07/13 | -119,242 | -108,172 | -125,378 | +10,977 | -17,849 | +10,657 |
| 07/14 | -130,405 | -100,958 | -121,409 | -17,893 | -18,680 | +10,158 |
| 07/15 | -126,199 | -98,211 | -127,246 | -17,504 | -71,785 | +8,840 |
| **07/16** | **-126,934** | **-117,147** | **-126,616** | **+6,741** | -24,580 | +7,371 |
| **07/17** | -116,531 | -105,050 | **-144,715** | -15,082 | -23,576 | +8,735 |
| 07/20 | -86,493 | **-115,884** | **-141,896** | -20,301 | **-105,208** | +6,407 |
| 07/21 | **-64,475** | **-124,442** | -102,917 | +5,466 | -32,130 | +3,932 |
| 07/22 | **-48,705** | -99,658 | -102,830 | +308 | -48,643 | +3,158 |
| 07/23 | **-45,296** | **-113,002** | -106,827 | +1,022 | -27,976 | +2,858 |
| 日期 | 国泰君安 | 东证期货 | 中信期货 | 永安期货 | 华泰期货 | 方正中期 | **高盛期货** |
|---|---|---|---|---|---|---|---|
| 07/01 | -92,666 | -95,915 | -109,038 | +6,574 | -68,428 | +60,825 | **-157,673** |
| 07/02 | -109,331 | -90,770 | -109,832 | -35,371 | -53,548 | +6,179 | +7,256 |
| 07/03 | -102,242 | -87,013 | -89,675 | -30,395 | -40,001 | +6,503 | **-177,843** |
| 07/06 | -115,523 | -92,972 | -107,866 | -27,659 | -70,262 | +7,302 | **-178,421** |
| 07/07 | -122,252 | -99,256 | -117,756 | -25,952 | -18,146 | +7,059 | **-190,467** |
| 07/08 | -101,630 | -97,468 | -112,048 | +6,088 | -46,264 | +5,480 | **-191,861** |
| 07/09 | -116,054 | -104,643 | -111,114 | -32,427 | -71,119 | +9,083 | **-199,514** |
| 07/10 | -100,286 | -100,733 | -103,834 | +5,922 | -45,536 | +8,017 | **-194,311** |
| 07/13 | -119,242 | -108,172 | -125,378 | +10,977 | -17,849 | +10,657 | **-194,729** |
| 07/14 | -130,405 | -100,958 | -121,409 | -17,893 | -18,680 | +10,158 | **-196,440** |
| 07/15 | -126,199 | -98,211 | -127,246 | -17,504 | -71,785 | +8,840 | **-190,739** |
| **07/16** | **-126,934** | **-117,147** | **-126,616** | **+6,741** | -24,580 | +7,371 | **-203,618** |
| **07/17** | -116,531 | -105,050 | **-144,715** | -15,082 | -23,576 | +8,735 | **-218,070** |
| 07/20 | -86,493 | **-115,884** | **-141,896** | -20,301 | **-105,208** | +6,407 | **-219,290** |
| 07/21 | **-64,475** | **-124,442** | -102,917 | +5,466 | -32,130 | +3,932 | **-203,387** |
| 07/22 | **-48,705** | -99,658 | -102,830 | +308 | -48,643 | +3,158 | **-188,460** |
| **07/23** | **-45,296** | **-113,002** | -106,827 | +1,022 | -27,976 | +2,858 | **-183,405** |
## 四、关键发现
@@ -101,6 +103,20 @@
- 方正中期是上榜中**唯一持续净多**的会员(+3k~+10k)
- 整个品种全月净空在-33万~-44万之间
### 4. 外资参与
### 4. 外资参与:高盛期货 — 沉默的巨量空头
- **7/23 高盛期货**空单183,405手排名空头第二,但此前的日子未在前20中出现过
高盛期货的持仓行为与中资会员截然不同:
- **不做量**:全月仅7/02一次进入成交量前20(2.6万手),其余日子成交量排名全在前20之外
- **但持空单全月排名前5**:净空头寸从7月初 -15.8万持续加至最高 -21.9万(7/20
- **7/02短暂翻多**:当天净头寸 +7,256(唯一一次净多),但次日迅速回补至 -17.8万
| 日期 | 净空头寸 | 说明 |
|---|---|---|
| 07/01 | -157,673 | 月初即有大规模的底仓 |
| 07/07→07/09 | -190k→-200k | 持续加仓 |
| **07/16→07/17** | -203k→**-218k** | **暴跌中继续加空** |
| 07/20 | **-219,290** | **全月最空**(价格最低点889附近) |
| 07/21→07/23 | -203k→-183k | 小幅减仓,仍维持18万+空头 |
**高盛空仓与价格走势高度同步**:价格从960跌至890过程中,高盛空单从-19万增到-22万。7/20后价格反弹,高盛才开始减空。说明这是**基于基本面判断的套保/策略空头,而非短线投机**,2-3周建仓周期,不参与日内成交量排名。
File diff suppressed because one or more lines are too long
+103
View File
@@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FG609 前20会员持仓排名</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #f5f6fa; padding: 24px; color: #1a1a2e; }
.header { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 20px; }
.header h1 { font-size: 20px; font-weight: 600; }
.header span { font-size: 13px; color: #666; }
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 12px; }
.card { background: #fff; border-radius: 10px; padding: 16px; box-shadow: 0 1px 4px rgba(0,0,0,0.08); }
.card .top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.card .rank { font-size: 12px; color: #888; font-weight: 600; }
.card .name { font-size: 14px; font-weight: 600; }
.card .vol { font-size: 22px; font-weight: 700; }
.card .vol small { font-size: 13px; font-weight: 400; }
.chg-up { color: #e74c3c; }
.chg-down { color: #27ae60; }
.chg-0 { color: #999; }
.row2 { display: flex; gap: 12px; margin-top: 10px; padding-top: 10px; border-top: 1px solid #eee; }
.row2 > div { flex: 1; }
.row2 label { font-size: 11px; color: #888; display: block; }
.row2 .num { font-size: 15px; font-weight: 600; }
.net { font-size: 13px; font-weight: 600; margin-top: 6px; padding-top: 6px; border-top: 1px dashed #eee; }
</style>
</head>
<body>
<div class="header">
<h1>FG609 前20会员持仓排名</h1>
<span>2026-07-23 · 郑州商品交易所</span>
</div>
<div class="grid" id="grid"></div>
<script>
const data = [
{"rank":1,"name":"国泰君安(代客)","vol":318971,"vol_chg":-62376,"long_oi":147305,"long_chg":2980,"short_oi":192601,"short_chg":-429,"net":-45296},
{"rank":2,"name":"东证期货(代客)","vol":300477,"vol_chg":6057,"long_oi":70403,"long_chg":-15227,"short_oi":183405,"short_chg":-5055,"net":-113002},
{"rank":3,"name":"中信期货(代客)","vol":269227,"vol_chg":-31123,"long_oi":63443,"long_chg":-528,"short_oi":170270,"short_chg":1821,"net":-106827},
{"rank":4,"name":"五矿期货(代客)","vol":136245,"vol_chg":43666,"long_oi":63046,"long_chg":-5745,"short_oi":141610,"short_chg":28996,"net":-78564},
{"rank":5,"name":"华泰期货(代客)","vol":120984,"vol_chg":-2292,"long_oi":60040,"long_chg":272,"short_oi":88016,"short_chg":-2187,"net":-27976},
{"rank":6,"name":"冠通期货(代客)","vol":98116,"vol_chg":47780,"long_oi":56357,"long_chg":-663,"short_oi":71413,"short_chg":-9151,"net":-15056},
{"rank":7,"name":"银河期货(代客)","vol":86560,"vol_chg":-14234,"long_oi":50631,"long_chg":-3588,"short_oi":56787,"short_chg":-5343,"net":-6156},
{"rank":8,"name":"广发期货(代客)","vol":86232,"vol_chg":-19280,"long_oi":50128,"long_chg":615,"short_oi":48861,"short_chg":-5848,"net":1267},
{"rank":9,"name":"华闻期货(代客)","vol":83156,"vol_chg":-23036,"long_oi":49883,"long_chg":4237,"short_oi":39419,"short_chg":245,"net":10464},
{"rank":10,"name":"中泰期货(代客)","vol":81458,"vol_chg":2858,"long_oi":44652,"long_chg":1020,"short_oi":39076,"short_chg":877,"net":5576},
{"rank":11,"name":"中信建投(代客)","vol":63270,"vol_chg":4221,"long_oi":43748,"long_chg":2819,"short_oi":38532,"short_chg":-1972,"net":5216},
{"rank":12,"name":"光大期货(代客)","vol":62166,"vol_chg":196,"long_oi":42149,"long_chg":1972,"short_oi":38427,"short_chg":488,"net":3722},
{"rank":13,"name":"国信期货(代客)","vol":60570,"vol_chg":-5459,"long_oi":32668,"long_chg":1356,"short_oi":35369,"short_chg":-1415,"net":-2701},
{"rank":14,"name":"招商期货(代客)","vol":54286,"vol_chg":9923,"long_oi":32363,"long_chg":-1863,"short_oi":30159,"short_chg":-5047,"net":2204},
{"rank":15,"name":"海通期货(代客)","vol":47715,"vol_chg":17,"long_oi":31829,"long_chg":-6109,"short_oi":29086,"short_chg":-5276,"net":2743},
{"rank":16,"name":"南华期货(代客)","vol":46644,"vol_chg":13351,"long_oi":30128,"long_chg":1924,"short_oi":28816,"short_chg":662,"net":1312},
{"rank":17,"name":"瑞达期货(代客)","vol":43583,"vol_chg":8153,"long_oi":29777,"long_chg":-5192,"short_oi":25507,"short_chg":3068,"net":4270},
{"rank":18,"name":"安粮期货(代客)","vol":37862,"vol_chg":9527,"long_oi":27348,"long_chg":82,"short_oi":24953,"short_chg":-2943,"net":2395},
{"rank":19,"name":"方正中期(代客)","vol":36205,"vol_chg":-5587,"long_oi":26834,"long_chg":1832,"short_oi":23976,"short_chg":-2526,"net":2858},
{"rank":20,"name":"徽商期货(代客)","vol":35088,"vol_chg":-1103,"long_oi":25159,"long_chg":-5,"short_oi":18530,"short_chg":211,"net":6629}
];
function cls(v) {
if (v > 0) return 'chg-up';
if (v < 0) return 'chg-down';
return 'chg-0';
}
function fmt(v) { return v.toLocaleString(); }
function chgStr(v) {
const s = v > 0 ? '+' : '';
return s + fmt(v);
}
const grid = document.getElementById('grid');
data.forEach(d => {
const card = document.createElement('div');
card.className = 'card';
card.innerHTML = `
<div class="top">
<span class="rank">#${d.rank}</span>
<span class="name">${d.name}</span>
</div>
<div>
<div class="vol">${fmt(d.vol)} <small class="${cls(d.vol_chg)}">(${chgStr(d.vol_chg)})</small></div>
</div>
<div class="row2">
<div>
<label>多单</label>
<div class="num">${fmt(d.long_oi)}</div>
<div class="${cls(d.long_chg)}" style="font-size:12px">${chgStr(d.long_chg)}</div>
</div>
<div>
<label>空单</label>
<div class="num">${fmt(d.short_oi)}</div>
<div class="${cls(d.short_chg)}" style="font-size:12px">${chgStr(d.short_chg)}</div>
</div>
</div>
<div class="net ${cls(d.net)}">净头寸 ${chgStr(d.net)}</div>
`;
grid.appendChild(card);
});
</script>
</body>
</html>
+1 -1
View File
@@ -73,7 +73,7 @@ for ds in sorted(all_data.keys()):
# ====== 重点会员逐日变化 ======
key_members = ["国泰君安(代客)", "东证期货(代客)", "中信期货(代客)",
"永安期货(代客)", "华泰期货(代客)", "方正中期(代客)"]
"永安期货(代客)", "华泰期货(代客)", "方正中期(代客)", "高盛期货(代客)"]
print("\n" + "="*100)
print("【重点会员逐日成交量】")
print("="*100)
+234
View File
@@ -0,0 +1,234 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>振幅锁仓策略 — 玻璃 FG2609 & FG2611 & FG2701</title>
<style>
:root {
--bg: #fff; --fg: #1e293b; --sub: #64748b;
--th-bg: #f1f5f9; --th-fg: #334155; --th-border: #cbd5e1;
--td-border: #e2e8f0; --td-even: #f8fafc; --td-first: #334155;
--na: #94a3b8;
}
[data-theme="dark"] {
--bg: #0f172a; --fg: #e2e8f0; --sub: #94a3b8;
--th-bg: #1e293b; --th-fg: #cbd5e1; --th-border: #334155;
--td-border: #1e293b; --td-even: #1a2332; --td-first: #e2e8f0;
--na: #64748b;
}
body { font-family: -apple-system, 'Segoe UI', system-ui, sans-serif; padding: 24px; max-width: 1100px; margin: 0 auto; color: var(--fg); background: var(--bg); }
h1 { font-size: 1.4rem; margin-bottom: 8px; }
.sub { color: var(--sub); font-size: 0.85rem; margin-bottom: 8px; }
.formula { color: var(--sub); font-size: 0.8rem; margin-bottom: 24px; padding: 6px 12px; background: var(--th-bg); border-radius: 4px; display: inline-block; }
table { border-collapse: collapse; width: 100%; font-size: 0.9rem; }
th { background: var(--th-bg); color: var(--th-fg); font-weight: 600; padding: 8px 10px; border: 1px solid var(--th-border); text-align: center; white-space: nowrap; }
td { padding: 6px 10px; border: 1px solid var(--td-border); text-align: center; }
tr:nth-child(even) td { background: var(--td-even); }
td:first-child { font-weight: 500; color: var(--td-first); }
tr.active td { background: #dbeafe !important; }
[data-theme="dark"] tr.active td { background: #1e3a5f !important; }
td:nth-child(2) { font-size: 0.78rem; color: var(--sub); }
.na { color: var(--na); }
.toggle-btn { position: fixed; top: 16px; right: 24px; background: var(--th-bg); border: 1px solid var(--th-border); color: var(--th-fg); padding: 6px 14px; border-radius: 6px; cursor: pointer; font-size: 0.82rem; z-index: 10; }
.toggle-btn:hover { opacity: 0.8; }
.section { margin-bottom: 8px; }
.section h2 { font-size: 1.1rem; cursor: pointer; user-select: none; display: flex; align-items: center; gap: 8px; margin: 28px 0 10px; padding: 4px 0; }
.section h2 .arrow { display: inline-block; transition: transform .2s; font-size: 0.8rem; }
.section.collapsed h2 .arrow { transform: rotate(-90deg); }
.section.collapsed table { display: none; }
.drawer-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.35); z-index: 99; display: none; }
.drawer-overlay.show { display: block; }
.drawer { position: fixed; top: 0; right: 0; width: 340px; height: 100%; background: var(--bg); border-left: 1px solid var(--th-border); z-index: 100; padding: 24px; transform: translateX(100%); transition: transform .25s ease; overflow-y: auto; box-shadow: -4px 0 20px rgba(0,0,0,.15); }
.drawer.show { transform: translateX(0); }
.drawer h3 { font-size: 1rem; margin-bottom: 4px; }
.drawer .date-label { color: var(--sub); font-size: 0.82rem; margin-bottom: 16px; }
.drawer .calc-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; margin-bottom: 14px; }
.drawer .calc-table td { padding: 4px 8px; border: 1px solid var(--td-border); text-align: center; }
.drawer .calc-table tr:first-child td { background: var(--th-bg); font-weight: 600; color: var(--th-fg); }
.drawer .result { font-size: 0.85rem; line-height: 1.8; color: var(--fg); }
.drawer .result b { font-size: 1.1rem; }
.drawer .close-btn { position: absolute; top: 16px; right: 20px; background: none; border: none; font-size: 1.4rem; cursor: pointer; color: var(--sub); line-height: 1; }
.drawer .close-btn:hover { color: var(--fg); }
.amp-cell { cursor: pointer; text-decoration: underline; text-decoration-style: dotted; text-underline-offset: 3px; }
.amp-cell:hover { color: #3b82f6; }
.nav-link { color: var(--sub); font-size: 0.82rem; margin-bottom: 4px; }
.nav-link a { color: #3b82f6; text-decoration: none; }
.nav-link a:hover { text-decoration: underline; }
</style>
</head>
<body>
<button class="toggle-btn" id="themeToggle">🌙 暗夜</button>
<h1>振幅锁仓策略 — 玻璃</h1>
<p class="nav-link"><a href="index.html">&larr; 返回总览</a> &nbsp;|&nbsp; <a href="index-SA.html">查看纯碱</a></p>
<p class="sub">FG2609 &nbsp;|&nbsp; FG2611 &nbsp;|&nbsp; FG2701 &nbsp;|&nbsp; 2026年7月</p>
<p class="formula">振幅算法:近 5 日均振幅 = 过去 5 个交易日 (最高 − 最低) 的均值,结果四舍五入取整</p>
<div class="section collapsed" id="sec-fg2609">
<h2 onclick="toggleSection('sec-fg2609')"><span class="arrow"></span> FG2609 玻璃</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>972</td><td>961</td><td>972</td><td>956</td><td>16</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>960</td><td>966</td><td>972</td><td>957</td><td>15</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>965</td><td>973</td><td>979</td><td>962</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>977</td><td>967</td><td>982</td><td>964</td><td>18</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>966</td><td>952</td><td>966</td><td>951</td><td>15</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>954</td><td>962</td><td>966</td><td>951</td><td>15</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>963</td><td>957</td><td>964</td><td>949</td><td>15</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>956</td><td>965</td><td>974</td><td>952</td><td>22</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>965</td><td>952</td><td>967</td><td>950</td><td>17</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>954</td><td>951</td><td>956</td><td>944</td><td>12</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>950</td><td>949</td><td>958</td><td>944</td><td>14</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>949</td><td>929</td><td>952</td><td>927</td><td>25</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>931</td><td>900</td><td>931</td><td>899</td><td>32</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>902</td><td>890</td><td>908</td><td>889</td><td>19</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>891</td><td>904</td><td>910</td><td>891</td><td>19</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>908</td><td>913</td><td>918</td><td>900</td><td>18</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>914</td><td>899</td><td>917</td><td>892</td><td>25</td><td class="amp-cell">23</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">23</td></tr>
</table>
</div>
<div class="section collapsed" id="sec-fg2611">
<h2 onclick="toggleSection('sec-fg2611')"><span class="arrow"></span> FG2611 玻璃</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1011</td><td>1001</td><td>1011</td><td>994</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1001</td><td>1002</td><td>1008</td><td>994</td><td>14</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1002</td><td>1010</td><td>1017</td><td>999</td><td>18</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1013</td><td>1003</td><td>1019</td><td>1002</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1003</td><td>984</td><td>1003</td><td>983</td><td>20</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>984</td><td>993</td><td>996</td><td>981</td><td>15</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>994</td><td>987</td><td>994</td><td>981</td><td>13</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>986</td><td>996</td><td>1004</td><td>983</td><td>21</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>996</td><td>980</td><td>1001</td><td>980</td><td>21</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>982</td><td>983</td><td>986</td><td>974</td><td>12</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>982</td><td>979</td><td>988</td><td>975</td><td>13</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>979</td><td>960</td><td>982</td><td>957</td><td>25</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>962</td><td>932</td><td>962</td><td>931</td><td>31</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>934</td><td>926</td><td>939</td><td>924</td><td>15</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>929</td><td>934</td><td>941</td><td>926</td><td>15</td><td class="amp-cell">19</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>936</td><td>939</td><td>945</td><td>929</td><td>16</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>938</td><td>931</td><td>941</td><td>925</td><td>16</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">19</td></tr>
</table>
</div>
<div class="section collapsed" id="sec-fg2701">
<h2 onclick="toggleSection('sec-fg2701')"><span class="arrow"></span> FG2701 玻璃</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1059</td><td>1054</td><td>1062</td><td>1050</td><td>12</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1051</td><td>1055</td><td>1061</td><td>1050</td><td>11</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1053</td><td>1062</td><td>1070</td><td>1053</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1065</td><td>1058</td><td>1071</td><td>1056</td><td>15</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1056</td><td>1042</td><td>1058</td><td>1041</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>1043</td><td>1048</td><td>1051</td><td>1036</td><td>15</td><td class="amp-cell">14</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>1048</td><td>1043</td><td>1049</td><td>1037</td><td>12</td><td class="amp-cell">15</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>1041</td><td>1048</td><td>1056</td><td>1039</td><td>17</td><td class="amp-cell">15</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>1049</td><td>1035</td><td>1050</td><td>1034</td><td>16</td><td class="amp-cell">15</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>1035</td><td>1035</td><td>1041</td><td>1031</td><td>10</td><td class="amp-cell">15</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>1035</td><td>1030</td><td>1038</td><td>1028</td><td>10</td><td class="amp-cell">14</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>1031</td><td>1016</td><td>1033</td><td>1014</td><td>19</td><td class="amp-cell">13</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>1017</td><td>989</td><td>1017</td><td>988</td><td>29</td><td class="amp-cell">14</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>989</td><td>985</td><td>996</td><td>983</td><td>13</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>987</td><td>987</td><td>992</td><td>981</td><td>11</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>991</td><td>987</td><td>993</td><td>977</td><td>16</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>989</td><td>979</td><td>990</td><td>974</td><td>16</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">17</td></tr>
</table>
</div>
<div class="drawer-overlay" id="overlay" onclick="closeDrawer()"></div>
<div class="drawer" id="drawer">
<button class="close-btn" onclick="closeDrawer()">&times;</button>
<h3 id="drawer-title"></h3>
<p class="date-label" id="drawer-date"></p>
<table class="calc-table" id="drawer-table"></table>
<div class="result" id="drawer-result"></div>
</div>
<script>
var themeBtn = document.getElementById('themeToggle');
function setTheme(dark) {
if (dark) {
document.documentElement.setAttribute('data-theme', 'dark');
themeBtn.textContent = '☀️ 日间';
} else {
document.documentElement.removeAttribute('data-theme');
themeBtn.textContent = '🌙 暗夜';
}
try { localStorage.setItem('ft-theme', dark ? 'dark' : 'light'); } catch(e) {}
}
function toggleTheme() {
setTheme(document.documentElement.getAttribute('data-theme') !== 'dark');
}
(function() {
try {
var s = localStorage.getItem('ft-theme');
if (s === 'dark' || (!s && matchMedia('(prefers-color-scheme: dark)').matches)) setTheme(true);
} catch(e) {}
})();
function toggleSection(id) {
document.getElementById(id).classList.toggle('collapsed');
}
var activeRow = null;
function closeDrawer() {
document.getElementById('overlay').classList.remove('show');
document.getElementById('drawer').classList.remove('show');
if (activeRow) { activeRow.classList.remove('active'); activeRow = null; }
}
document.querySelectorAll('.amp-cell').forEach(function(cell) {
cell.addEventListener('click', function() {
var row = cell.parentElement;
var tbl = row.closest('table');
var rows = tbl.querySelectorAll('tr');
var h2 = tbl.closest('.section').querySelector('h2');
var product = h2.childNodes[h2.childNodes.length - 1].textContent.trim();
var ranges = [];
for (var i = 1; i < rows.length; i++) {
var cells = rows[i].querySelectorAll('td');
ranges.push({
date: cells[0].textContent.trim(),
wk: cells[1].textContent.trim(),
diff: parseInt(cells[6].textContent) || 0
});
}
var idx = Array.prototype.indexOf.call(rows, row) - 1;
var start = idx - 5;
if (start < 0) return;
var ampVal = cell.textContent.trim();
document.getElementById('drawer-title').textContent = product;
document.getElementById('drawer-date').textContent = '目标日期: ' + ranges[idx].date + ' ' + ranges[idx].wk + ' 振幅 ' + ampVal;
var html = '<tr><td>日期</td><td>最高−最低</td></tr>';
var sum = 0;
for (var j = start; j < idx; j++) {
html += '<tr><td>' + ranges[j].date + ' ' + ranges[j].wk + '</td><td>' + ranges[j].diff + '</td></tr>';
sum += ranges[j].diff;
}
document.getElementById('drawer-table').innerHTML = html;
document.getElementById('drawer-result').innerHTML = '合计 <b>' + sum + '</b> ÷ 5 = <b>' + (sum / 5).toFixed(1) + '</b><br>四舍五入 → <b>' + Math.round(sum / 5) + '</b>';
document.getElementById('overlay').classList.add('show');
document.getElementById('drawer').classList.add('show');
if (activeRow) activeRow.classList.remove('active');
row.classList.add('active');
activeRow = row;
});
});
</script>
</body>
</html>
+234
View File
@@ -0,0 +1,234 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>振幅锁仓策略 — 纯碱 SA2609 & SA2611 & SA2701</title>
<style>
:root {
--bg: #fff; --fg: #1e293b; --sub: #64748b;
--th-bg: #f1f5f9; --th-fg: #334155; --th-border: #cbd5e1;
--td-border: #e2e8f0; --td-even: #f8fafc; --td-first: #334155;
--na: #94a3b8;
}
[data-theme="dark"] {
--bg: #0f172a; --fg: #e2e8f0; --sub: #94a3b8;
--th-bg: #1e293b; --th-fg: #cbd5e1; --th-border: #334155;
--td-border: #1e293b; --td-even: #1a2332; --td-first: #e2e8f0;
--na: #64748b;
}
body { font-family: -apple-system, 'Segoe UI', system-ui, sans-serif; padding: 24px; max-width: 1100px; margin: 0 auto; color: var(--fg); background: var(--bg); }
h1 { font-size: 1.4rem; margin-bottom: 8px; }
.sub { color: var(--sub); font-size: 0.85rem; margin-bottom: 8px; }
.formula { color: var(--sub); font-size: 0.8rem; margin-bottom: 24px; padding: 6px 12px; background: var(--th-bg); border-radius: 4px; display: inline-block; }
table { border-collapse: collapse; width: 100%; font-size: 0.9rem; }
th { background: var(--th-bg); color: var(--th-fg); font-weight: 600; padding: 8px 10px; border: 1px solid var(--th-border); text-align: center; white-space: nowrap; }
td { padding: 6px 10px; border: 1px solid var(--td-border); text-align: center; }
tr:nth-child(even) td { background: var(--td-even); }
td:first-child { font-weight: 500; color: var(--td-first); }
tr.active td { background: #dbeafe !important; }
[data-theme="dark"] tr.active td { background: #1e3a5f !important; }
td:nth-child(2) { font-size: 0.78rem; color: var(--sub); }
.na { color: var(--na); }
.toggle-btn { position: fixed; top: 16px; right: 24px; background: var(--th-bg); border: 1px solid var(--th-border); color: var(--th-fg); padding: 6px 14px; border-radius: 6px; cursor: pointer; font-size: 0.82rem; z-index: 10; }
.toggle-btn:hover { opacity: 0.8; }
.section { margin-bottom: 8px; }
.section h2 { font-size: 1.1rem; cursor: pointer; user-select: none; display: flex; align-items: center; gap: 8px; margin: 28px 0 10px; padding: 4px 0; }
.section h2 .arrow { display: inline-block; transition: transform .2s; font-size: 0.8rem; }
.section.collapsed h2 .arrow { transform: rotate(-90deg); }
.section.collapsed table { display: none; }
.drawer-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.35); z-index: 99; display: none; }
.drawer-overlay.show { display: block; }
.drawer { position: fixed; top: 0; right: 0; width: 340px; height: 100%; background: var(--bg); border-left: 1px solid var(--th-border); z-index: 100; padding: 24px; transform: translateX(100%); transition: transform .25s ease; overflow-y: auto; box-shadow: -4px 0 20px rgba(0,0,0,.15); }
.drawer.show { transform: translateX(0); }
.drawer h3 { font-size: 1rem; margin-bottom: 4px; }
.drawer .date-label { color: var(--sub); font-size: 0.82rem; margin-bottom: 16px; }
.drawer .calc-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; margin-bottom: 14px; }
.drawer .calc-table td { padding: 4px 8px; border: 1px solid var(--td-border); text-align: center; }
.drawer .calc-table tr:first-child td { background: var(--th-bg); font-weight: 600; color: var(--th-fg); }
.drawer .result { font-size: 0.85rem; line-height: 1.8; color: var(--fg); }
.drawer .result b { font-size: 1.1rem; }
.drawer .close-btn { position: absolute; top: 16px; right: 20px; background: none; border: none; font-size: 1.4rem; cursor: pointer; color: var(--sub); line-height: 1; }
.drawer .close-btn:hover { color: var(--fg); }
.amp-cell { cursor: pointer; text-decoration: underline; text-decoration-style: dotted; text-underline-offset: 3px; }
.amp-cell:hover { color: #3b82f6; }
.nav-link { color: var(--sub); font-size: 0.82rem; margin-bottom: 4px; }
.nav-link a { color: #3b82f6; text-decoration: none; }
.nav-link a:hover { text-decoration: underline; }
</style>
</head>
<body>
<button class="toggle-btn" id="themeToggle">🌙 暗夜</button>
<h1>振幅锁仓策略 — 纯碱</h1>
<p class="nav-link"><a href="index.html">&larr; 返回总览</a> &nbsp;|&nbsp; <a href="index-FG.html">查看玻璃</a></p>
<p class="sub">SA2609 &nbsp;|&nbsp; SA2611 &nbsp;|&nbsp; SA2701 &nbsp;|&nbsp; 2026年7月</p>
<p class="formula">振幅算法:近 5 日均振幅 = 过去 5 个交易日 (最高 − 最低) 的均值,结果四舍五入取整</p>
<div class="section collapsed" id="sec-sa2609">
<h2 onclick="toggleSection('sec-sa2609')"><span class="arrow"></span> SA2609 纯碱</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1086</td><td>1089</td><td>1097</td><td>1084</td><td>13</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1088</td><td>1103</td><td>1110</td><td>1087</td><td>23</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1102</td><td>1103</td><td>1113</td><td>1098</td><td>15</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1105</td><td>1101</td><td>1117</td><td>1098</td><td>19</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1100</td><td>1070</td><td>1102</td><td>1070</td><td>32</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>1072</td><td>1080</td><td>1084</td><td>1070</td><td>14</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>1078</td><td>1078</td><td>1082</td><td>1065</td><td>17</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>1079</td><td>1084</td><td>1093</td><td>1073</td><td>20</td><td class="amp-cell">19</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>1083</td><td>1063</td><td>1089</td><td>1061</td><td>28</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>1065</td><td>1064</td><td>1070</td><td>1057</td><td>13</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>1064</td><td>1051</td><td>1066</td><td>1049</td><td>17</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>1052</td><td>1034</td><td>1055</td><td>1030</td><td>25</td><td class="amp-cell">19</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>1035</td><td>1007</td><td>1035</td><td>1006</td><td>29</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>1009</td><td>1006</td><td>1022</td><td>1004</td><td>18</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>1005</td><td>1009</td><td>1015</td><td>1000</td><td>15</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>1009</td><td>1013</td><td>1020</td><td>988</td><td>32</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>1014</td><td>1007</td><td>1018</td><td>996</td><td>22</td><td class="amp-cell">24</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">23</td></tr>
</table>
</div>
<div class="section collapsed" id="sec-sa2611">
<h2 onclick="toggleSection('sec-sa2611')"><span class="arrow"></span> SA2611 纯碱</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1117</td><td>1118</td><td>1128</td><td>1112</td><td>16</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1119</td><td>1134</td><td>1139</td><td>1117</td><td>22</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1133</td><td>1132</td><td>1142</td><td>1127</td><td>15</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1130</td><td>1128</td><td>1145</td><td>1126</td><td>19</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1128</td><td>1094</td><td>1128</td><td>1092</td><td>36</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>1093</td><td>1105</td><td>1110</td><td>1093</td><td>17</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>1102</td><td>1103</td><td>1107</td><td>1090</td><td>17</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>1101</td><td>1113</td><td>1120</td><td>1100</td><td>20</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>1112</td><td>1089</td><td>1118</td><td>1086</td><td>32</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>1092</td><td>1092</td><td>1094</td><td>1085</td><td>9</td><td class="amp-cell">24</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>1091</td><td>1077</td><td>1095</td><td>1076</td><td>19</td><td class="amp-cell">19</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>1080</td><td>1057</td><td>1081</td><td>1053</td><td>28</td><td class="amp-cell">19</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>1060</td><td>1036</td><td>1060</td><td>1035</td><td>25</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>1038</td><td>1041</td><td>1055</td><td>1037</td><td>18</td><td class="amp-cell">23</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>1039</td><td>1042</td><td>1049</td><td>1034</td><td>15</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>1041</td><td>1041</td><td>1048</td><td>1017</td><td>31</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>1042</td><td>1037</td><td>1046</td><td>1026</td><td>20</td><td class="amp-cell">23</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">22</td></tr>
</table>
</div>
<div class="section collapsed" id="sec-sa2701">
<h2 onclick="toggleSection('sec-sa2701')"><span class="arrow"></span> SA2701 纯碱</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1157</td><td>1157</td><td>1164</td><td>1152</td><td>12</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1156</td><td>1171</td><td>1176</td><td>1155</td><td>21</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1169</td><td>1172</td><td>1180</td><td>1166</td><td>14</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1171</td><td>1166</td><td>1182</td><td>1165</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1164</td><td>1139</td><td>1167</td><td>1139</td><td>28</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>1142</td><td>1148</td><td>1151</td><td>1139</td><td>12</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>1148</td><td>1144</td><td>1149</td><td>1133</td><td>16</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>1146</td><td>1152</td><td>1161</td><td>1142</td><td>19</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>1149</td><td>1132</td><td>1158</td><td>1130</td><td>28</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>1135</td><td>1135</td><td>1137</td><td>1128</td><td>9</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>1136</td><td>1122</td><td>1138</td><td>1120</td><td>18</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>1123</td><td>1098</td><td>1125</td><td>1096</td><td>29</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>1100</td><td>1078</td><td>1100</td><td>1077</td><td>23</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>1079</td><td>1084</td><td>1098</td><td>1078</td><td>20</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>1084</td><td>1083</td><td>1090</td><td>1077</td><td>13</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>1083</td><td>1080</td><td>1087</td><td>1060</td><td>27</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>1079</td><td>1077</td><td>1085</td><td>1068</td><td>17</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">20</td></tr>
</table>
</div>
<div class="drawer-overlay" id="overlay" onclick="closeDrawer()"></div>
<div class="drawer" id="drawer">
<button class="close-btn" onclick="closeDrawer()">&times;</button>
<h3 id="drawer-title"></h3>
<p class="date-label" id="drawer-date"></p>
<table class="calc-table" id="drawer-table"></table>
<div class="result" id="drawer-result"></div>
</div>
<script>
var themeBtn = document.getElementById('themeToggle');
function setTheme(dark) {
if (dark) {
document.documentElement.setAttribute('data-theme', 'dark');
themeBtn.textContent = '☀️ 日间';
} else {
document.documentElement.removeAttribute('data-theme');
themeBtn.textContent = '🌙 暗夜';
}
try { localStorage.setItem('ft-theme', dark ? 'dark' : 'light'); } catch(e) {}
}
function toggleTheme() {
setTheme(document.documentElement.getAttribute('data-theme') !== 'dark');
}
(function() {
try {
var s = localStorage.getItem('ft-theme');
if (s === 'dark' || (!s && matchMedia('(prefers-color-scheme: dark)').matches)) setTheme(true);
} catch(e) {}
})();
function toggleSection(id) {
document.getElementById(id).classList.toggle('collapsed');
}
var activeRow = null;
function closeDrawer() {
document.getElementById('overlay').classList.remove('show');
document.getElementById('drawer').classList.remove('show');
if (activeRow) { activeRow.classList.remove('active'); activeRow = null; }
}
document.querySelectorAll('.amp-cell').forEach(function(cell) {
cell.addEventListener('click', function() {
var row = cell.parentElement;
var tbl = row.closest('table');
var rows = tbl.querySelectorAll('tr');
var h2 = tbl.closest('.section').querySelector('h2');
var product = h2.childNodes[h2.childNodes.length - 1].textContent.trim();
var ranges = [];
for (var i = 1; i < rows.length; i++) {
var cells = rows[i].querySelectorAll('td');
ranges.push({
date: cells[0].textContent.trim(),
wk: cells[1].textContent.trim(),
diff: parseInt(cells[6].textContent) || 0
});
}
var idx = Array.prototype.indexOf.call(rows, row) - 1;
var start = idx - 5;
if (start < 0) return;
var ampVal = cell.textContent.trim();
document.getElementById('drawer-title').textContent = product;
document.getElementById('drawer-date').textContent = '目标日期: ' + ranges[idx].date + ' ' + ranges[idx].wk + ' 振幅 ' + ampVal;
var html = '<tr><td>日期</td><td>最高−最低</td></tr>';
var sum = 0;
for (var j = start; j < idx; j++) {
html += '<tr><td>' + ranges[j].date + ' ' + ranges[j].wk + '</td><td>' + ranges[j].diff + '</td></tr>';
sum += ranges[j].diff;
}
document.getElementById('drawer-table').innerHTML = html;
document.getElementById('drawer-result').innerHTML = '合计 <b>' + sum + '</b> ÷ 5 = <b>' + (sum / 5).toFixed(1) + '</b><br>四舍五入 → <b>' + Math.round(sum / 5) + '</b>';
document.getElementById('overlay').classList.add('show');
document.getElementById('drawer').classList.add('show');
if (activeRow) activeRow.classList.remove('active');
row.classList.add('active');
activeRow = row;
});
});
</script>
</body>
</html>
+34 -216
View File
@@ -3,58 +3,38 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>振幅锁仓策略 — SA2611 & FG2611 & SA2701 & FG2701</title>
<title>振幅锁仓策略</title>
<style>
:root {
--bg: #fff; --fg: #1e293b; --sub: #64748b;
--th-bg: #f1f5f9; --th-fg: #334155; --th-border: #cbd5e1;
--td-border: #e2e8f0; --td-even: #f8fafc; --td-first: #334155;
--na: #94a3b8;
}
[data-theme="dark"] {
--bg: #0f172a; --fg: #e2e8f0; --sub: #94a3b8;
--th-bg: #1e293b; --th-fg: #cbd5e1; --th-border: #334155;
--td-border: #1e293b; --td-even: #1a2332; --td-first: #e2e8f0;
--na: #64748b;
}
body { font-family: -apple-system, 'Segoe UI', system-ui, sans-serif; padding: 24px; max-width: 1100px; margin: 0 auto; color: var(--fg); background: var(--bg); }
h1 { font-size: 1.4rem; margin-bottom: 8px; }
.sub { color: var(--sub); font-size: 0.85rem; margin-bottom: 8px; }
.formula { color: var(--sub); font-size: 0.8rem; margin-bottom: 24px; padding: 6px 12px; background: var(--th-bg); border-radius: 4px; display: inline-block; }
table { border-collapse: collapse; width: 100%; font-size: 0.9rem; }
th { background: var(--th-bg); color: var(--th-fg); font-weight: 600; padding: 8px 10px; border: 1px solid var(--th-border); text-align: center; white-space: nowrap; }
td { padding: 6px 10px; border: 1px solid var(--td-border); text-align: center; }
tr:nth-child(even) td { background: var(--td-even); }
td:first-child { font-weight: 500; color: var(--td-first); }
tr.active td { background: #dbeafe !important; }
[data-theme="dark"] tr.active td { background: #1e3a5f !important; }
td:nth-child(2) { font-size: 0.78rem; color: var(--sub); }
.na { color: var(--na); }
.toggle-btn { position: fixed; top: 16px; right: 24px; background: var(--th-bg); border: 1px solid var(--th-border); color: var(--th-fg); padding: 6px 14px; border-radius: 6px; cursor: pointer; font-size: 0.82rem; z-index: 10; }
.toggle-btn:hover { opacity: 0.8; }
.section { margin-bottom: 8px; }
.section h2 { font-size: 1.1rem; cursor: pointer; user-select: none; display: flex; align-items: center; gap: 8px; margin: 28px 0 10px; padding: 4px 0; }
.section h2 .arrow { display: inline-block; transition: transform .2s; font-size: 0.8rem; }
.section.collapsed h2 .arrow { transform: rotate(-90deg); }
.section.collapsed table { display: none; }
.drawer-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.35); z-index: 99; display: none; }
.drawer-overlay.show { display: block; }
.drawer { position: fixed; top: 0; right: 0; width: 340px; height: 100%; background: var(--bg); border-left: 1px solid var(--th-border); z-index: 100; padding: 24px; transform: translateX(100%); transition: transform .25s ease; overflow-y: auto; box-shadow: -4px 0 20px rgba(0,0,0,.15); }
.drawer.show { transform: translateX(0); }
.drawer h3 { font-size: 1rem; margin-bottom: 4px; }
.drawer .date-label { color: var(--sub); font-size: 0.82rem; margin-bottom: 16px; }
.drawer .calc-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; margin-bottom: 14px; }
.drawer .calc-table td { padding: 4px 8px; border: 1px solid var(--td-border); text-align: center; }
.drawer .calc-table tr:first-child td { background: var(--th-bg); font-weight: 600; color: var(--th-fg); }
.drawer .result { font-size: 0.85rem; line-height: 1.8; color: var(--fg); }
.drawer .result b { font-size: 1.1rem; }
.drawer .close-btn { position: absolute; top: 16px; right: 20px; background: none; border: none; font-size: 1.4rem; cursor: pointer; color: var(--sub); line-height: 1; }
.drawer .close-btn:hover { color: var(--fg); }
.amp-cell { cursor: pointer; text-decoration: underline; text-decoration-style: dotted; text-underline-offset: 3px; }
.amp-cell:hover { color: #3b82f6; }
body {
font-family: -apple-system, 'Segoe UI', system-ui, sans-serif; padding: 48px 24px;
max-width: 600px; margin: 0 auto; color: var(--fg); background: var(--bg);
text-align: center;
}
h1 { font-size: 1.6rem; margin-bottom: 8px; }
.sub { color: var(--sub); font-size: 0.85rem; margin-bottom: 40px; }
.card {
display: block; padding: 24px; margin: 16px 0; border-radius: 12px;
text-decoration: none; font-size: 1.1rem; font-weight: 600;
transition: transform .15s, box-shadow .15s;
border: 1px solid var(--sub);
}
.card:hover { transform: translateY(-2px); }
.card.sa { color: #2563eb; border-color: #bfdbfe; background: #eff6ff; }
.card.fg { color: #059669; border-color: #a7f3d0; background: #ecfdf5; }
[data-theme="dark"] .card.sa { color: #93c5fd; border-color: #1e3a5f; background: #0f1a2e; }
[data-theme="dark"] .card.fg { color: #6ee7b7; border-color: #064e3b; background: #0a1f17; }
.card .desc { font-size: 0.8rem; font-weight: 400; color: var(--sub); margin-top: 4px; }
.toggle-btn {
position: fixed; top: 16px; right: 24px; background: var(--bg);
border: 1px solid var(--sub); color: var(--fg);
padding: 6px 14px; border-radius: 6px; cursor: pointer; font-size: 0.82rem; z-index: 10;
}
</style>
</head>
<body>
@@ -62,120 +42,19 @@
<button class="toggle-btn" id="themeToggle">🌙 暗夜</button>
<h1>振幅锁仓策略</h1>
<p class="sub">SA2611 (纯碱) &nbsp;|&nbsp; FG2611 (玻璃) &nbsp;|&nbsp; SA2701 (纯碱) &nbsp;|&nbsp; FG2701 (玻璃) &nbsp;|&nbsp; 2026年7月</p>
<p class="formula">振幅算法:近 5 日均振幅 = 过去 5 个交易日 (最高 − 最低) 的均值,结果四舍五入取整</p>
<p class="sub">2026年7月 &nbsp;·&nbsp; 郑商所</p>
<div class="section collapsed" id="sec-sa">
<h2 onclick="toggleSection('sec-sa')"><span class="arrow"></span> SA2611 纯碱</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1117</td><td>1118</td><td>1128</td><td>1112</td><td>16</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1119</td><td>1134</td><td>1139</td><td>1117</td><td>22</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1133</td><td>1132</td><td>1142</td><td>1127</td><td>15</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1130</td><td>1128</td><td>1145</td><td>1126</td><td>19</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1128</td><td>1094</td><td>1128</td><td>1092</td><td>36</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>1093</td><td>1105</td><td>1110</td><td>1093</td><td>17</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>1102</td><td>1103</td><td>1107</td><td>1090</td><td>17</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>1101</td><td>1113</td><td>1120</td><td>1100</td><td>20</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>1112</td><td>1089</td><td>1118</td><td>1086</td><td>32</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>1092</td><td>1092</td><td>1094</td><td>1085</td><td>9</td><td class="amp-cell">24</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>1091</td><td>1077</td><td>1095</td><td>1076</td><td>19</td><td class="amp-cell">19</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>1080</td><td>1057</td><td>1081</td><td>1053</td><td>28</td><td class="amp-cell">19</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>1060</td><td>1036</td><td>1060</td><td>1035</td><td>25</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>1038</td><td>1041</td><td>1055</td><td>1037</td><td>18</td><td class="amp-cell">23</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>1039</td><td>1042</td><td>1049</td><td>1034</td><td>15</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>1041</td><td>1041</td><td>1048</td><td>1017</td><td>31</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>1042</td><td>1037</td><td>1046</td><td>1026</td><td>20</td><td class="amp-cell">23</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">22</td></tr>
</table>
</div>
<a class="card sa" href="index-SA.html">
纯碱 SA
<div class="desc">SA2609 · SA2611 · SA2701</div>
</a>
<div class="section collapsed" id="sec-fg">
<h2 onclick="toggleSection('sec-fg')"><span class="arrow"></span> FG2611 玻璃</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1011</td><td>1001</td><td>1011</td><td>994</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1001</td><td>1002</td><td>1008</td><td>994</td><td>14</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1002</td><td>1010</td><td>1017</td><td>999</td><td>18</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1013</td><td>1003</td><td>1019</td><td>1002</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1003</td><td>984</td><td>1003</td><td>983</td><td>20</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>984</td><td>993</td><td>996</td><td>981</td><td>15</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>994</td><td>987</td><td>994</td><td>981</td><td>13</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>986</td><td>996</td><td>1004</td><td>983</td><td>21</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>996</td><td>980</td><td>1001</td><td>980</td><td>21</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>982</td><td>983</td><td>986</td><td>974</td><td>12</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>982</td><td>979</td><td>988</td><td>975</td><td>13</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>979</td><td>960</td><td>982</td><td>957</td><td>25</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>962</td><td>932</td><td>962</td><td>931</td><td>31</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>934</td><td>926</td><td>939</td><td>924</td><td>15</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>929</td><td>934</td><td>941</td><td>926</td><td>15</td><td class="amp-cell">19</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>936</td><td>939</td><td>945</td><td>929</td><td>16</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>938</td><td>931</td><td>941</td><td>925</td><td>16</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">19</td></tr>
</table>
</div>
<div class="section collapsed" id="sec-sa2701">
<h2 onclick="toggleSection('sec-sa2701')"><span class="arrow"></span> SA2701 纯碱</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1157</td><td>1157</td><td>1164</td><td>1152</td><td>12</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1156</td><td>1171</td><td>1176</td><td>1155</td><td>21</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1169</td><td>1172</td><td>1180</td><td>1166</td><td>14</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1171</td><td>1166</td><td>1182</td><td>1165</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1164</td><td>1139</td><td>1167</td><td>1139</td><td>28</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>1142</td><td>1148</td><td>1151</td><td>1139</td><td>12</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>1148</td><td>1144</td><td>1149</td><td>1133</td><td>16</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>1146</td><td>1152</td><td>1161</td><td>1142</td><td>19</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>1149</td><td>1132</td><td>1158</td><td>1130</td><td>28</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>1135</td><td>1135</td><td>1137</td><td>1128</td><td>9</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>1136</td><td>1122</td><td>1138</td><td>1120</td><td>18</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>1123</td><td>1098</td><td>1125</td><td>1096</td><td>29</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>1100</td><td>1078</td><td>1100</td><td>1077</td><td>23</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>1079</td><td>1084</td><td>1098</td><td>1078</td><td>20</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>1084</td><td>1083</td><td>1090</td><td>1077</td><td>13</td><td class="amp-cell">20</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>1083</td><td>1080</td><td>1087</td><td>1060</td><td>27</td><td class="amp-cell">21</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>1079</td><td>1077</td><td>1085</td><td>1068</td><td>17</td><td class="amp-cell">22</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">20</td></tr>
</table>
</div>
<div class="section collapsed" id="sec-fg2701">
<h2 onclick="toggleSection('sec-fg2701')"><span class="arrow"></span> FG2701 玻璃</h2>
<table>
<tr><th>日期</th><th>星期</th><th>开盘</th><th>收盘</th><th>最高</th><th>最低</th><th>最高最低差价</th><th>振幅</th></tr>
<tr><td>2026/7/1</td><td>周三</td><td>1059</td><td>1054</td><td>1062</td><td>1050</td><td>12</td><td class="na">-</td></tr>
<tr><td>2026/7/2</td><td>周四</td><td>1051</td><td>1055</td><td>1061</td><td>1050</td><td>11</td><td class="na">-</td></tr>
<tr><td>2026/7/3</td><td>周五</td><td>1053</td><td>1062</td><td>1070</td><td>1053</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/6</td><td>周一</td><td>1065</td><td>1058</td><td>1071</td><td>1056</td><td>15</td><td class="na">-</td></tr>
<tr><td>2026/7/7</td><td>周二</td><td>1056</td><td>1042</td><td>1058</td><td>1041</td><td>17</td><td class="na">-</td></tr>
<tr><td>2026/7/8</td><td>周三</td><td>1043</td><td>1048</td><td>1051</td><td>1036</td><td>15</td><td class="amp-cell">14</td></tr>
<tr><td>2026/7/9</td><td>周四</td><td>1048</td><td>1043</td><td>1049</td><td>1037</td><td>12</td><td class="amp-cell">15</td></tr>
<tr><td>2026/7/10</td><td>周五</td><td>1041</td><td>1048</td><td>1056</td><td>1039</td><td>17</td><td class="amp-cell">15</td></tr>
<tr><td>2026/7/13</td><td>周一</td><td>1049</td><td>1035</td><td>1050</td><td>1034</td><td>16</td><td class="amp-cell">15</td></tr>
<tr><td>2026/7/14</td><td>周二</td><td>1035</td><td>1035</td><td>1041</td><td>1031</td><td>10</td><td class="amp-cell">15</td></tr>
<tr><td>2026/7/15</td><td>周三</td><td>1035</td><td>1030</td><td>1038</td><td>1028</td><td>10</td><td class="amp-cell">14</td></tr>
<tr><td>2026/7/16</td><td>周四</td><td>1031</td><td>1016</td><td>1033</td><td>1014</td><td>19</td><td class="amp-cell">13</td></tr>
<tr><td>2026/7/17</td><td>周五</td><td>1017</td><td>989</td><td>1017</td><td>988</td><td>29</td><td class="amp-cell">14</td></tr>
<tr><td>2026/7/20</td><td>周一</td><td>989</td><td>985</td><td>996</td><td>983</td><td>13</td><td class="amp-cell">17</td></tr>
<tr><td>2026/7/21</td><td>周二</td><td>987</td><td>987</td><td>992</td><td>981</td><td>11</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/22</td><td>周三</td><td>991</td><td>987</td><td>993</td><td>977</td><td>16</td><td class="amp-cell">16</td></tr>
<tr><td>2026/7/23</td><td>周四</td><td>989</td><td>979</td><td>990</td><td>974</td><td>16</td><td class="amp-cell">18</td></tr>
<tr><td>2026/7/24</td><td>周五</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td class="na">-</td><td>0</td><td class="amp-cell">17</td></tr>
</table>
</div>
<div class="drawer-overlay" id="overlay" onclick="closeDrawer()"></div>
<div class="drawer" id="drawer">
<button class="close-btn" onclick="closeDrawer()">&times;</button>
<h3 id="drawer-title"></h3>
<p class="date-label" id="drawer-date"></p>
<table class="calc-table" id="drawer-table"></table>
<div class="result" id="drawer-result"></div>
</div>
<a class="card fg" href="index-FG.html">
玻璃 FG
<div class="desc">FG2609 · FG2611 · FG2701</div>
</a>
<script>
// ── 暗夜模式 ──
var themeBtn = document.getElementById('themeToggle');
function setTheme(dark) {
if (dark) {
@@ -196,67 +75,6 @@ function toggleTheme() {
if (s === 'dark' || (!s && matchMedia('(prefers-color-scheme: dark)').matches)) setTheme(true);
} catch(e) {}
})();
// ── 表格折叠 ──
function toggleSection(id) {
document.getElementById(id).classList.toggle('collapsed');
}
// ── 抽屉 ──
var activeRow = null;
function closeDrawer() {
document.getElementById('overlay').classList.remove('show');
document.getElementById('drawer').classList.remove('show');
if (activeRow) { activeRow.classList.remove('active'); activeRow = null; }
}
// ── 振幅点击 → 抽屉 ──
document.querySelectorAll('.amp-cell').forEach(function(cell) {
cell.addEventListener('click', function() {
var row = cell.parentElement;
var tbl = row.closest('table');
var rows = tbl.querySelectorAll('tr');
var h2 = tbl.closest('.section').querySelector('h2');
var product = h2.childNodes[h2.childNodes.length - 1].textContent.trim();
// 收集所有行的差价
var ranges = [];
for (var i = 1; i < rows.length; i++) {
var cells = rows[i].querySelectorAll('td');
ranges.push({
date: cells[0].textContent.trim(),
wk: cells[1].textContent.trim(),
diff: parseInt(cells[6].textContent) || 0
});
}
// 找到当前行索引
var idx = Array.prototype.indexOf.call(rows, row) - 1;
var start = idx - 5;
if (start < 0) return;
var ampVal = cell.textContent.trim();
document.getElementById('drawer-title').textContent = product;
document.getElementById('drawer-date').textContent = '目标日期: ' + ranges[idx].date + ' ' + ranges[idx].wk + ' 振幅 ' + ampVal;
var html = '<tr><td>日期</td><td>最高−最低</td></tr>';
var sum = 0;
for (var j = start; j < idx; j++) {
html += '<tr><td>' + ranges[j].date + ' ' + ranges[j].wk + '</td><td>' + ranges[j].diff + '</td></tr>';
sum += ranges[j].diff;
}
document.getElementById('drawer-table').innerHTML = html;
document.getElementById('drawer-result').innerHTML = '合计 <b>' + sum + '</b> ÷ 5 = <b>' + (sum / 5).toFixed(1) + '</b><br>四舍五入 → <b>' + Math.round(sum / 5) + '</b>';
document.getElementById('overlay').classList.add('show');
document.getElementById('drawer').classList.add('show');
// 行高亮
if (activeRow) activeRow.classList.remove('active');
row.classList.add('active');
activeRow = row;
});
});
</script>
</body>
</html>