|
|
|
@ -0,0 +1,459 @@
|
|
|
|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
|
|
|
<html lang="zh-CN">
|
|
|
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
|
|
|
|
<title>期货智析</title>
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
|
|
|
:root{--bg-page:#F5F5F7;--bg-card:#fff;--bg-inset:#F5F5F7;--text-primary:#1D1D1F;--text-secondary:#6E6E73;--text-tertiary:#86868B;--border-light:rgba(0,0,0,0.05);--color-up:#FF3B30;--color-down:#34C759;--color-neutral:#FF9F0A;--color-brand:#007AFF;--color-ai:#AF52DE;--shadow-sm:0 1px 2px rgba(0,0,0,0.04);--shadow-md:0 4px 12px rgba(0,0,0,0.06);--shadow-lg:0 8px 24px rgba(0,0,0,0.1);--radius-card:20px;--radius-pill:100px}
|
|
|
|
|
|
|
|
*{box-sizing:border-box;margin:0;padding:0}
|
|
|
|
|
|
|
|
body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Helvetica Neue",sans-serif;background:var(--bg-page);color:var(--text-primary);-webkit-font-smoothing:antialiased;padding-bottom:40px}
|
|
|
|
|
|
|
|
a{text-decoration:none;color:var(--color-brand)}
|
|
|
|
|
|
|
|
.header{background:rgba(255,255,255,0.8);backdrop-filter:blur(20px);border-bottom:1px solid var(--border-light);padding:0 40px;height:64px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}
|
|
|
|
|
|
|
|
.logo{font-size:18px;font-weight:700}
|
|
|
|
|
|
|
|
.nav-items{display:flex;gap:20px;font-size:14px;font-weight:500}
|
|
|
|
|
|
|
|
.nav-item{color:var(--text-secondary);cursor:pointer;padding:8px 0;border-bottom:2px solid transparent;transition:all .2s}
|
|
|
|
|
|
|
|
.nav-item:hover{color:var(--text-primary)}
|
|
|
|
|
|
|
|
.nav-item.active{color:var(--text-primary);border-bottom-color:var(--color-brand)}
|
|
|
|
|
|
|
|
.live-badge{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--color-down);background:rgba(52,199,89,0.1);padding:4px 10px;border-radius:var(--radius-pill)}
|
|
|
|
|
|
|
|
.dot{width:6px;height:6px;background:var(--color-down);border-radius:50%;animation:pulse 2s infinite}
|
|
|
|
|
|
|
|
@keyframes pulse{0%{opacity:1}50%{opacity:.5}100%{opacity:1}}
|
|
|
|
|
|
|
|
.container{max-width:1200px;margin:0 auto;padding:32px 24px}
|
|
|
|
|
|
|
|
.view{display:none}.view.active{display:block}
|
|
|
|
|
|
|
|
.toolbar{display:flex;gap:16px;margin-bottom:24px}
|
|
|
|
|
|
|
|
.search-box{flex:1;background:var(--bg-card);border:1px solid var(--border-light);border-radius:12px;padding:0 16px;height:44px;font-size:14px;color:var(--text-secondary);box-shadow:var(--shadow-sm)}
|
|
|
|
|
|
|
|
.pills{display:flex;gap:8px}
|
|
|
|
|
|
|
|
.pill{padding:6px 14px;border-radius:var(--radius-pill);font-size:13px;font-weight:500;background:#E8E8ED;color:var(--text-secondary);cursor:pointer}
|
|
|
|
|
|
|
|
.pill.active{background:var(--text-primary);color:#fff}
|
|
|
|
|
|
|
|
.card{background:var(--bg-card);border-radius:var(--radius-card);padding:24px;box-shadow:var(--shadow-md);cursor:pointer}
|
|
|
|
|
|
|
|
.card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
|
|
|
|
|
|
|
|
.stats-row{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:32px}
|
|
|
|
|
|
|
|
.stat-card{background:var(--bg-card);border-radius:16px;padding:16px;display:flex;gap:12px;align-items:center;box-shadow:var(--shadow-sm)}
|
|
|
|
|
|
|
|
.stat-icon{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:bold}
|
|
|
|
|
|
|
|
.stat-icon.blue{background:rgba(0,122,255,0.1);color:var(--color-brand)}
|
|
|
|
|
|
|
|
.stat-icon.green{background:rgba(52,199,89,0.1);color:var(--color-down)}
|
|
|
|
|
|
|
|
.stat-icon.red{background:rgba(255,59,48,0.1);color:var(--color-up)}
|
|
|
|
|
|
|
|
.stat-icon.orange{background:rgba(255,159,10,0.1);color:var(--color-neutral)}
|
|
|
|
|
|
|
|
.stat-val{font-size:16px;font-weight:700}
|
|
|
|
|
|
|
|
.stat-label{font-size:11px;color:var(--text-tertiary)}
|
|
|
|
|
|
|
|
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:20px}
|
|
|
|
|
|
|
|
.card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px}
|
|
|
|
|
|
|
|
.card-left{display:flex;gap:12px;align-items:flex-start}
|
|
|
|
|
|
|
|
.code-box{width:36px;height:36px;background:#F5F5F7;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:var(--text-tertiary)}
|
|
|
|
|
|
|
|
.info-group{display:flex;flex-direction:column}
|
|
|
|
|
|
|
|
.name-row{display:flex;align-items:center;gap:6px;font-weight:600;font-size:15px}
|
|
|
|
|
|
|
|
.contract-code{font-size:12px;color:var(--text-tertiary);margin-top:2px}
|
|
|
|
|
|
|
|
.price-area{text-align:right}
|
|
|
|
|
|
|
|
.price{font-size:26px;font-weight:700;line-height:1}
|
|
|
|
|
|
|
|
.price.up{color:var(--color-up)}.price.down{color:var(--color-down)}
|
|
|
|
|
|
|
|
.change{font-size:13px;font-weight:600;margin-top:4px}
|
|
|
|
|
|
|
|
.change.up{color:var(--color-up)}.change.down{color:var(--color-down)}
|
|
|
|
|
|
|
|
.action-pill{display:inline-block;padding:4px 12px;border-radius:var(--radius-pill);font-size:12px;font-weight:600;margin-bottom:16px}
|
|
|
|
|
|
|
|
.action-pill.do-more{background:rgba(52,199,89,0.1);color:var(--color-down)}
|
|
|
|
|
|
|
|
.action-pill.watch{background:rgba(255,159,10,0.1);color:var(--color-neutral)}
|
|
|
|
|
|
|
|
.metrics{display:flex;gap:24px;margin-bottom:16px}
|
|
|
|
|
|
|
|
.metric{flex:1}
|
|
|
|
|
|
|
|
.metric-label{font-size:11px;color:var(--text-tertiary);margin-bottom:4px}
|
|
|
|
|
|
|
|
.bar-bg{height:4px;background:#F5F5F7;border-radius:2px;margin-top:6px;overflow:hidden}
|
|
|
|
|
|
|
|
.bar-fill{height:100%;border-radius:2px}
|
|
|
|
|
|
|
|
.timeframes{display:flex;gap:8px;margin-bottom:16px}
|
|
|
|
|
|
|
|
.tf{padding:4px 10px;border-radius:8px;font-size:11px;color:var(--text-tertiary);background:#F5F5F7;cursor:pointer}
|
|
|
|
|
|
|
|
.tf.active{background:#E8F2FF;color:var(--color-brand);font-weight:500}
|
|
|
|
|
|
|
|
.card-footer{display:flex;justify-content:space-between;align-items:center;border-top:1px solid #F5F5F7;padding-top:12px;font-size:12px}
|
|
|
|
|
|
|
|
.support-resist{color:var(--text-tertiary)}
|
|
|
|
|
|
|
|
.support-resist span{margin-right:8px}
|
|
|
|
|
|
|
|
.support-resist .red{color:var(--color-up)}.support-resist .green{color:var(--color-down)}
|
|
|
|
|
|
|
|
.fav-icon{font-size:15px;color:#D1D1D6;cursor:pointer;display:inline-flex;align-items:center}
|
|
|
|
|
|
|
|
.fav-icon.active{color:#FF9F0A}
|
|
|
|
|
|
|
|
.event-banner{display:flex;gap:16px;overflow-x:auto;padding-bottom:8px;margin-bottom:24px}
|
|
|
|
|
|
|
|
.event-card{flex:1;min-width:240px;background:var(--bg-card);border-radius:16px;padding:16px;box-shadow:var(--shadow-sm);border:1px solid var(--border-light)}
|
|
|
|
|
|
|
|
.event-card.bearish{border-left:3px solid var(--color-up)}
|
|
|
|
|
|
|
|
.event-card.bullish{border-left:3px solid var(--color-down)}
|
|
|
|
|
|
|
|
.event-header{display:flex;justify-content:space-between;margin-bottom:8px;align-items:center}
|
|
|
|
|
|
|
|
.event-tag{font-size:10px;font-weight:700;padding:2px 6px;border-radius:4px}
|
|
|
|
|
|
|
|
.event-tag.urgent{background:#FFF0F0;color:var(--color-up)}
|
|
|
|
|
|
|
|
.event-tag.policy{background:#E8F2FF;color:var(--color-brand)}
|
|
|
|
|
|
|
|
.event-timer{font-size:11px;color:var(--text-tertiary);font-weight:500}
|
|
|
|
|
|
|
|
.event-title{font-size:14px;font-weight:600;margin-bottom:6px}
|
|
|
|
|
|
|
|
.event-impact{display:flex;gap:8px;align-items:center;font-size:12px;margin-bottom:8px}
|
|
|
|
|
|
|
|
.impact-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}
|
|
|
|
|
|
|
|
.impact-badge.bull{background:rgba(255,59,48,0.1);color:var(--color-up)}
|
|
|
|
|
|
|
|
.impact-badge.bear{background:rgba(52,199,89,0.1);color:var(--color-down)}
|
|
|
|
|
|
|
|
.mini-contracts{display:flex;gap:4px}
|
|
|
|
|
|
|
|
.mini-tag{font-size:10px;background:#F5F5F7;padding:2px 6px;border-radius:4px;color:var(--text-secondary)}
|
|
|
|
|
|
|
|
.overview-layout{display:grid;grid-template-columns:2fr 1fr;gap:20px}
|
|
|
|
|
|
|
|
.section-header{font-size:13px;font-weight:600;color:var(--text-secondary);margin-bottom:12px}
|
|
|
|
|
|
|
|
.heatmap-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:20px}
|
|
|
|
|
|
|
|
.heat-cell{padding:12px;border-radius:12px;display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:80px}
|
|
|
|
|
|
|
|
.heat-cell .name{font-weight:600;margin-bottom:4px}
|
|
|
|
|
|
|
|
.heat-cell .val{font-size:12px;font-weight:700}
|
|
|
|
|
|
|
|
.heat-up-3{background:#FF3B30;color:#fff}
|
|
|
|
|
|
|
|
.heat-up-1{background:rgba(255,59,48,0.15);color:var(--color-up)}
|
|
|
|
|
|
|
|
.heat-down-2{background:rgba(52,199,89,0.3);color:#10803D}
|
|
|
|
|
|
|
|
.heat-flat{background:#E8E8ED;color:var(--text-secondary)}
|
|
|
|
|
|
|
|
.side-panel{display:flex;flex-direction:column;gap:16px}
|
|
|
|
|
|
|
|
.panel-box{background:var(--bg-card);border-radius:16px;padding:16px;box-shadow:var(--shadow-sm)}
|
|
|
|
|
|
|
|
.panel-box-title{font-size:13px;font-weight:600;margin-bottom:12px}
|
|
|
|
|
|
|
|
.flow-row{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:12px}
|
|
|
|
|
|
|
|
.flow-code{width:30px;font-weight:600}
|
|
|
|
|
|
|
|
.flow-bar-bg{flex:1;height:6px;background:#F5F5F7;border-radius:3px;overflow:hidden}
|
|
|
|
|
|
|
|
.flow-bar{height:100%;border-radius:3px}
|
|
|
|
|
|
|
|
.flow-val{width:50px;text-align:right;font-weight:600}
|
|
|
|
|
|
|
|
.calendar-item{display:flex;gap:12px;margin-bottom:12px;align-items:flex-start}
|
|
|
|
|
|
|
|
.cal-time{font-size:11px;color:var(--text-tertiary);margin-top:2px}
|
|
|
|
|
|
|
|
.cal-event{font-size:13px;font-weight:500}
|
|
|
|
|
|
|
|
.cal-stars{color:var(--color-neutral);font-size:10px}
|
|
|
|
|
|
|
|
.alerts-layout{display:grid;grid-template-columns:300px 1fr 280px;gap:20px}
|
|
|
|
|
|
|
|
.rule-group{background:var(--bg-card);border-radius:16px;padding:16px;box-shadow:var(--shadow-sm)}
|
|
|
|
|
|
|
|
.rule-group-title{font-size:12px;font-weight:600;color:var(--text-tertiary);margin-bottom:12px}
|
|
|
|
|
|
|
|
.rule-item{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;font-size:13px;cursor:pointer}
|
|
|
|
|
|
|
|
.toggle{width:36px;height:20px;background:#E8E8ED;border-radius:10px;position:relative;cursor:pointer}
|
|
|
|
|
|
|
|
.toggle.on{background:var(--color-brand)}
|
|
|
|
|
|
|
|
.toggle::after{content:;position:absolute;top:2px;left:2px;width:16px;height:16px;background:#fff;border-radius:50%;transition:transform .2s}
|
|
|
|
|
|
|
|
.toggle.on::after{transform:translateX(16px)}
|
|
|
|
|
|
|
|
.alert-feed{display:flex;flex-direction:column;gap:12px}
|
|
|
|
|
|
|
|
.alert-filters{display:flex;gap:8px;margin-bottom:12px}
|
|
|
|
|
|
|
|
.alert-card{background:var(--bg-card);border-radius:16px;padding:16px;box-shadow:var(--shadow-sm)}
|
|
|
|
|
|
|
|
.alert-card.urgent{border-left:3px solid var(--color-up)}
|
|
|
|
|
|
|
|
.alert-time{font-size:11px;color:var(--text-tertiary);margin-bottom:6px}
|
|
|
|
|
|
|
|
.alert-title{font-size:14px;font-weight:600;margin-bottom:4px}
|
|
|
|
|
|
|
|
.alert-desc{font-size:12px;color:var(--text-secondary);line-height:1.4;margin-bottom:8px}
|
|
|
|
|
|
|
|
.alert-actions{display:flex;gap:12px;font-size:12px;font-weight:500}
|
|
|
|
|
|
|
|
.alert-actions span{color:var(--color-brand);cursor:pointer}
|
|
|
|
|
|
|
|
.ai-scan-card{background:linear-gradient(135deg,#AF52DE,#8E44AD);border-radius:16px;padding:16px;color:#fff;box-shadow:var(--shadow-md);margin-bottom:16px}
|
|
|
|
|
|
|
|
.ai-scan-title{font-size:13px;font-weight:600;margin-bottom:8px}
|
|
|
|
|
|
|
|
.ai-scan-item{background:rgba(255,255,255,0.15);border-radius:8px;padding:8px;margin-bottom:8px;font-size:11px}
|
|
|
|
|
|
|
|
.summary-header{background:var(--bg-card);border-radius:20px;padding:20px 24px;box-shadow:var(--shadow-sm);margin-bottom:24px;display:flex;justify-content:space-between;align-items:center}
|
|
|
|
|
|
|
|
.summary-header h2{font-size:20px;font-weight:700}
|
|
|
|
|
|
|
|
.summary-header .date{font-size:14px;color:var(--text-secondary);background:var(--bg-inset);padding:6px 14px;border-radius:8px;font-weight:500}
|
|
|
|
|
|
|
|
.summary-layout{display:grid;grid-template-columns:1fr 360px;gap:20px}
|
|
|
|
|
|
|
|
.summary-left{display:grid;grid-template-columns:1fr 1fr;gap:16px}
|
|
|
|
|
|
|
|
.rank-section{background:var(--bg-card);border-radius:16px;padding:16px;box-shadow:var(--shadow-sm)}
|
|
|
|
|
|
|
|
.rank-title{font-size:13px;font-weight:600;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border-light)}
|
|
|
|
|
|
|
|
.rank-row{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px dashed rgba(0,0,0,0.04);cursor:pointer;transition:background .15s}.rank-row:hover{background:var(--bg-inset);border-radius:6px}
|
|
|
|
|
|
|
|
.rank-row:last-child{border-bottom:none}
|
|
|
|
|
|
|
|
.rank-rank{width:20px;font-size:12px;font-weight:700;color:var(--text-tertiary);text-align:center}
|
|
|
|
|
|
|
|
.rank-rank.top{color:var(--color-brand)}
|
|
|
|
|
|
|
|
.rank-name{flex:1;margin-left:8px;font-size:13px;font-weight:500}
|
|
|
|
|
|
|
|
.rank-val{font-size:13px;font-weight:600}
|
|
|
|
|
|
|
|
.rank-val.up{color:var(--color-up)}.rank-val.down{color:var(--color-down)}
|
|
|
|
|
|
|
|
.plan-header{font-size:15px;font-weight:700;margin-bottom:16px;color:var(--color-ai)}
|
|
|
|
|
|
|
|
.plan-card{background:var(--bg-card);border-radius:16px;padding:20px;box-shadow:var(--shadow-md);margin-bottom:16px;border:1px solid var(--border-light);position:relative}
|
|
|
|
|
|
|
|
.plan-card::before{content:"AI";position:absolute;top:-9px;left:16px;background:var(--color-ai);color:#fff;font-size:10px;padding:2px 8px;border-radius:8px;font-weight:600}
|
|
|
|
|
|
|
|
.plan-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;margin-top:2px}
|
|
|
|
|
|
|
|
.plan-code{font-size:16px;font-weight:700}
|
|
|
|
|
|
|
|
.plan-badge{font-size:10px;padding:4px 12px;border-radius:var(--radius-pill);font-weight:700}
|
|
|
|
|
|
|
|
.plan-badge.long{background:rgba(52,199,89,0.15);color:var(--color-down)}
|
|
|
|
|
|
|
|
.plan-badge.short{background:rgba(255,59,48,0.15);color:var(--color-up)}
|
|
|
|
|
|
|
|
.plan-ai{background:#F8F5FF;border-radius:12px;padding:12px;margin-bottom:12px;font-size:12px;line-height:1.5;color:var(--text-secondary)}
|
|
|
|
|
|
|
|
.plan-ai strong{color:var(--color-ai)}
|
|
|
|
|
|
|
|
.plan-targets{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:12px}
|
|
|
|
|
|
|
|
.plan-target{background:var(--bg-inset);border-radius:10px;padding:10px 8px;text-align:center}
|
|
|
|
|
|
|
|
.plan-target-label{font-size:10px;color:var(--text-tertiary);margin-bottom:4px}
|
|
|
|
|
|
|
|
.plan-target-val{font-size:14px;font-weight:700}
|
|
|
|
|
|
|
|
.plan-target-val.green{color:var(--color-down)}.plan-target-val.red{color:var(--color-up)}.plan-target-val.neutral{color:var(--text-primary)}
|
|
|
|
|
|
|
|
.plan-actions{display:flex;gap:8px}
|
|
|
|
|
|
|
|
.plan-btn{flex:1;padding:8px 0;border:none;border-radius:10px;font-size:12px;font-weight:600;cursor:pointer}
|
|
|
|
|
|
|
|
.plan-btn.primary{background:var(--color-brand);color:#fff}
|
|
|
|
|
|
|
|
.plan-btn.secondary{background:var(--bg-inset);color:var(--text-secondary)}
|
|
|
|
|
|
|
|
.plan-note{font-size:10px;color:var(--text-tertiary);text-align:center;margin-top:8px}.plan-list{display:flex;flex-direction:column;gap:6px}.plan-list-item{background:var(--bg-card);border-radius:12px;padding:12px 16px;border:1px solid var(--border-light);cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:all .2s}.plan-list-item:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.plan-list-item.expanded{border-color:var(--color-ai);box-shadow:var(--shadow-md)}.plan-list-left{display:flex;align-items:center;gap:10px}.plan-list-code{font-size:14px;font-weight:700}.plan-list-score{font-size:12px;font-weight:600;color:var(--color-ai);background:#F8F5FF;padding:2px 8px;border-radius:6px}.plan-list-arrow{font-size:12px;color:var(--text-tertiary);transition:transform .2s}.plan-list-item.expanded .plan-list-arrow{transform:rotate(180deg)}.plan-detail{max-height:0;overflow:hidden;transition:max-height .35s ease}.plan-detail.open{max-height:600px}
|
|
|
|
|
|
|
|
.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.4);backdrop-filter:blur(8px);z-index:1000;display:none;align-items:center;justify-content:center}
|
|
|
|
|
|
|
|
.modal-overlay.show{display:flex}
|
|
|
|
|
|
|
|
.modal{background:var(--bg-card);display:flex;flex-direction:column;border-radius:24px;width:92%;max-width:860px;max-height:85vh;overflow-y:auto;box-shadow:var(--shadow-lg);animation:modalIn .25s ease}
|
|
|
|
|
|
|
|
@keyframes modalIn{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
|
|
|
|
|
|
|
|
.modal-header{display:flex;justify-content:space-between;align-items:center;padding:24px 28px 20px;border-bottom:1px solid var(--border-light)}
|
|
|
|
|
|
|
|
.modal-title{font-size:20px;font-weight:700}
|
|
|
|
|
|
|
|
.modal-close{width:32px;height:32px;border-radius:50%;border:none;background:var(--bg-inset);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center}
|
|
|
|
|
|
|
|
.modal-close:hover{background:#E8E8ED}
|
|
|
|
|
|
|
|
.modal-body{padding:16px 28px 24px}
|
|
|
|
|
|
|
|
.modal-section{margin-bottom:16px}
|
|
|
|
|
|
|
|
.modal-section-title{font-size:12px;font-weight:600;color:var(--text-tertiary);margin-bottom:8px}
|
|
|
|
|
|
|
|
.modal-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
|
|
|
|
|
|
|
.modal-stat{background:var(--bg-inset);border-radius:12px;padding:12px;text-align:center}
|
|
|
|
|
|
|
|
.modal-stat-label{font-size:11px;color:var(--text-tertiary);margin-bottom:4px}
|
|
|
|
|
|
|
|
.modal-stat-val{font-size:18px;font-weight:700}
|
|
|
|
|
|
|
|
.modal-stat-val.up{color:var(--color-up)}.modal-stat-val.down{color:var(--color-down)}
|
|
|
|
|
|
|
|
.modal-ai-box{background:#F8F5FF;border-radius:12px;padding:14px;font-size:13px;line-height:1.6}
|
|
|
|
|
|
|
|
.modal-ai-box strong{color:var(--color-ai)}
|
|
|
|
|
|
|
|
.modal-footer{padding:16px 24px 20px;border-top:1px solid var(--border-light);display:flex;gap:8px}
|
|
|
|
|
|
|
|
.kline-chart{width:100%;height:480px;background:var(--bg-inset);border-radius:12px;margin-bottom:12px}
|
|
|
|
|
|
|
|
.modal-section-title-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
|
|
|
|
|
|
|
|
</style></head><body>
|
|
|
|
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
|
|
|
|
|
|
|
|
<header class="header">
|
|
|
|
|
|
|
|
<div class="logo">期货智析</div>
|
|
|
|
|
|
|
|
<div class="nav-items">
|
|
|
|
|
|
|
|
<div class="nav-item active" onclick="showView('list-view',this)">品种分析</div>
|
|
|
|
|
|
|
|
<div class="nav-item" onclick="showView('market-view',this)">市场概览</div>
|
|
|
|
|
|
|
|
<div class="nav-item" onclick="showView('alerts-view',this)">风险预警</div>
|
|
|
|
|
|
|
|
<div class="nav-item" onclick="showView('summary-view',this)">复盘计划</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="live-badge"><div class="dot"></div>LIVE</div>
|
|
|
|
|
|
|
|
</header>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
|
|
function toggleFav(e){e.classList.toggle("active");event.stopPropagation()}
|
|
|
|
|
|
|
|
function showView(id,n){
|
|
|
|
|
|
|
|
document.querySelectorAll(".view").forEach(function(v){v.classList.remove("active")});
|
|
|
|
|
|
|
|
document.getElementById(id).classList.add("active");
|
|
|
|
|
|
|
|
document.querySelectorAll(".nav-item").forEach(function(x){x.classList.remove("active")});
|
|
|
|
|
|
|
|
n.classList.add("active")}
|
|
|
|
|
|
|
|
var modalData={
|
|
|
|
|
|
|
|
SC:{name:"SC 原油",price:"644.5",chg:"-2.02%",dir:"down",vol:"58.2万手",oi:"28.4万手",amp:"5.2%",rsi:"62",macd:"金叉",trend:"偏空",signal:"观望",
|
|
|
|
|
|
|
|
logic:"EIA库存超预期下降+OPEC+延长减产,但宏观需求预期偏弱。"},
|
|
|
|
|
|
|
|
RB:{name:"RB 螺纹",price:"3,485",chg:"+0.85%",dir:"up",vol:"52.1万手",oi:"38.5万手",amp:"2.1%",rsi:"48",macd:"死叉",trend:"震荡",signal:"观望",
|
|
|
|
|
|
|
|
logic:"淡季累库压力较大,政策预期与基本面博弈。"},
|
|
|
|
|
|
|
|
AG:{name:"AG 沪银",price:"18,643",chg:"+2.27%",dir:"up",vol:"45.8万手",oi:"18.2万手",amp:"4.5%",rsi:"71",macd:"金叉",trend:"偏多",signal:"偏多",
|
|
|
|
|
|
|
|
logic:"降息预期+央行购金+避险情绪共振,多头趋势延续。"},
|
|
|
|
|
|
|
|
SA:{name:"SA 纯碱",price:"1,825",chg:"-3.10%",dir:"down",vol:"38.6万手",oi:"15.8万手",amp:"6.8%",rsi:"28",macd:"死叉",trend:"偏空",signal:"偏空",
|
|
|
|
|
|
|
|
logic:"高库存+光伏需求下滑+新产能投放,基本面偏弱。"},
|
|
|
|
|
|
|
|
IF:{name:"IF 股指",price:"3,856",chg:"+1.80%",dir:"up",vol:"32.4万手",oi:"42.8万手",amp:"2.4%",rsi:"58",macd:"金叉",trend:"偏多",signal:"偏多",
|
|
|
|
|
|
|
|
logic:"央行降准+外资流入,情绪回暖。"},
|
|
|
|
|
|
|
|
FG:{name:"FG 玻璃",price:"1,258",chg:"-1.90%",dir:"down",vol:"22.3万手",oi:"12.1万手",amp:"3.9%",rsi:"35",macd:"死叉",trend:"偏空",signal:"偏空",
|
|
|
|
|
|
|
|
logic:"地产竣工走弱+库存高位,需求端承压。"},
|
|
|
|
|
|
|
|
LU:{name:"LU 燃油",price:"4,520",chg:"+0.65%",dir:"up",vol:"18.5万手",oi:"8.2万手",amp:"3.2%",rsi:"52",macd:"中性",trend:"震荡",signal:"观望",
|
|
|
|
|
|
|
|
logic:"跟随原油走势,自身供需平衡。"},
|
|
|
|
|
|
|
|
M:{name:"M 豆粕",price:"3,185",chg:"+0.35%",dir:"up",vol:"28.6万手",oi:"24.2万手",amp:"1.8%",rsi:"45",macd:"中性",trend:"震荡",signal:"观望",
|
|
|
|
|
|
|
|
logic:"美豆震荡+国内养殖需求平稳。"},
|
|
|
|
|
|
|
|
MA:{name:"MA 甲醇",price:"2,456",chg:"-0.55%",dir:"down",vol:"25.1万手",oi:"20.8万手",amp:"2.0%",rsi:"42",macd:"中性",trend:"震荡",signal:"观望",
|
|
|
|
|
|
|
|
logic:"港口库存偏高+煤价成本支撑。"}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var klineData={
|
|
|
|
|
|
|
|
SC:[
|
|
|
|
|
|
|
|
[20260520,642,658,640,655,125000],[20260521,656,662,648,650,118000],[20260522,650,655,645,652,132000],[20260523,653,660,648,658,140000],[20260524,659,668,655,660,155000],[20260525,661,665,650,652,148000],[20260526,652,658,642,645,138000],[20260527,645,652,638,648,142000],[20260528,649,655,640,642,135000],[20260529,642,650,635,645,150000],[20260530,646,658,642,655,162000],[20260531,656,668,650,662,175000],[20260601,663,670,640,644.5,188000]
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
RB:[
|
|
|
|
|
|
|
|
[20260520,3520,3550,3500,3530,85000],[20260521,3532,3560,3510,3545,82000],[20260522,3545,3570,3520,3555,88000],[20260523,3556,3580,3540,3570,92000],[20260524,3572,3590,3550,3560,95000],[20260525,3560,3575,3530,3540,90000],[20260526,3540,3555,3510,3520,86000],[20260527,3520,3540,3490,3500,88000],[20260528,3500,3520,3480,3495,84000],[20260529,3495,3510,3470,3480,92000],[20260530,3482,3500,3460,3475,88000],[20260531,3475,3495,3455,3485,86000],[20260601,3486,3510,3470,3485,90000]
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
AG:[
|
|
|
|
|
|
|
|
[20260520,18200,18450,18100,18350,55000],[20260521,18360,18500,18250,18420,58000],[20260522,18430,18600,18350,18550,62000],[20260523,18560,18700,18480,18620,65000],[20260524,18630,18800,18550,18750,70000],[20260525,18760,18900,18650,18700,68000],[20260526,18710,18780,18550,18600,64000],[20260527,18610,18700,18480,18550,62000],[20260528,18560,18650,18400,18480,60000],[20260529,18490,18580,18350,18420,63000],[20260530,18430,18600,18380,18520,66000],[20260531,18530,18700,18480,18650,70000],[20260601,18660,18800,18580,18643,75000]
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
SA:[
|
|
|
|
|
|
|
|
[20260520,1920,1950,1900,1935,42000],[20260521,1936,1960,1910,1920,45000],[20260522,1920,1940,1890,1900,48000],[20260523,1900,1920,1870,1880,52000],[20260524,1880,1900,1860,1870,55000],[20260525,1870,1890,1850,1860,50000],[20260526,1860,1880,1840,1850,48000],[20260527,1850,1870,1830,1845,46000],[20260528,1845,1860,1820,1830,44000],[20260529,1830,1850,1810,1820,47000],[20260530,1820,1840,1800,1810,50000],[20260531,1810,1830,1790,1800,48000],[20260601,1800,1850,1780,1825,52000]
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
IF:[
|
|
|
|
|
|
|
|
[20260520,3820,3850,3800,3835,35000],[20260521,3836,3860,3810,3850,36000],[20260522,3851,3870,3830,3860,37000],[20260523,3862,3880,3840,3870,38000],[20260524,3872,3890,3850,3880,40000],[20260525,3880,3895,3860,3875,38000],[20260526,3875,3890,3850,3860,36000],[20260527,3860,3880,3840,3855,35000],[20260528,3855,3870,3830,3845,34000],[20260529,3845,3860,3820,3840,36000],[20260530,3840,3860,3820,3850,37000],[20260531,3850,3870,3835,3860,38000],[20260601,3862,3880,3845,3856,40000]
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
FG:[
|
|
|
|
|
|
|
|
[20260520,1320,1350,1300,1335,28000],[20260521,1336,1355,1310,1320,30000],[20260522,1320,1340,1290,1300,32000],[20260523,1300,1320,1280,1290,35000],[20260524,1290,1310,1270,1280,38000],[20260525,1280,1300,1260,1270,36000],[20260526,1270,1290,1250,1260,34000],[20260527,1260,1280,1240,1255,32000],[20260528,1255,1270,1235,1250,30000],[20260529,1250,1265,1230,1240,33000],[20260530,1240,1260,1225,1235,31000],[20260531,1235,1255,1220,1230,30000],[20260601,1230,1270,1215,1258,32000]
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
LU:[
|
|
|
|
|
|
|
|
[20260520,4480,4520,4460,4500,22000],[20260521,4502,4530,4480,4510,23000],[20260522,4512,4540,4490,4520,24000],[20260523,4522,4550,4500,4535,25000],[20260524,4536,4560,4510,4545,26000],[20260525,4546,4565,4520,4530,24000],[20260526,4530,4550,4500,4510,22000],[20260527,4510,4535,4490,4505,23000],[20260528,4505,4525,4480,4495,21000],[20260529,4495,4515,4470,4490,22000],[20260530,4490,4510,4470,4500,23000],[20260531,4500,4525,4480,4510,24000],[20260601,4510,4540,4490,4520,25000]
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
M:[
|
|
|
|
|
|
|
|
[20260520,3150,3180,3130,3165,32000],[20260521,3166,3190,3140,3175,33000],[20260522,3176,3200,3155,3190,35000],[20260523,3192,3210,3170,3200,36000],[20260524,3202,3220,3180,3210,38000],[20260525,3212,3225,3190,3200,36000],[20260526,3200,3215,3180,3190,34000],[20260527,3190,3205,3170,3185,33000],[20260528,3185,3200,3165,3180,32000],[20260529,3180,3195,3160,3175,34000],[20260530,3175,3190,3155,3180,33000],[20260531,3180,3195,3160,3185,34000],[20260601,3186,3200,3170,3185,35000]
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
MA:[
|
|
|
|
|
|
|
|
[20260520,2480,2510,2460,2495,28000],[20260521,2496,2520,2470,2485,30000],[20260522,2486,2510,2460,2475,32000],[20260523,2476,2500,2450,2465,34000],[20260524,2466,2490,2440,2455,36000],[20260525,2455,2480,2435,2445,34000],[20260526,2445,2470,2425,2440,32000],[20260527,2440,2460,2420,2435,30000],[20260528,2435,2455,2415,2430,28000],[20260529,2430,2450,2410,2425,30000],[20260530,2425,2445,2405,2420,29000],[20260531,2420,2440,2400,2415,28000],[20260601,2415,2470,2400,2456,30000]
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var klineChart=null;
|
|
|
|
|
|
|
|
function renderKline(code){
|
|
|
|
|
|
|
|
if(!klineData[code])return;
|
|
|
|
|
|
|
|
var container=document.getElementById('kline-container');
|
|
|
|
|
|
|
|
if(!container)return;
|
|
|
|
|
|
|
|
if(!klineChart){klineChart=echarts.init(container)}
|
|
|
|
|
|
|
|
var raw=klineData[code];
|
|
|
|
|
|
|
|
var dates=raw.map(function(r){return r[0].toString()});
|
|
|
|
|
|
|
|
var ohlc=raw.map(function(r){return[r[1],r[2],r[3],r[4]]});
|
|
|
|
|
|
|
|
var vols=raw.map(function(r){return r[5]});
|
|
|
|
|
|
|
|
var ma5=[],ma10=[];
|
|
|
|
|
|
|
|
for(var i=0;i<ohlc.length;i++){
|
|
|
|
|
|
|
|
var c=ohlc[i][3];var s5=0,c5=0,s10=0,c10=0;
|
|
|
|
|
|
|
|
for(var j=0;j<5&&i-j>=0;j++){s5+=ohlc[i-j][3];c5++}
|
|
|
|
|
|
|
|
for(var j=0;j<10&&i-j>=0;j++){s10+=ohlc[i-j][3];c10++}
|
|
|
|
|
|
|
|
ma5.push(c5>0?s5/c5:null);ma10.push(c10>0?s10/c10:null);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
var opt={
|
|
|
|
|
|
|
|
grid:[{left:50,right:20,top:20,height:'55%'},{left:50,right:20,top:'78%',height:'18%'}],
|
|
|
|
|
|
|
|
xAxis:[{type:'category',data:dates,gridIndex:0,axisLine:{lineStyle:{color:'#eee'}},axisLabel:{show:false}},{type:'category',data:dates,gridIndex:1,axisLine:{lineStyle:{color:'#eee'}},axisLabel:{show:false}}],
|
|
|
|
|
|
|
|
yAxis:[{scale:true,splitArea:{show:true,areaStyle:{color:['#fff','#f9f9f9']}},axisLine:{lineStyle:{color:'#eee'}}},{scale:true,gridIndex:1,splitArea:{show:true,areaStyle:{color:['#fff','#f9f9f9']}},axisLine:{lineStyle:{color:'#eee'}},axisLabel:{show:false}}],
|
|
|
|
|
|
|
|
dataZoom:[{type:'inside',xAxisIndex:[0,1],start:30,end:100}],
|
|
|
|
|
|
|
|
tooltip:{trigger:'axis',axisPointer:{type:'cross'},formatter:function(p){if(!p[0])return'';var d=p[0].dataIndex;var o=ohlc[d];return dates[d].substring(4)+'<br>开: '+o[0]+' 高: '+o[1]+'<br>低: '+o[2]+' 收: '+o[3]+'<br>量: '+vols[d]}},
|
|
|
|
|
|
|
|
series:[
|
|
|
|
|
|
|
|
{name:'K线',type:'candlestick',data:ohlc,itemStyle:{color:'#FF3B30',color0:'#34C759',borderColor:'#FF3B30',borderColor0:'#34C759'}},
|
|
|
|
|
|
|
|
{name:'MA5',type:'line',data:ma5,smooth:true,lineStyle:{width:1.5,color:'#AF52DE'}},
|
|
|
|
|
|
|
|
{name:'MA10',type:'line',data:ma10,smooth:true,lineStyle:{width:1.5,color:'#FF9F0A'}},
|
|
|
|
|
|
|
|
{name:'成交量',type:'bar',xAxisIndex:1,yAxisIndex:1,data:vols.map(function(v,i){return{value:v,itemStyle:{color:ohlc[i][3]>=ohlc[i][0]?'rgba(255,59,48,0.5)':'rgba(52,199,89,0.5)'}}})}
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
legend:{data:['K线','MA5','MA10','成交量'],bottom:0,itemWidth:12,itemHeight:8,textStyle:{fontSize:10}}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
klineChart.setOption(opt,true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function showDetail(code){
|
|
|
|
|
|
|
|
var d=modalData[code];if(!d)return;
|
|
|
|
|
|
|
|
var el=document.getElementById('modal-body');
|
|
|
|
|
|
|
|
el.innerHTML='<div class="modal-section"><div class="modal-section-title">实时行情</div><div class="modal-grid">'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">最新价</div><div class="modal-stat-val '+d.dir+'">'+d.price+'</div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">涨跌幅</div><div class="modal-stat-val '+d.dir+'">'+d.chg+'</div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">成交量</div><div class="modal-stat-val">'+d.vol+'</div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">持仓量</div><div class="modal-stat-val">'+d.oi+'</div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">振幅</div><div class="modal-stat-val">'+d.amp+'</div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">RSI</div><div class="modal-stat-val">'+d.rsi+'</div></div></div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-section"><div class="modal-section-title">技术信号</div><div class="modal-grid">'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">MACD</div><div class="modal-stat-val">'+d.macd+'</div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">趋势</div><div class="modal-stat-val">'+d.trend+'</div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">信号</div><div class="modal-stat-val "+(d.signal=="偏多"?"down":d.signal=="偏空"?"up":"")+"">'+d.signal+'</div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-stat"><div class="modal-stat-label">AI建议</div><div class="modal-stat-val" style="color:var(--color-ai)">查看分析</div></div></div></div>'+
|
|
|
|
|
|
|
|
'<div class="modal-section"><div class="modal-section-title">分析逻辑</div><div class="modal-ai-box">'+d.logic+'</div></div>';
|
|
|
|
|
|
|
|
document.getElementById('modal-title').textContent=d.name;
|
|
|
|
|
|
|
|
setTimeout(function(){renderKline(code)},100);
|
|
|
|
|
|
|
|
document.getElementById('detail-modal').classList.add('show');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function closeModal(){document.getElementById("detail-modal").classList.remove("show");if(klineChart){klineChart.dispose();klineChart=null}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function togglePlan(el){
|
|
|
|
|
|
|
|
var detail=el.nextElementSibling;
|
|
|
|
|
|
|
|
var isOpen=detail.classList.contains("open");
|
|
|
|
|
|
|
|
document.querySelectorAll(".plan-detail.open").forEach(function(d){d.classList.remove("open");d.previousElementSibling.classList.remove("expanded")});
|
|
|
|
|
|
|
|
if(!isOpen){detail.classList.add("open");el.classList.add("expanded")}}
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<div id="list-view" class="view active"><div class="container">
|
|
|
|
|
|
|
|
<div class="toolbar"><input type="text" class="search-box" placeholder="搜索合约代码或名称..."><div class="pills"><div class="pill active">全部</div><div class="pill">能源</div><div class="pill">金属</div><div class="pill">农产品</div><div class="pill">化工</div></div></div>
|
|
|
|
|
|
|
|
<div class="stats-row">
|
|
|
|
|
|
|
|
<div class="stat-card"><div class="stat-icon blue">=</div><div><div class="stat-val">32</div><div class="stat-label">监控品种</div></div></div>
|
|
|
|
|
|
|
|
<div class="stat-card"><div class="stat-icon green">↗</div><div><div class="stat-val">7</div><div class="stat-label">上涨趋势</div></div></div>
|
|
|
|
|
|
|
|
<div class="stat-card"><div class="stat-icon red">↘</div><div><div class="stat-val">10</div><div class="stat-label">下跌趋势</div></div></div>
|
|
|
|
|
|
|
|
<div class="stat-card"><div class="stat-icon orange">↔</div><div><div class="stat-val">15</div><div class="stat-label">震荡整理</div></div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="grid">
|
|
|
|
|
|
|
|
<div class="card"><div class="card-header"><div class="card-left"><div class="code-box">SC</div><div class="info-group"><div class="name-row">原油 <span class="fav-icon" onclick="toggleFav(this)">★</span></div><div class="contract-code">SC2606</div></div></div><div class="price-area"><div class="price down">644.5</div><div class="change down">-2.02%</div></div></div><div class="action-pill watch">观望</div><div class="metrics"><div class="metric"><div class="metric-label">成功率 60%</div><div class="bar-bg"><div class="bar-fill" style="width:60%;background:var(--color-neutral)"></div></div></div></div><div class="timeframes"><div class="tf active">15M</div><div class="tf">1H</div><div class="tf">4H</div></div><div class="card-footer"><div class="support-resist"><span>压力 <b class="red">642.4</b></span></div><a href="#">详情</a></div></div>
|
|
|
|
|
|
|
|
<div class="card"><div class="card-header"><div class="card-left"><div class="code-box">AG</div><div class="info-group"><div class="name-row">沪银 <span class="fav-icon active" onclick="toggleFav(this)">★</span></div><div class="contract-code">AG2606</div></div></div><div class="price-area"><div class="price up">18,643</div><div class="change up">+2.27%</div></div></div><div class="action-pill do-more">做多</div><div class="metrics"><div class="metric"><div class="metric-label">成功率 85%</div><div class="bar-bg"><div class="bar-fill" style="width:85%;background:var(--color-down)"></div></div></div></div><div class="timeframes"><div class="tf active">15M</div><div class="tf">1H</div><div class="tf">4H</div></div><div class="card-footer"><div class="support-resist"><span>压力 <b class="red">18,685</b></span></div><a href="#">详情</a></div></div>
|
|
|
|
|
|
|
|
</div></div></div>
|
|
|
|
|
|
|
|
<div id="market-view" class="view"><div class="container">
|
|
|
|
|
|
|
|
<div class="event-banner">
|
|
|
|
|
|
|
|
<div class="event-card bearish"><div class="event-header"><span class="event-tag urgent">突发</span><span class="event-timer">T-00:15</span></div><div class="event-title">EIA 原油库存意外大幅下降 500 万桶</div><div class="event-impact"><span class="impact-badge bull">利多原油</span></div><div class="mini-contracts"><span class="mini-tag">SC</span><span class="mini-tag">LU</span></div></div>
|
|
|
|
|
|
|
|
<div class="event-card bullish"><div class="event-header"><span class="event-tag policy">政策</span><span class="event-timer">已公布</span></div><div class="event-title">央行宣布降准 0.25%</div><div class="event-impact"><span class="impact-badge bear">利多有色</span></div><div class="mini-contracts"><span class="mini-tag">IF</span><span class="mini-tag">CU</span></div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="overview-layout"><div class="left-col">
|
|
|
|
|
|
|
|
<div class="section-header">市场热力图</div>
|
|
|
|
|
|
|
|
<div class="heatmap-grid">
|
|
|
|
|
|
|
|
<div class="heat-cell heat-up-3" style="grid-column:span 2"><div class="name">SC 原油</div><div class="val">+3.8%</div></div>
|
|
|
|
|
|
|
|
<div class="heat-cell heat-up-1"><div class="name">AG 沪银</div><div class="val">+2.8%</div></div>
|
|
|
|
|
|
|
|
<div class="heat-cell heat-down-2"><div class="name">SA 纯碱</div><div class="val">-3.1%</div></div>
|
|
|
|
|
|
|
|
<div class="heat-cell heat-flat"><div class="name">M 豆粕</div><div class="val">0.0%</div></div>
|
|
|
|
|
|
|
|
<div class="heat-cell heat-up-1"><div class="name">IF 股指</div><div class="val">+1.8%</div></div>
|
|
|
|
|
|
|
|
<div class="heat-cell heat-flat"><div class="name">RB 螺纹</div><div class="val">-0.5%</div></div>
|
|
|
|
|
|
|
|
</div></div>
|
|
|
|
|
|
|
|
<div class="side-panel">
|
|
|
|
|
|
|
|
<div class="panel-box"><div class="panel-box-title">主力资金流向</div>
|
|
|
|
|
|
|
|
<div class="flow-row"><div class="flow-code">SC</div><div class="flow-bar-bg"><div class="flow-bar" style="width:80%;background:var(--color-up)"></div></div><div class="flow-val" style="color:var(--color-up)">+5.2亿</div></div>
|
|
|
|
|
|
|
|
<div class="flow-row"><div class="flow-code">SA</div><div class="flow-bar-bg"><div class="flow-bar" style="width:70%;background:var(--color-down)"></div></div><div class="flow-val" style="color:var(--color-down)">-4.5亿</div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="panel-box"><div class="panel-box-title">宏观日历</div>
|
|
|
|
|
|
|
|
<div class="calendar-item"><div class="cal-time">23:30</div><div><div class="cal-event">EIA 原油库存</div><div class="cal-stars">★★★</div></div></div>
|
|
|
|
|
|
|
|
<div class="calendar-item"><div class="cal-time">周五</div><div><div class="cal-event">非农数据</div><div class="cal-stars">★★★★</div></div></div>
|
|
|
|
|
|
|
|
</div></div></div></div></div>
|
|
|
|
|
|
|
|
<div id="alerts-view" class="view"><div class="container"><div class="alerts-layout">
|
|
|
|
|
|
|
|
<div class="side-panel">
|
|
|
|
|
|
|
|
<div class="ai-scan-card"><div class="ai-scan-title">今日风险指数: 72/100</div>
|
|
|
|
|
|
|
|
<div class="ai-scan-item"><b>疑似洗盘</b><br>纯碱 10:45 急跌后迅速拉回。</div>
|
|
|
|
|
|
|
|
<div class="ai-scan-item"><b>流动性枯竭</b><br>胶板 2610 连续 3 分钟无成交。</div></div>
|
|
|
|
|
|
|
|
<div class="panel-box"><div class="panel-box-title">预警统计</div>
|
|
|
|
|
|
|
|
<div style="display:flex;justify-content:space-between;font-size:12px;margin-bottom:4px"><span>今日触发</span><span style="font-weight:600">24 次</span></div>
|
|
|
|
|
|
|
|
<div style="display:flex;justify-content:space-between;font-size:12px"><span>误报率</span><span style="font-weight:600;color:var(--color-down)">12%</span></div></div></div>
|
|
|
|
|
|
|
|
<div class="alert-feed">
|
|
|
|
|
|
|
|
<div class="alert-filters"><div class="pill active">全部</div><div class="pill">紧急</div><div class="pill">事件驱动</div></div>
|
|
|
|
|
|
|
|
<div class="alert-card urgent"><div class="alert-time">14:32 - 关联事件: EIA</div><div class="alert-title">燃油快速突破 60 日均线</div><div class="alert-desc">EIA 库存超预期下降 | 5 分钟涨幅 1.5%</div><div class="alert-actions"><span>查看详情</span><span>AI 分析</span><span>加入自选</span></div></div>
|
|
|
|
|
|
|
|
<div class="alert-card urgent"><div class="alert-time">13:15</div><div class="alert-title">沪银成交量异常放大</div><div class="alert-desc">成交量为 20 日均值的 4.2 倍</div><div class="alert-actions"><span>查看详情</span><span>AI 分析</span></div></div>
|
|
|
|
|
|
|
|
<div class="alert-card"><div class="alert-time">11:20</div><div class="alert-title">螺纹 MACD 金叉</div><div class="alert-desc">15 分钟级别 MACD 快线上穿慢线</div><div class="alert-actions"><span>查看详情</span></div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="alerts-sidebar">
|
|
|
|
|
|
|
|
<div class="rule-group"><div class="rule-group-title">价格与指标</div>
|
|
|
|
|
|
|
|
<div class="rule-item" onclick="this.querySelector('.toggle').classList.toggle('on')"><span>价格突破 60 日均线</span><div class="toggle on"></div></div>
|
|
|
|
|
|
|
|
<div class="rule-item" onclick="this.querySelector('.toggle').classList.toggle('on')"><span>MACD 金叉/死叉</span><div class="toggle on"></div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="rule-group"><div class="rule-group-title">量能与事件</div>
|
|
|
|
|
|
|
|
<div class="rule-item" onclick="this.querySelector('.toggle').classList.toggle('on')"><span>成交量突增 > 3 倍</span><div class="toggle on"></div></div>
|
|
|
|
|
|
|
|
<div class="rule-item" onclick="this.querySelector('.toggle').classList.toggle('on')"><span>热点事件关联异动</span><div class="toggle"></div></div>
|
|
|
|
|
|
|
|
</div></div>
|
|
|
|
|
|
|
|
</div></div></div>
|
|
|
|
|
|
|
|
<div id="summary-view" class="view"><div class="container">
|
|
|
|
|
|
|
|
<div class="summary-header"><h2>复盘与交易计划</h2><div class="date">2026-06-01 (周一)</div></div>
|
|
|
|
|
|
|
|
<div class="summary-layout"><div class="summary-left">
|
|
|
|
|
|
|
|
<div class="rank-section"><div class="rank-title">成交量排名 Top 5</div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('SC')"><div class="rank-rank top">1</div><div class="rank-name">SC 原油</div><div class="rank-val up">58.2 万手</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('RB')"><div class="rank-rank top">2</div><div class="rank-name">RB 螺纹</div><div class="rank-val up">52.1 万手</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('AG')"><div class="rank-rank top">3</div><div class="rank-name">AG 沪银</div><div class="rank-val up">45.8 万手</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('SA')"><div class="rank-rank">4</div><div class="rank-name">SA 纯碱</div><div class="rank-val up">38.6 万手</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('IF')"><div class="rank-rank">5</div><div class="rank-name">IF 股指</div><div class="rank-val">32.4 万手</div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="rank-section"><div class="rank-title">振幅排名 Top 5</div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('SA')"><div class="rank-rank top">1</div><div class="rank-name">SA 纯碱</div><div class="rank-val">6.8%</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('SC')"><div class="rank-rank top">2</div><div class="rank-name">SC 原油</div><div class="rank-val">5.2%</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('AG')"><div class="rank-rank top">3</div><div class="rank-name">AG 沪银</div><div class="rank-val">4.5%</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('FG')"><div class="rank-rank">4</div><div class="rank-name">FG 玻璃</div><div class="rank-val">3.9%</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('LU')"><div class="rank-rank">5</div><div class="rank-name">LU 燃油</div><div class="rank-val">3.2%</div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="rank-section"><div class="rank-title">涨跌幅排名 Top 5</div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('SC')"><div class="rank-rank top">1</div><div class="rank-name">SC 原油</div><div class="rank-val up">+3.8%</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('AG')"><div class="rank-rank top">2</div><div class="rank-name">AG 沪银</div><div class="rank-val up">+2.8%</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('IF')"><div class="rank-rank top">3</div><div class="rank-name">IF 股指</div><div class="rank-val up">+1.8%</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('SA')"><div class="rank-rank">4</div><div class="rank-name">SA 纯碱</div><div class="rank-val down">-3.1%</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('FG')"><div class="rank-rank">5</div><div class="rank-name">FG 玻璃</div><div class="rank-val down">-1.9%</div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="rank-section"><div class="rank-title">持仓量排名 Top 5</div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('IF')"><div class="rank-rank top">1</div><div class="rank-name">IF 股指</div><div class="rank-val">42.8 万手</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('RB')"><div class="rank-rank top">2</div><div class="rank-name">RB 螺纹</div><div class="rank-val">38.5 万手</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('SC')"><div class="rank-rank top">3</div><div class="rank-name">SC 原油</div><div class="rank-val">28.4 万手</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('M')"><div class="rank-rank">4</div><div class="rank-name">M 豆粕</div><div class="rank-val">24.2 万手</div></div>
|
|
|
|
|
|
|
|
<div class="rank-row" onclick="showDetail('MA')"><div class="rank-rank">5</div><div class="rank-name">MA 甲醇</div><div class="rank-val">20.8 万手</div></div>
|
|
|
|
|
|
|
|
</div></div>
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
|
|
|
<div class="plan-header">交易机会</div>
|
|
|
|
|
|
|
|
<div class="plan-list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="plan-list-item" onclick="togglePlan(this)">
|
|
|
|
|
|
|
|
<div class="plan-list-left"><span class="plan-list-code">SC 原油</span><span class="plan-badge long">做多</span></div>
|
|
|
|
|
|
|
|
<div style="display:flex;align-items:center;gap:8px"><span class="plan-list-score">88</span><span class="plan-list-arrow">▼</span></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="plan-detail">
|
|
|
|
|
|
|
|
<div class="plan-card" style="margin-bottom:0">
|
|
|
|
|
|
|
|
<div class="plan-ai"><strong>评分: 88/100</strong><br>多空逻辑: EIA 库存超预期下降 + OPEC+ 延长减产 + 地缘局势升温,供给端紧缩共振。<br>入选理由: 量价齐升,5/15/30min 周期共振向上,MACD 金叉确认。</div>
|
|
|
|
|
|
|
|
<div class="plan-targets">
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">入场</div><div class="plan-target-val neutral">645-648</div></div>
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">止损</div><div class="plan-target-val red">638</div></div>
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">止盈</div><div class="plan-target-val green">670-685</div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="plan-actions"><button class="plan-btn primary">加入自选</button></div>
|
|
|
|
|
|
|
|
<div class="plan-note">置信度: 高 | 仓位建议: 15%-20%</div>
|
|
|
|
|
|
|
|
</div></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="plan-list-item" onclick="togglePlan(this)">
|
|
|
|
|
|
|
|
<div class="plan-list-left"><span class="plan-list-code">SA 纯碱</span><span class="plan-badge short">做空</span></div>
|
|
|
|
|
|
|
|
<div style="display:flex;align-items:center;gap:8px"><span class="plan-list-score">82</span><span class="plan-list-arrow">▼</span></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="plan-detail">
|
|
|
|
|
|
|
|
<div class="plan-card" style="margin-bottom:0">
|
|
|
|
|
|
|
|
<div class="plan-ai"><strong>评分: 82/100</strong><br>多空逻辑: 高库存 + 光伏玻璃需求下滑 + 新产能投产预期,基本面偏弱。<br>入选理由: 日内振幅 6.8% 居首,15min 级别顶背离确认,资金净流出 4.5 亿。</div>
|
|
|
|
|
|
|
|
<div class="plan-targets">
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">入场</div><div class="plan-target-val neutral">1,820-1,830</div></div>
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">止损</div><div class="plan-target-val red">1,860</div></div>
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">止盈</div><div class="plan-target-val green">1,750-1,720</div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="plan-actions"><button class="plan-btn primary">加入自选</button></div>
|
|
|
|
|
|
|
|
<div class="plan-note">置信度: 中高 | 仓位建议: 10%-15%</div>
|
|
|
|
|
|
|
|
</div></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="plan-list-item" onclick="togglePlan(this)">
|
|
|
|
|
|
|
|
<div class="plan-list-left"><span class="plan-list-code">AG 沪银</span><span class="plan-badge long">做多</span></div>
|
|
|
|
|
|
|
|
<div style="display:flex;align-items:center;gap:8px"><span class="plan-list-score">79</span><span class="plan-list-arrow">▼</span></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="plan-detail">
|
|
|
|
|
|
|
|
<div class="plan-card" style="margin-bottom:0">
|
|
|
|
|
|
|
|
<div class="plan-ai"><strong>评分: 79/100</strong><br>多空逻辑: 全球降息预期 + 央行持续增持黄金 + 避险情绪升温。<br>入选理由: 成交量 45.8 万手放量突破,多周期均线多头排列。</div>
|
|
|
|
|
|
|
|
<div class="plan-targets">
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">入场</div><div class="plan-target-val neutral">18,500-18,600</div></div>
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">止损</div><div class="plan-target-val red">18,350</div></div>
|
|
|
|
|
|
|
|
<div class="plan-target"><div class="plan-target-label">止盈</div><div class="plan-target-val green">19,000-19,200</div></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="plan-actions"><button class="plan-btn primary">加入自选</button></div>
|
|
|
|
|
|
|
|
<div class="plan-note">置信度: 中 | 仓位建议: 10%</div>
|
|
|
|
|
|
|
|
</div></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="plan-note" style="font-size:11px;margin-top:16px">以上由 AI 基于多维因子自动生成,仅供参考,不构成投资建议。</div>
|
|
|
|
|
|
|
|
</div></div></div></div>
|
|
|
|
|
|
|
|
<div id="detail-modal" class="modal-overlay" onclick="if(event.target===this)closeModal()">
|
|
|
|
|
|
|
|
<div class="modal"><div class="modal-header"><div class="modal-title" id="modal-title">品种详情</div><button class="modal-close" onclick="closeModal()">✕</button></div><div class="kline-chart" id="kline-container"></div><div class="modal-body" id="modal-body"></div><div class="modal-footer"><button class="plan-btn primary" onclick="closeModal()">加入自选</button><button class="plan-btn secondary" onclick="closeModal()">关闭</button></div></div></div>
|
|
|
|
|
|
|
|
</body></html>
|