Files
gate_scout_order/onchain_scout_gate/templates/dashboard.html
T
2026-05-25 17:19:13 +08:00

336 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<script>
(function () {
var lite = window.matchMedia("(max-width: 640px), (hover: none) and (pointer: coarse)").matches;
if (lite) document.documentElement.classList.add("matrix-lite");
})();
</script>
<title>MATRIX · FUNNEL</title>
<link rel="stylesheet" href="/static/style.css?v={{ asset_version }}" />
</head>
<body class="matrix-theme">
<canvas id="matrixRain" class="matrix-rain-canvas" aria-hidden="true"></canvas>
<div class="matrix-vignette" aria-hidden="true"></div>
<div class="matrix-aurora" aria-hidden="true"></div>
<div class="matrix-scanlines" aria-hidden="true"></div>
<div class="matrix-noise" aria-hidden="true"></div>
<div class="matrix-chrome">
<div class="matrix-hud" id="matrixHud">
<div class="matrix-hud-block matrix-hud-live">
<span class="matrix-hud-dot" aria-hidden="true"></span>
<div class="matrix-hud-stack">
<span class="matrix-hud-label">LINK</span>
<span class="matrix-hud-val" id="hudLink">SYNC…</span>
</div>
</div>
<div class="matrix-hud-block">
<span class="matrix-hud-label">CYCLE</span>
<span class="matrix-hud-val" id="hudCycle"></span>
</div>
<div class="matrix-hud-block" title="BTC:近8h×15m 环境(横盘时多空均可推送;否则涨→LONG、跌→SHORT);BTC·辅=日线 regime(仅参考)">
<span class="matrix-hud-label">BTC·辅</span>
<span class="matrix-hud-val" id="hudBtc"></span>
</div>
<div class="matrix-hud-block">
<span class="matrix-hud-label">POOL</span>
<span class="matrix-hud-val" id="hudPool"></span>
</div>
<div class="matrix-hud-block">
<span class="matrix-hud-label">PUSH</span>
<span class="matrix-hud-val" id="hudPush"></span>
</div>
<div class="matrix-hud-block matrix-hud-wide">
<span class="matrix-hud-label">GEMMA</span>
<span class="matrix-hud-val mono" id="hudGemma"></span>
</div>
<div class="matrix-hud-block matrix-hud-wide">
<span class="matrix-hud-label">LAST</span>
<span class="matrix-hud-val mono" id="hudLast"></span>
</div>
</div>
<header class="matrix-header matrix-header-crt">
<div class="matrix-brand">
<div class="matrix-title-wrap">
<div class="matrix-glitch matrix-glitch-xl" data-text="MATRIX // FUNNEL">
<span class="matrix-glitch-layer matrix-glitch-c">MATRIX // FUNNEL</span>
<span class="matrix-glitch-layer matrix-glitch-m">MATRIX // FUNNEL</span>
<span class="matrix-glitch-base">MATRIX // FUNNEL</span>
</div>
<div class="matrix-subdeck">
<span class="matrix-deco">[</span>
<span id="matrixTagline" class="matrix-tagline matrix-tagline-glow">Gate USDT 永续 · 5m 结构 → 日线漏斗 · Gemma 优先链</span>
<span class="matrix-deco">]</span>
</div>
</div>
</div>
<div class="matrix-radar-header" aria-hidden="true" title="战术雷达 · 装饰">
<div class="matrix-radar-hud">
<div class="matrix-radar-h-graticule"></div>
<div class="matrix-radar-h-cross"></div>
<div class="matrix-radar-h-rings"></div>
<div class="matrix-radar-h-sweep"></div>
<div class="matrix-radar-h-sweep matrix-radar-h-sweep-ghost"></div>
<div class="matrix-radar-h-blip"></div>
</div>
<span class="matrix-radar-h-caption">SCAN</span>
</div>
<div class="matrix-header-actions">
<span class="matrix-pill matrix-pill-clock" id="liveClock">--:--:--</span>
<span class="matrix-pill dim">OP ▸ <span id="opUser">{{ username }}</span></span>
<a class="matrix-btn ghost" href="/logout">断开链路</a>
</div>
</header>
<nav class="matrix-section-nav" id="sectionNav" aria-label="功能导航">
<div class="matrix-section-nav-inner">
<button type="button" class="matrix-nav-item is-active" data-nav-id="gemma-funnel">GEMMA4 漏斗</button>
<button type="button" class="matrix-nav-item" data-nav-id="key-monitor">关键位监控</button>
<button type="button" class="matrix-nav-item" data-nav-id="daily-report">每日晨报</button>
<button type="button" class="matrix-nav-item" data-nav-id="symbol-blocklist">监控黑名单</button>
<button type="button" class="matrix-nav-item" data-nav-id="order-executors">下单执行器</button>
<button type="button" class="matrix-nav-item" data-nav-id="intraday-rules">策略寄存器</button>
<button type="button" class="matrix-nav-item" data-nav-id="scan-layers">全市场扫描</button>
<button type="button" class="matrix-nav-item" data-nav-id="telemetry">系统遥测</button>
<button type="button" class="matrix-nav-item" data-nav-id="runtime-logs">运行日志</button>
</div>
</nav>
<main class="matrix-main matrix-crt-inner">
<section class="matrix-panel matrix-panel-hero matrix-panel-chrome matrix-nav-section is-nav-active" id="nav-gemma-funnel" data-nav-id="gemma-funnel">
<div class="matrix-panel-head matrix-panel-head-row">
<h2>// GEMMA 漏斗 · 优先矩阵</h2>
<span class="matrix-chip matrix-chip-magenta">LIVE FEED</span>
</div>
<div class="matrix-panel-body">
<div class="matrix-hero-radar" aria-hidden="true">
<div class="matrix-hero-radar-grid"></div>
<div class="matrix-hero-radar-sweep"></div>
<div class="matrix-hero-radar-sweep matrix-hero-radar-sweep-trail"></div>
<div class="matrix-hero-radar-ring"></div>
</div>
<p class="matrix-hint">合成评分 · 成交量 · 日线结构 · 上方空间 · 中间阻力 → 达标企业微信推送</p>
<div class="matrix-form-row matrix-form-row-tight">
<label for="funnelWindowHoursInput">展示窗口(h)</label>
<input id="funnelWindowHoursInput" type="number" step="1" min="1" max="168" value="24" title="仅显示该小时内写入的 gemma_funnel,保存在本浏览器" />
<button type="button" id="applyFunnelWindowBtn" class="matrix-btn">应用</button>
<span id="funnelWindowMsg" class="matrix-msg"></span>
</div>
<p id="funnelMeta" class="matrix-hint matrix-dim">// 数据同步中…</p>
<div id="funnelMatrix" class="matrix-grid"></div>
</div>
</section>
<section class="matrix-panel matrix-panel-chrome matrix-nav-section" id="keyMonitorPanel" data-nav-id="key-monitor">
<div class="matrix-panel-head matrix-panel-head-row">
<h2>// 关键位突破监控</h2>
<span class="matrix-chip matrix-dim">人工录入 · 5m 门控</span>
</div>
<div class="matrix-panel-body">
<p class="matrix-hint">GEMMA 漏斗仅供参考;在此录入上/下沿。箱体突破与收敛突破均支持「标准突破」或「趋势突破」(无 1.5H 方案)。</p>
<p id="keyMonitorRule" class="matrix-hint matrix-dim">// 规则加载中…</p>
<div class="matrix-form-row matrix-form-row-wrap key-monitor-form">
<input id="keySymbolInput" class="matrix-input key-monitor-field" type="text" placeholder="BTC 或 BTC/USDT" />
<div class="matrix-seg-group" id="keyMonitorTypeSeg" aria-label="结构类型">
<button type="button" class="matrix-seg-btn is-active" data-value="箱体突破">箱体</button>
<button type="button" class="matrix-seg-btn" data-value="收敛突破">收敛</button>
</div>
<input type="hidden" id="keyMonitorTypeInput" value="箱体突破" />
<select id="keyDirectionInput" class="matrix-input key-monitor-field">
<option value="">方向</option>
<option value="long">做多</option>
<option value="short">做空</option>
</select>
<input id="keyUpperInput" class="matrix-input key-monitor-field" type="number" step="any" placeholder="上沿/阻力" />
<input id="keyLowerInput" class="matrix-input key-monitor-field" type="number" step="any" placeholder="下沿/支撑" />
<select id="keySlTpModeInput" class="matrix-input key-monitor-field" title="止盈止损方案">
<option value="standard">标准突破</option>
<option value="trend_manual">趋势突破</option>
</select>
<input id="keyManualTpInput" class="matrix-input key-monitor-field key-monitor-tp" type="number" step="any" placeholder="趋势止盈价" style="display:none" />
<label class="matrix-hint key-monitor-check" style="display:inline-flex;align-items:center;gap:4px">
<input id="keyBreakevenInput" type="checkbox" /> 移动保本
</label>
<button type="button" id="keyAddBtn" class="matrix-btn matrix-btn-pulse key-monitor-add">添加监控</button>
</div>
<p id="keyMonitorSaveMsg" class="matrix-msg"></p>
<div class="matrix-two-col" style="margin-top:12px">
<div>
<div class="key-monitor-active-head">
<h3 class="matrix-hint" style="margin:0">监控中</h3>
<span id="keyMonitorActiveCount" class="matrix-chip key-monitor-count">0</span>
</div>
<div id="keyMonitorActive" class="matrix-list key-monitor-active-list"></div>
</div>
<div>
<div style="display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px">
<h3 class="matrix-hint" style="margin:0">关键位历史</h3>
<a id="keyHistoryExport" class="matrix-btn ghost" href="/export/key_monitor_history.csv?days=30" style="text-decoration:none;font-size:.75rem">导出 CSV</a>
</div>
<div id="keyMonitorHistory" class="matrix-list"></div>
</div>
</div>
</div>
</section>
<section class="matrix-panel matrix-panel-chrome matrix-nav-section" id="nav-daily-report" data-nav-id="daily-report">
<div class="matrix-panel-head matrix-panel-head-row">
<h2>// 每日晨报 · 昨日复盘</h2>
<button type="button" id="runDailyReportBtn" class="matrix-btn ghost">立即生成</button>
</div>
<div class="matrix-panel-body">
<div class="matrix-form-row">
<label>晨报开关</label>
<input id="dailyReportEnabledInput" type="checkbox" />
<label>北京时间执行</label>
<input id="dailyReportTimeInput" type="time" />
<label>推送企业微信</label>
<input id="dailyReportPushInput" type="checkbox" />
<label>启动即生成</label>
<input id="dailyReportStartupInput" type="checkbox" />
<button type="button" id="saveDailyReportBtn" class="matrix-btn matrix-btn-pulse">保存晨报配置</button>
</div>
<p id="dailyReportSaveMsg" class="matrix-msg"></p>
<p id="dailyReportMeta" class="matrix-hint matrix-dim">// 等待晨报数据…</p>
<div id="dailyReportBox" class="matrix-list"></div>
</div>
</section>
<section class="matrix-panel matrix-panel-chrome matrix-nav-section" id="nav-symbol-blocklist" data-nav-id="symbol-blocklist">
<div class="matrix-panel-head matrix-panel-head-row">
<h2>// 监控黑名单 · base</h2>
<span class="matrix-chip matrix-dim" id="symbolBlocklistCountChip">0 条规则</span>
</div>
<div class="matrix-panel-body">
<p class="matrix-hint">
Gate USDT 永续左侧 base(每行一个或逗号分隔),如 <code>XAU</code> <code>XAUT</code> <code>XAG</code><code>all_swaps</code>
<code>watchlist</code> 均会在入池后剔除。保存后下一轮扫描生效。
</p>
<textarea
id="symbolBlocklistInput"
class="matrix-input matrix-textarea"
rows="5"
spellcheck="false"
autocomplete="off"
placeholder="XAU&#10;XAUT&#10;XAG"
></textarea>
<div class="matrix-form-row matrix-form-row-tight">
<button type="button" id="saveSymbolBlocklistBtn" class="matrix-btn matrix-btn-pulse">保存黑名单</button>
</div>
<p id="symbolBlocklistSaveMsg" class="matrix-msg"></p>
</div>
</section>
<section class="matrix-panel matrix-panel-chrome matrix-nav-section" id="orderExecutorsPanel" data-nav-id="order-executors">
<div class="matrix-panel-head matrix-panel-head-row">
<h2>// 下单执行器 · 转发链</h2>
<span class="matrix-chip matrix-dim">仅扫描端维护 · 同一信号广播</span>
</div>
<div class="matrix-panel-body">
<p class="matrix-hint">
关键位门控通过且计划 RR 达标后,向列表中<strong>已启用</strong>的执行器 POST <code>/v1/signal</code>(单一 SL/TP,与录入方案一致)。
各执行器自行配置 Gate API、盈亏比、移动保本等;<strong>不支持执行器反向注册</strong>
修改 webhook 密钥后请同步到各执行器 <code>security.webhook_secret</code>
</p>
<div class="matrix-form-row matrix-form-row-wrap">
<label>总开关</label>
<input id="oeGlobalEnabled" type="checkbox" />
<label>Webhook 密钥</label>
<input id="oeWebhookSecret" class="matrix-input" type="password" style="min-width:14rem" autocomplete="new-password" />
<label>超时(s)</label>
<input id="oeTimeout" class="matrix-input" type="number" min="3" max="120" step="1" style="width:5rem" />
<button type="button" id="oeSaveGlobalBtn" class="matrix-btn matrix-btn-pulse">保存全局</button>
</div>
<p id="oeGlobalMsg" class="matrix-msg"></p>
<div class="matrix-form-row matrix-form-row-wrap" style="margin-top:12px">
<label>名称</label>
<input id="oeNewName" class="matrix-input" type="text" placeholder="如 account_a" style="width:8rem" />
<label>Base URL</label>
<input id="oeNewUrl" class="matrix-input" type="text" placeholder="http://127.0.0.1:8090" style="min-width:16rem" />
<label>启用</label>
<input id="oeNewEnabled" type="checkbox" checked />
<button type="button" id="oeAddBtn" class="matrix-btn ghost">添加执行器</button>
</div>
<p id="oeAddMsg" class="matrix-msg"></p>
<div id="oeList" class="matrix-list" style="margin-top:12px"></div>
</div>
</section>
<section class="matrix-panel matrix-panel-chrome matrix-nav-section" id="nav-intraday-rules" data-nav-id="intraday-rules">
<div class="matrix-panel-head">
<h2>// 策略寄存器 · 5m</h2>
</div>
<div class="matrix-panel-body">
<p class="matrix-hint">全市场雷达:横盘 + 5m 突破 + 放量 · 仅参考推送 · 正式下单请用「关键位突破监控」</p>
<div class="matrix-form-row">
<label>横盘时长(h)</label>
<input id="rangeHoursInput" type="number" step="0.5" min="1" />
<label>横盘振幅上限(%)</label>
<input id="rangeMaxPctInput" type="number" step="0.1" min="0.1" />
<label>放量倍数</label>
<input id="volumeSpikeMultInput" type="number" step="0.1" min="1" />
<label>放量回看根数</label>
<input id="volumeLookbackInput" type="number" step="1" min="5" />
<label>突破缓冲(%)</label>
<input id="breakoutBufferInput" type="number" step="0.01" min="0" />
<label>止损缓冲(%)</label>
<input id="stopBufferPctInput" type="number" step="0.05" min="0" max="10" title="全市场扫描企微参考止损:突破K极值外侧缓冲" />
<label>启用推送时间窗(09:00-23:00)</label>
<input id="pushTimeWindowEnabledInput" type="checkbox" />
<button type="button" id="saveIntradayBtn" class="matrix-btn matrix-btn-pulse">写入寄存器</button>
</div>
<p id="intradaySaveMsg" class="matrix-msg"></p>
</div>
</section>
<section class="matrix-panel matrix-panel-chrome matrix-nav-section" id="nav-scan-layers" data-nav-id="scan-layers">
<div class="matrix-panel-head">
<h2>// 全市场扫描 · 观察层 / 触发层</h2>
</div>
<div class="matrix-panel-body">
<p class="matrix-hint matrix-dim">自动箱体雷达 · 与关键位下单无关</p>
<div class="matrix-two-col">
<div class="matrix-panel matrix-panel-chrome matrix-panel-nested">
<div class="matrix-panel-head"><h2>// 观察层 · WATCH</h2></div>
<div id="watchAlerts" class="matrix-list"></div>
</div>
<div class="matrix-panel matrix-panel-chrome matrix-panel-nested">
<div class="matrix-panel-head"><h2>// 触发层 · TRIGGER</h2></div>
<div id="triggerAlerts" class="matrix-list"></div>
</div>
</div>
</div>
</section>
<section class="matrix-panel matrix-panel-wide matrix-panel-chrome matrix-nav-section" id="nav-telemetry" data-nav-id="telemetry">
<div class="matrix-panel-head">
<h2>// 系统遥测</h2>
</div>
<div class="matrix-panel-body">
<div class="matrix-split">
<pre id="status" class="matrix-pre matrix-pre-glow"></pre>
<pre id="config" class="matrix-pre matrix-pre-glow"></pre>
</div>
</div>
</section>
<section class="matrix-panel matrix-panel-wide matrix-panel-chrome matrix-nav-section" id="nav-runtime-logs" data-nav-id="runtime-logs">
<div class="matrix-panel-head">
<h2>// 运行日志</h2>
</div>
<div class="matrix-panel-body">
<div id="logs" class="matrix-list matrix-list-logs"></div>
</div>
</section>
</main>
</div>
<script src="/static/app.js?v={{ asset_version }}"></script>
</body>
</html>